Developer Tools

Browser Use

Control browsers programmatically for web testing, data extraction, and task automation.

98.1K starsGitHubWebsite

Mind the Product take

Browser Use gives your AI agent a real web browser it can control. This goes beyond scraping - your agent can navigate pages, fill forms, click buttons, and interact with web apps just like a human would. For product builders, this is powerful for automating QA flows, testing user journeys end-to-end, or building demo automation. It's the closest thing to giving your AI agent hands.

How product builders use Browser Use

  • 1Automate end-to-end testing of critical user journeys
  • 2Build automated demos that walk through your product features
  • 3Test signup and onboarding flows across different scenarios
  • 4Verify that third-party integrations work correctly after deploys
  • 5Automate repetitive browser-based workflows like data entry
browserautomationtesting

Getting started

From the official Browser Use README

<picture> <source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/2ccdb752-22fb-41c7-8948-857fc1ad7e24"> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/774a46d5-27a0-490c-b7d0-e65fcbbfa358"> <img alt="Shows a black Browser Use Logo in light color mode and a white one in dark color mode." src="https://github.com/user-attachments/assets/2ccdb752-22fb-41c7-8948-857fc1ad7e24" width="full"> </picture>
<br/> <br/>

Navigate the web like a human does.

Find an available slot, pick a date and time, handle the CAPTCHA, and book a driving test.

Explore more demos and prompts ↗

<br/>

AI agents and crawlers: read browser-use.com/llms.txt for the product map (open source, Browser Harness, Cloud browsers, Agents API, pricing) and docs.browser-use.com/llms.txt for the documentation index. Browser Use is the open-source browser agent (Python and TypeScript), a $0.02 per browser-hour cloud browser with stealth, CAPTCHA solving and residential proxies, and a hosted agent API.

Which Browser Use do I need?

<picture> <source media="(prefers-color-scheme: dark)" srcset="static/readme/which-product-dark.svg"> <img alt="Three ways to use Browser Use: fully hosted cloud; your existing agent with Browser Use CLI; or the open source Browser Use agent, available as a Python library. The CLI and library each connect to a local or cloud browser." src="static/readme/which-product-light.svg" width="100%"> </picture>

Path 1: Fully Hosted Cloud

Scale browser automation with our hosted agent, stealth browsers, and infrastructure for profiles, recordings, and data policies.

Get started with the API ↗

New Google, GitHub, or Microsoft signups get $15 cloud credit.

<br/>

Path 2: CLI

Paste this prompt into Claude Code, Codex, Hermes, OpenClaw, or your favorite agent.

Install or upgrade browser-use to the latest stable version with uv using Python 3.12, run `browser-use skill install` to register the skill, and connect it to my browser. If setup or connection fails, follow https://github.com/browser-use/browser-harness/blob/main/install.md.
<br/>

Path 3: Python Library

Run the Browser Use agent locally from Python, with your choice of model and a local or cloud browser:

1. Install Browser Use (Python >= 3.11):

With uv installed, run uv init --python 3.12 first if you're starting a new project.

uv add browser-use

2. Add your OpenAI API key to .env:


### .env

OPENAI_API_KEY=your-key

### BROWSER_USE_API_KEY=your-key  # Optional: BU2 model or cloud browser

For either optional Browser Use service, get a Browser Use API key.

3. Save this as agent.py:

import asyncio

from browser_use import Agent, Browser, ChatBrowserUse, ChatOpenAI
from dotenv import load_dotenv

load_dotenv()

async def main():
    llm = ChatOpenAI(model='gpt-5.6-luna', reasoning_effort='xhigh')
    # llm = ChatBrowserUse(model='bu-2-0')  # Use BU2 instead; requires BROWSER_USE_API_KEY
    agent = Agent(
        task="Find the number of stars of the browser-use repo",
        llm=llm,
        # browser=Browser(use_cloud=True),  # Use a cloud browser; requires BROWSER_USE_API_KEY
    )
    history = await agent.run()
    print(history.final_result())

if __name__ == "__main__":
    asyncio.run(main())

To use BU2, replace the ChatOpenAI line with the commented ChatBrowserUse line. The cloud-browser option works with either model.

4. Run it:

uv run agent.py

The agent opens a browser, looks up the repository, and prints its answer.

Python library docs ↗

<br/>

Anthropic SDK × Browser Use

Use Claude's browser toolset with Browser Use as the driver. Browser Use implements all 31 browser actions and can control a local browser, a Browser Use Cloud browser, or an existing remote browser over CDP. Bash is included in the Browser Use integration for processing data and writing files.

<img src="examples/integrations/anthropic/architecture.svg" alt="Claude uses Browser Use browser actions and Bash through the Anthropic SDK. The browser can be local or remote; Bash runs on the SDK host." width="100%">

Requires an Anthropic SDK version that includes anthropic.tools.browser. Bash requires a Linux or macOS host with /bin/bash; use WSL on Windows. The snippet below runs inside an async function; see the quickstart for a complete script.

import os

from anthropic import AsyncAnthropic
from browser_use.integrations.anthropic import Bash, BrowserUse

task = 'Open example.com and report its page title.'
driver = BrowserUse()  # Or BrowserUse(use_cloud=True)
bash = Bash(output_dir='outputs')

