Cloud browsers for automation & AI agents
Cloud browsers that
don't get blocked.
Real Chrome on real machines — Apple Silicon or Linux — driven by the Playwright and Puppeteer you already use. You get a CDP URL. We run the fleet. You pay for the minutes a browser is actually working.
Built by a team that operates browser fleets in production for clients today.
- brands
- "Google Chrome", "Chromium", "Not)A;Brand"
- platform
- MacIntel
- renderer
- ANGLE Metal Renderer: Apple M2
- headless
- false
- webdriver
- false
- plugins
- 5
Pick your door
Real browsers on real hardware for the sites that read the GPU and the platform. Bring your own proxies.
AI-agent builders A browser your agent can drivePersistent logins between steps, a live view when it goes wrong, and billing that fits bursty agent workloads.
Enterprise Portals, SLAs and invoicesCredentialed sessions against insurer, healthcare and government portals, with the controls procurement asks for.
Why it doesn't get blocked
The page isn't reading your headers. It's reading the machine.
Modern bot detection fingerprints the hardware — the GPU renderer, the platform, whether a window exists at all. Most cloud browsers are a headless Linux container, and no amount of user-agent spoofing changes what WebGL reports. So we changed the machine instead.
- brands
- "Chromium", "Not)A;Brand"
- platform
- Linux x86_64
- renderer
- Google SwiftShader (software)
- headless
- true
- webdriver
- true
- plugins
- 0
- brands
- "Google Chrome", "Chromium", "Not)A;Brand"
- platform
- MacIntel
- renderer
- ANGLE Metal Renderer: Apple M2
- headless
- false
- webdriver
- false
- plugins
- 5
Left: the values a typical headless Linux container reports; varies by vendor. Right: a real BrowserFleet session on Apple Silicon, captured from the browser itself.
What you get
Four promises.
It doesn't get blocked
Real Google Chrome, always headful, on a real display. On the Apple Silicon class the GPU string is a Metal renderer because a Metal GPU is genuinely drawing the page.
You don't run it
No browsers to patch, no fleet to scale, no proxy plumbing. Create a session, get a CDP URL, connect the client you already have. Leave any time — your code doesn't change.
It costs what it uses
Billed per active minute, only while a client is connected. A session waiting on a slow model call, or idle over the weekend, costs nothing.
You can watch it and take over
A live view of any session, and a control channel that injects real OS-level input with human motion — so you can solve one step by hand and give the session back.
Persistent profiles
Logins that survive.
A profile is the customer's logged-in state — cookies, storage, sessions — kept in our encrypted store between runs. Log in once; every later session on that profile starts already inside.
Saved automatically when a session ends. A single-writer lock stops two sessions corrupting one profile. A profile is bound to the machine class it was made for, so its device identity never contradicts itself. Export it any time — it's yours.
Profiles in the docs// 1. create a profile once — it's the customer's logged-in state
const profile = await bf.createProfile("shop-eu");
// 2. run a session on it, log in, do work…
const s1 = await bf.createSession({
image: "chrome-stable", machineClass: "mac-shared",
profile: { mode: "managed", id: profile.id },
});
// …end it. The state is saved automatically because the session ran on the profile.
await bf.endSession(s1.id);
// 3. next week: a new session on the same profile is already logged in
const s2 = await bf.createSession({
image: "chrome-stable", machineClass: "mac-shared",
profile: { mode: "managed", id: profile.id },
});The platform
A dashboard, not just an endpoint.
Every session, every profile, every key and every minute — visible in one place, with a live view a click away. The API and the dashboard are the same product; use whichever the moment calls for.
Quickstart
It's just CDP.
No proprietary driver and no rewrite. Playwright, Puppeteer, Python, or the raw protocol — the only BrowserFleet-specific line is creating the session.
Full quickstart// npm i @browserfleet/sdk playwright
import { BrowserFleet } from "@browserfleet/sdk";
import { chromium } from "playwright";
const bf = new BrowserFleet({ apiKey: process.env.BROWSERFLEET_API_KEY });
const session = await bf.createSession({
image: "chrome-stable",
machineClass: "mac-shared", // or browser-standard
});
const browser = await chromium.connectOverCDP(BrowserFleet.cdpUrl(session));
const page = await browser.newPage();
await page.goto("https://example.com");
await bf.endSession(session.id); // billing stops hereThe fleet
Every class runs real Chrome, headful. Per active minute, no seats, no monthly minimum. Plans and limits →
Where this goes
Every surface a real user has.
A fingerprint is not a string you set — it's a machine, and eventually it's a device someone holds. Today the fleet is Macs and Linux boxes. The same API is built to hand you a phone: a real one, in a rack, with a SIM and a touchscreen — not an emulator wearing a costume.
Real Chrome on Apple Silicon and Linux, headful, over CDP.
A browser that is genuinely a phone — touch events, device pixel ratio, mobile GPU.
A full Android instance over ADB, not just a browser. Install an app and drive it.
Physical iPhones and Androids, one tenant per device, wiped between sessions.
The engine is oursin build
We're building our own Chromium fork rather than renting someone else's patches. Owning the engine is the only way to fix a tell at the source instead of papering over it in JavaScript — and the only version of this business with a moat.
Honest about today
Only the first stop is running. Everything after it is where the money and the engineering are going, not something you can call this afternoon. When a stop lights up, it lights up here first.
Point your existing code at a real machine.
Sign up, take the $2 of trial credit and run a session. It's five hours on Apple Silicon — enough to check the fingerprint against whatever has been blocking you.
Built by a team that operates browser fleets in production for clients today.