A real macOS browser,
rented by the minute.
Not a Linux container wearing a Mac user-agent. Real Google Chrome, running headful on real Apple Silicon, driven over plain CDP. Attach Playwright or Puppeteer and it behaves like the machine it actually is.
$0.40 / browser-hour on Apple Silicon · billed per active minute · no seat fees
- brands
- "Google Chrome", "Chromium", "Not)A;Brand"
- version
- 149.0.7827.102
- renderer
- ANGLE Metal Renderer: Apple M2
- headless
- false
- webdriver
- false
- plugins
- 5
- viewport
- 1280 × 800
The fleet
Every class runs real Chrome, headful. The Apple Silicon class adds the hardware fingerprint. Prices are per active minute, charged by the second.
Why hardware matters
Most cloud browsers are a Linux box in a costume.
Headless Chrome announces itself in the user-agent. Software rendering reports a
SwiftShader GPU that no real laptop has. A spoofed platform string still leaves a Linux
machine underneath, and the mismatch is trivial to read.
We didn't patch those tells — we removed the reasons for them. Every session runs headful Chrome on a real display, and the Apple Silicon class runs on actual Mac hardware, so the GPU string is a Metal renderer because a Metal GPU is genuinely drawing the page.
Real Chrome, not Chromium
Reports the genuine "Google Chrome" brand, with the proprietary codecs and Widevine
that a Chromium build silently lacks.
Headful, always
Never --headless. A real window on a real display, so there is no
HeadlessChrome tell to hide in the first place.
Hardware GPU
Apple M2 via Metal on the macOS class — a WebGL renderer string that cannot be produced from a datacenter Linux host.
Quickstart
It's just CDP.
No proprietary driver and no rewrite. You get a Chrome DevTools Protocol URL and connect the client you already use. If you ever leave, your code is unchanged — that is deliberate.
Works with Playwright, Puppeteer and any CDP client. Sessions expose
cdp, plus vnc and server-side control when you want to watch
one or drive it by hand.
// npm i @browserfleet/sdk
import { BrowserFleet } from "@browserfleet/sdk";
import { chromium } from "playwright";
const bf = new BrowserFleet({ apiKey: process.env.BROWSERFLEET_API_KEY });
// a real Chrome on Apple Silicon
const session = await bf.createSession({
image: "chrome-stable",
machineClass: "mac-shared",
});
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 stopsWhere 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 stealth 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 Mac.
Sign up, take the $2 of trial credit and run a session — five hours on Apple Silicon, enough to check the fingerprint against whatever has been blocking you.