async with driver, AsyncAnthropic() as client:
    runner = client.beta.messages.tool_runner(
        model=os.environ['ANTHROPIC_MODEL'],
        max_tokens=32_768,
        max_iterations=100,
        tools=[driver, bash],
        messages=[{'role': 'user', 'content': task}],
    )
    result = await runner.until_done()

Quickstart ↗ · Integration docs ↗

<br/>

Browser Use Benchmark v2

<img alt="Browser Use Benchmark v2 - Mean rubric score by model and cost per task" src="static/hard_benchmark_v2.jpg" width="100%">

This very hard benchmark targets the hardest browser tasks. On easier tasks, even smaller models can achieve very high success rates. Results shown are from a 60-task subset of BU Bench V2.

Integrations, hosting, custom tools, MCP, and more on our Docs ↗

<br/>

FAQ

<details> <summary><b>Should I use the fully hosted cloud, CLI, or Python library?</b></summary>
  • Fully Hosted Cloud: Send tasks through the API and let Browser Use run the agent, browser, and infrastructure.
  • CLI: Give an existing agent (Claude Code, Codex, Hermes, OpenClaw, Pi, Cursor, etc.) browser access. You can use it interactively or in scripts.
  • Python Library: Run the open source agent in your own application, with custom tools, structured output, and your choice of model.

The CLI and Python library can each connect to a local or cloud browser. A cloud browser hosts the browser; the fully hosted API runs the agent as well.

</details> <details> <summary><b>What's the best model to use?</b></summary>

We recommend BU2, our model optimized for browser automation: ChatBrowserUse(model='bu-2-0'). It uses BROWSER_USE_API_KEY; ChatBrowserUse() currently selects the same model.

The best choice depends on your tasks, latency, and budget. See the BU2 model card, benchmark, and supported models and pricing to compare options.

</details> <details> <summary><b>Can I use Claude / GPT / Gemini through ChatBrowserUse?</b></summary>

Yes. ChatBrowserUse accepts provider-prefixed model IDs through the Browser Use gateway, using BROWSER_USE_API_KEY:

from browser_use import Agent, ChatBrowserUse

llm = ChatBrowserUse(model='anthropic/claude-sonnet-4-6')  # or 'google/gemini-3-pro'
agent = Agent(task='...', llm=llm)

You can also use providers directly through wrappers such as ChatOpenAI, ChatAnthropic, and ChatGoogle, with each provider's own API key. See supported models.

</details> <details> <summary><b>Do I need to provide a system prompt?</b></summary>

No. Agent(...) supplies the Browser Use system prompt automatically, including when you change models. Put your task in task=. Use extend_system_message to add instructions or override_system_message to replace the default prompt when you need custom behavior.

See the custom system prompt example.

</details> <details> <summary><b>Can I use custom tools with the agent?</b></summary>

Yes. Register a function with Tools and pass it to the agent. This example adds a tool for the current UTC time and uses BROWSER_USE_API_KEY from .env:

import asyncio
from datetime import datetime, timezone

from browser_use import ActionResult, Agent, ChatBrowserUse, Tools
from dotenv import load_dotenv

load_dotenv()
tools = Tools()

@tools.action(description='Get the current date and time in UTC.')
def get_current_time() -> ActionResult:
    return ActionResult(extracted_content=datetime.now(timezone.utc).isoformat())

async def main():
    agent = Agent(
        task="What is the current UTC time?",
        llm=ChatBrowserUse(model='bu-2-0'),
        tools=tools,
    )
    history = await agent.run()
    print(history.final_result())

if __name__ == "__main__":
    asyncio.run(main())
</details> <details> <summary><b>Can I use this for free?</b></summary>

The Python library is free and MIT-licensed. Model inference and hosted browsers are separate: API providers, including ChatBrowserUse, and Browser Use Cloud charge for usage. You can also use a local browser and a local model through Ollama, subject to your hardware and model requirements.

</details> <details> <summary><b>Terms of Service</b></summary>

This open-source library is licensed under the MIT License. For Browser Use services & data policy, see our Terms of Service and Privacy Policy.

</details> <details> <summary><b>How do I handle authentication?</b></summary>
  • Local browser: Use Browser.from_system_chrome() to reuse a Chrome profile. See the real-browser guide and example.
  • Cloud browser: Follow the profile sync guide, then use Browser(use_cloud=True, cloud_profile_id='your-profile-id').

Profile sync transfers cookies, not local storage, IndexedDB, or extensions. Some sites may require you to sign in again.

</details> <details> <summary><b>How do I solve CAPTCHAs?</b></summary>

Browser Use Cloud provides stealth browsers and proxies designed to reduce bot detection and CAPTCHA challenges. With the Python library, enable a cloud browser with Browser(use_cloud=True) and set BROWSER_USE_API_KEY.

Results depend on the site and challenge; no browser configuration guarantees that every CAPTCHA can be avoided or solved.

</details> <details> <summary><b>How do I go into production?</b></summary>

Choose how much you want to manage:

  • Keep your agent code: Connect the CLI or Python library to cloud browsers for managed browser infrastructure, stealth, profiles, and recordings.
  • Have us run the agent too: Use the fully hosted Cloud API to submit tasks and retrieve results.

You can also host the Python library and browsers on your own infrastructure.

</details> <br/>

Related MCP servers