Comparison

browser.city vs Browser Use: agent framework vs browser infrastructure

Browser Use is an agent framework (and cloud) for browser control. browser.city is stealth browser infrastructure (sessions, requests, MCP). Here’s 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 apiKey = process.env.BROWSERCITY_API_KEY!;const opts = { method: "POST", headers: { Authorization: `Bearer ${apiKey}` } };const session = await fetch("https://api.browser.city/v1/sessions", {  ...opts,  body: JSON.stringify({ browser: "chromium" }),}).then((r) => r.json());const browser = await chromium.connect(session.endpoint, {  headers: { Authorization: `Bearer ${session.token}` },});

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
[ 06 / 06 ] — Get Started

Start building in under a minute

Free tier. No credit card. Full stealth from day one.