base on 🌐 Make websites accessible for AI agents. Automate tasks online with ease. <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> <div align="center"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/9955dda9-ede3-4971-8ee0-91cbc3850125""> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/6797d09b-8ac3-4cb9-ba07-b289e080765a"> <img alt="The AI browser agent." src="https://github.com/user-attachments/assets/9955dda9-ede3-4971-8ee0-91cbc3850125" width="400"> </picture> </div> <div align="center"> <a href="https://cloud.browser-use.com"><img src="https://media.browser-use.tools/badges/package" height="48" alt="Browser-Use Package Download Statistics"></a> </div> --- <div align="center"> <a href="#demos"><img src="https://media.browser-use.tools/badges/demos" alt="Demos"></a> <img width="16" height="1" alt=""> <a href="https://docs.browser-use.com"><img src="https://media.browser-use.tools/badges/docs" alt="Docs"></a> <img width="16" height="1" alt=""> <a href="https://browser-use.com/posts"><img src="https://media.browser-use.tools/badges/blog" alt="Blog"></a> <img width="16" height="1" alt=""> <a href="https://browsermerch.com"><img src="https://media.browser-use.tools/badges/merch" alt="Merch"></a> <img width="100" height="1" alt=""> <a href="https://github.com/browser-use/browser-use"><img src="https://media.browser-use.tools/badges/github" alt="Github Stars"></a> <img width="4" height="1" alt=""> <a href="https://x.com/intent/user?screen_name=browser_use"><img src="https://media.browser-use.tools/badges/twitter" alt="Twitter"></a> <img width="4 height="1" alt=""> <a href="https://link.browser-use.com/discord"><img src="https://media.browser-use.tools/badges/discord" alt="Discord"></a> <img width="4" height="1" alt=""> <a href="https://cloud.browser-use.com"><img src="https://media.browser-use.tools/badges/cloud" height="48" alt="Browser-Use Cloud"></a> </div> </br> 🌤️ Want to skip the setup? Use our <b>[cloud](https://cloud.browser-use.com)</b> for faster, scalable, stealth-enabled browser automation! # 🤖 LLM Quickstart 1. Direct your favorite coding agent (Cursor, Claude Code, etc) to [Agents.md](https://docs.browser-use.com/llms-full.txt) 2. Prompt away! <br/> # 👋 Human Quickstart **1. Create environment with [uv](https://docs.astral.sh/uv/) (Python>=3.11):** ```bash uv init ``` **2. Install Browser-Use package:** ```bash # We ship every day - use the latest version! uv add browser-use uv sync ``` **3. Get your API key from [Browser Use Cloud](https://cloud.browser-use.com/new-api-key) and add it to your `.env` file (new signups get $10 free credits):** ``` # .env BROWSER_USE_API_KEY=your-key ``` **4. Install Chromium browser:** ```bash uvx browser-use install ``` **5. Run your first agent:** ```python from browser_use import Agent, Browser, ChatBrowserUse import asyncio async def example(): browser = Browser( # use_cloud=True, # Uncomment to use a stealth browser on Browser Use Cloud ) llm = ChatBrowserUse() agent = Agent( task="Find the number of stars of the browser-use repo", llm=llm, browser=browser, ) history = await agent.run() return history if __name__ == "__main__": history = asyncio.run(example()) ``` Check out the [library docs](https://docs.browser-use.com) and the [cloud docs](https://docs.cloud.browser-use.com) for more! <br/> # 🔥 Deploy on Sandboxes We handle agents, browsers, persistence, auth, cookies, and LLMs. The agent runs right next to the browser for minimal latency. ```python from browser_use import Browser, sandbox, ChatBrowserUse from browser_use.agent.service import Agent import asyncio @sandbox() async def my_task(browser: Browser): agent = Agent(task="Find the top HN post", browser=browser, llm=ChatBrowserUse()) await agent.run() # Just call it like any async function asyncio.run(my_task()) ``` See [Going to Production](https://docs.browser-use.com/production) for more details. <br/> # 🚀 Template Quickstart **Want to get started even faster?** Generate a ready-to-run template: ```bash uvx browser-use init --template default ``` This creates a `browser_use_default.py` file with a working example. Available templates: - `default` - Minimal setup to get started quickly - `advanced` - All configuration options with detailed comments - `tools` - Examples of custom tools and extending the agent You can also specify a custom output path: ```bash uvx browser-use init --template default --output my_agent.py ``` <br/> # Demos ### 📋 Form-Filling #### Task = "Fill in this job application with my resume and information." ![Job Application Demo](https://github.com/user-attachments/assets/57865ee6-6004-49d5-b2c2-6dff39ec2ba9) [Example code ↗](https://github.com/browser-use/browser-use/blob/main/examples/use-cases/apply_to_job.py) ### 🍎 Grocery-Shopping #### Task = "Put this list of items into my instacart." https://github.com/user-attachments/assets/a6813fa7-4a7c-40a6-b4aa-382bf88b1850 [Example code ↗](https://github.com/browser-use/browser-use/blob/main/examples/use-cases/buy_groceries.py) ### 💻 Personal-Assistant. #### Task = "Help me find parts for a custom PC." https://github.com/user-attachments/assets/ac34f75c-057a-43ef-ad06-5b2c9d42bf06 [Example code ↗](https://github.com/browser-use/browser-use/blob/main/examples/use-cases/pcpartpicker.py) ### 💡See [more examples here ↗](https://docs.browser-use.com/examples) and give us a star! <br/> ## Integrations, hosting, custom tools, MCP, and more on our [Docs ↗](https://docs.browser-use.com) <br/> # FAQ <details> <summary><b>What's the best model to use?</b></summary> We optimized **ChatBrowserUse()** specifically for browser automation tasks. On avg it completes tasks 3-5x faster than other models with SOTA accuracy. **Pricing (per 1M tokens):** - Input tokens: $0.20 - Cached input tokens: $0.02 - Output tokens: $2.00 For other LLM providers, see our [supported models documentation](https://docs.browser-use.com/supported-models). </details> <details> <summary><b>Can I use custom tools with the agent?</b></summary> Yes! You can add custom tools to extend the agent's capabilities: ```python from browser_use import Tools tools = Tools() @tools.action(description='Description of what this tool does.') def custom_tool(param: str) -> str: return f"Result: {param}" agent = Agent( task="Your task", llm=llm, browser=browser, tools=tools, ) ``` </details> <details> <summary><b>Can I use this for free?</b></summary> Yes! Browser-Use is open source and free to use. You only need to choose an LLM provider (like OpenAI, Google, ChatBrowserUse, or run local models with Ollama). </details> <details> <summary><b>How do I handle authentication?</b></summary> Check out our authentication examples: - [Using real browser profiles](https://github.com/browser-use/browser-use/blob/main/examples/browser/real_browser.py) - Reuse your existing Chrome profile with saved logins - If you want to use temporary accounts with inbox, choose AgentMail - To sync your auth profile with the remote browser, run `curl -fsSL https://browser-use.com/profile.sh | BROWSER_USE_API_KEY=XXXX sh` (replace XXXX with your API key) These examples show how to maintain sessions and handle authentication seamlessly. </details> <details> <summary><b>How do I solve CAPTCHAs?</b></summary> For CAPTCHA handling, you need better browser fingerprinting and proxies. Use [Browser Use Cloud](https://cloud.browser-use.com) which provides stealth browsers designed to avoid detection and CAPTCHA challenges. </details> <details> <summary><b>How do I go into production?</b></summary> Chrome can consume a lot of memory, and running many agents in parallel can be tricky to manage. For production use cases, use our [Browser Use Cloud API](https://cloud.browser-use.com) which handles: - Scalable browser infrastructure - Memory management - Proxy rotation - Stealth browser fingerprinting - High-performance parallel execution </details> <br/> <div align="center"> **Tell your computer what to do, and it gets it done.** <img src="https://github.com/user-attachments/assets/06fa3078-8461-4560-b434-445510c1766f" width="400"/> [![Twitter Follow](https://img.shields.io/twitter/follow/Magnus?style=social)](https://x.com/intent/user?screen_name=mamagnus00) &emsp;&emsp;&emsp; [![Twitter Follow](https://img.shields.io/twitter/follow/Gregor?style=social)](https://x.com/intent/user?screen_name=gregpr07) </div> <div align="center"> Made with ❤️ in Zurich and San Francisco </div> ", Assign "at most 3 tags" to the expected json: {"id":"12931","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"