Blog

Why we built browser.city

Browser infrastructure is full of pricing traps and privacy ambiguity. We built browser.city around stealth-by-default, zero logs, and APIs that stay simple at scale.

Browser infrastructure is weirdly broken for something that should feel like compute.

In 2025–2026 the market exploded: BaaS providers, scraping APIs, AI browser agents, anti-detect tools, proxy hybrids. But most teams run into the same three problems within the first week:

  1. Billing you can’t reason about. Credits, units, multipliers, stealth upgrades, proxy add-ons. You only learn the real cost after your first retry storm.
  2. Stealth that’s not a default. “Stealth” exists, but it’s often gated, inconsistent, or requires a matrix of options and plan tiers.
  3. Privacy that’s mostly policy. If your sessions touch sensitive surfaces, “we don’t log” is not enough. Architecture is the guarantee.

What we optimized for

We built browser.city around a few constraints:

  • Stealth by default. If you have to remember to turn it on, it will be off in production.
  • Zero-logs by design. No session recording pipeline. No content-at-rest capture. Minimal metadata required to operate the service.
  • APIs that don’t make you pick a product. You can start with the Request API, graduate to Playwright sessions, and then add MCP tools for agents without switching stacks.

Four entry points, one mental model

1) Request API (fast extraction)

request.ts
const apiKey = process.env.BROWSERCITY_API_KEY!;const opts = { method: "POST", headers: { Authorization: `Bearer ${apiKey}` } };const res = await fetch("https://api.browser.city/v1/requests", {  ...opts,  body: JSON.stringify({    url: "https://example.com",    markdown: true,  }),}).then((r) => r.json());console.log(res.content);

2) Sessions API (full browser automation)

Create a session and connect with Playwright using the returned token header.

3) Humanized REST tools (/v1/do/*)

For step-by-step actions over a remote session (open, navigate, click, type, markdown) without running Playwright.

4) MCP server (agent-native browser tools)

Add browser.city to Codex, Claude Code, Cursor, or any MCP client and let your agent use browser tools as needed.

What’s next

This blog will focus on practical content:

  • competitor comparisons that are honest and technical
  • integration guides for the tools people actually use
  • stealth research, benchmarks, and “how we built it” deep dives
[ 06 / 06 ] — Get Started

Start building in under a minute

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