Migrating from Browserless

Running headless Chrome through Browserless today? Moving to BrowserCat is a connection-string change. Both services connect over the same open standards, the Chrome DevTools Protocol, plus Playwright and Puppeteer on top of it, so your automation code doesn’t change.

This guide is factual, not a teardown: Browserless is a capable browser service. The difference is that BrowserCat is a router, one endpoint that sends each session to the backend best suited for the job, instead of a single fleet you’re tied to.

What changes

You swap your Browserless WebSocket endpoint for BrowserCat’s, and your Browserless token for a BrowserCat API key. The endpoint is wss://api.browsercat.com/connect, authenticated with a single Api-Key header (or an apiKey query parameter for clients that connect by URL).

Before and after

import * as pw from 'playwright-core';

const browser = await pw.chromium.connect(
  'wss://api.browsercat.com/connect',
  {headers: {'Api-Key': '<YOUR_API_KEY>'}},
);

const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();
import * as puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint:
    'wss://api.browsercat.com/connect?apiKey=<YOUR_API_KEY>',
});

const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();
import CDP from 'chrome-remote-interface';

const client = await CDP({
  target:
    'wss://api.browsercat.com/connect?apiKey=<YOUR_API_KEY>',
});

const {Page} = client;
await Page.enable();
await Page.navigate({url: 'https://example.com'});

That’s the migration. Everything after the connect, navigation, evaluation, screenshots, PDFs, request interception, is unchanged, because it’s the same CDP / Playwright / Puppeteer surface you already target.

For the full set of connection options, see Connect with Playwright, Connect with Puppeteer, or the CDP clients guide.

What you gain

  • Multi-backend routing. Each session is routed to a backend that fits the job, rather than every session running on one fleet. See how it works.
  • Zero vendor lock-in. Built on open standards, with no proprietary SDK to adopt. Leaving later is the same one-line change in reverse.
  • Bring your own proxy. Attach your own third-party proxy to a session when a job needs specific egress or geolocation.
  • A roadmap that improves the same endpoint. As we add backends, your existing /connect integration gets more capable without code changes, see the roadmap.

Steps to switch

  1. Sign up for a free BrowserCat account.
  2. Create an API key.
  3. Replace your Browserless WebSocket endpoint with wss://api.browsercat.com/connect and pass your BrowserCat key via the Api-Key header (Playwright) or the apiKey query parameter (Puppeteer / raw CDP).
  4. Run your existing script. It should work unchanged.

Notes on parity

  • Sessions run on Chromium in “new” headless mode; see browser configuration to map launch options.
  • If your Browserless setup relied on its REST functions (such as /screenshot, /pdf, or /function endpoints), reproduce them with the equivalent Playwright/Puppeteer calls inside a connected session, the same primitives are available through the standard API.

Questions about your migration? Contact us, we’re happy to help you move.

machine-readable view · raw Markdown from