Comparison

browser.city vs Browser Use: framework vs infrastructure

Browser Use is an agent framework for browser control. browser.city is stealth browser infrastructure — sessions, requests, MCP. How they fit together.

Quick verdict: This isn’t a pure head-to-head. Browser Use is primarily an agent framework (plus hosted execution). browser.city is browser infrastructure. Many teams use both: Browser Use for the agent loop, browser.city for the stealth browser backend.

Different layers of the stack

Think of the stack as three layers:

  1. Agent loop (planning, tool selection, retries, memory)
  2. Browser tools (navigate, click, fill, screenshot, extract)
  3. Browser runtime + stealth + egress (fingerprints, proxies, anti-bot)

Browser Use focuses on (1) and part of (2).

browser.city focuses on (2) and (3):

  • MCP server exposes browser tools to any client
  • Sessions API provides Playwright-compatible browsers
  • Request API provides extraction without orchestration

At a glance

Dimensionbrowser.cityBrowser Use
Primary productBrowser infrastructureAgent framework + hosted agent execution
Control styleDeterministic APIs (Playwright/REST/MCP tools)Agentic abstraction + steps
StealthDefaultVaries by tier / setup
Best forTeams building agents and scrapers that need reliable infraTeams that want agent loop primitives and an OSS ecosystem

How to combine them (common pattern)

  • Use Browser Use to decide what to do next.
  • Use browser.city to provide the actual browser and extraction primitives.

If your agent framework can talk to Playwright, you can create a browser.city session and connect using the returned endpoint/token header.

session.ts
import { chromium } from 'playwright';const { endpoint, token, id } = await fetch('https://api.browser.city/v1/sessions', {  method: 'POST',  headers: { Authorization: `Bearer ${process.env.BROWSERCITY_API_KEY}`, 'Content-Type': 'application/json' },  body: JSON.stringify({ browser: 'chromium' }),}).then((r) => r.json());try {  const browser = await chromium.connect(endpoint, {    headers: { Authorization: `Bearer ${token}` },  });  const page = browser.contexts().at(0)!.pages().at(0)!;  await page.goto('https://example.com');  console.log(await page.title());} finally {  await fetch(`https://api.browser.city/v1/sessions/${id}`, {    method: 'DELETE',    headers: { Authorization: `Bearer ${process.env.BROWSERCITY_API_KEY}` },  });}

When to pick which

Choose Browser Use if:

  • you want an OSS-first agent framework and community-driven patterns
  • you want higher-level agent abstractions (steps, skills, workflows)

Choose browser.city if:

  • you want infrastructure primitives you can plug into any agent/tooling stack
  • you need stealth-by-default and strong egress/fingerprint control
  • you want Request API for cheap “URL → markdown” flows
[ 08 / 08 ] — Get Started

Give your AI agents the web.

We're in private beta — request access and we'll get you set up. Private sessions by default.