Browser automation

Your Playwright scripts.
Our browsers.

Scheduled jobs, monitors, form fills, checkout flows, QA against third-party sites. Keep the code you have; replace the browser under it with one that doesn't get blocked and that you never have to operate.

Get an API key — $2 free Quickstart

Built by a team that operates browser fleets in production for clients today.

// 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 here

One line changes

launch() becomes connectOverCDP(url). Selectors, waits, page logic — untouched. Leaving is the same one line back.

Real Chrome, not a build of it

Genuine Google Chrome with proprietary codecs and Widevine, headful on a real display. Video, DRM and WebGL behave the way they do on a laptop.

Forgotten jobs close themselves

Hard lifetime, idle timeout and keep-alive per session. A cron job that crashes at 2am is not a browser billing you until morning.

Watch it run

A live view for the flaky step.

Every automation has one step that fails once a week and nobody can reproduce. Create the session with vnc: true, open the live view, and watch the page do it. Then take the mouse and get past it.

// vnc: true → the session also exposes a live view and a control channel
const session = await bf.createSession({
  image: "chrome-stable", machineClass: "mac-shared", vnc: true,
});

BrowserFleet.vncUrl(session);        // drop into any noVNC viewer, or open it in the dashboard

const c = await bf.control(session); // real, humanised OS-level input — not synthetic events
await c.move(640, 400);
await c.click("button[type=submit]");
await c.type("hello");

Swap the browser, keep the code.

Change one line and run your existing suite against a real machine. Five hours of Apple Silicon on the free credit.

Get an API key Talk to us

Built by a team that operates browser fleets in production for clients today.