Browserbase alternatives, without the strawman

Browserbase is a broad agent platform and a good one. This page says where it still wins, then where a held CDP session and a single credit balance change what you build.

Where Browserbase is still the right answer

Read this half first. If any of it describes your team, the rest of the page is not an argument for switching — it is context for a decision you have already made correctly.

Stay on Browserbase if your automation is not Chrome DevTools Protocol code. Their docs publish a quickstart for Playwright, Puppeteer and Selenium, and the Selenium guide covers both Node.js and Python — Wayfern has no WebDriver endpoint at all, so Selenium suites have to be rewritten rather than repointed. Stay if you want a first-party SDK: Browserbase ships Node.js and Python SDKs; Wayfern ships none and expects you to bring your own CDP client. Stay if replay is how you debug — `recordSession` and `logSession` are flags on session creation there, and Wayfern has no equivalent. Stay if per-session placement matters: Browserbase creates sessions in us-west-2, us-east-1, eu-central-1 or ap-southeast-1. Stay if you need a logged-in Chromium profile to survive between runs, which their Contexts API is built for. And stay if a $0 tier is genuinely how your team evaluates infrastructure, because Browserbase publishes one and Wayfern does not.

Look at Wayfern when the friction is metering and exit control rather than breadth. There is no create-session call: you open a CDP WebSocket and the session exists for as long as you hold it, with the residential exit chosen on that same URL down to country, region, city, ISP and a sticky session id. One credit balance pays for open-page time, residential bytes, captcha solves, live search and every Web Data endpoint, so a scrape pipeline does not straddle a separate quota per resource. Billing is per open page — 8 credits an hour with a 60-second floor — and residential bandwidth is metered from real container byte counters rather than estimated, while datacenter egress costs nothing. And the anti-detect browser build is the same on Developer as on Scale; the plan table gates credits, concurrency and seats, not stealth.

Session control, exits and identity, line by line

Browserbase cells are quoted from their public documentation. Anything their docs do not state is marked rather than guessed.

CapabilityWayfernThem
Starting a sessionOpen a CDP WebSocket at wss://browser.wayfern.com/ws?token=… — the session is the connection, and there is no REST call that creates one.POST to the Create Session API with projectId, browserSettings, timeout, keepAlive, proxies, proxySettings, region and userMetadata.
Automation clientsAny CDP client. The documented paths are Playwright’s connectOverCDP and Puppeteer’s browserWSEndpoint. No WebDriver endpoint, so Selenium does not connect.Playwright, Puppeteer and Selenium, each with its own quickstart; Selenium is documented for Node.js and Python via injected auth headers.
First-party SDKsNone. You bring the browser client you already use, and call the Web Data endpoints over plain HTTPS with a wf_ token.Two official SDKs: Node.js and Python.
Choosing the residential exitcountry, plus optional region, city, isp and a sticky session id, set as query params on the connection URL. The catalog is browsable at GET /api/proxy/locations.A required country plus optional state and city, over a stated 201 countries. Proxies default to off, and proxies: true is a best-effort US exit that may route via a nearby country.
How bandwidth is countedA per-container sidecar meters real rx+tx bytes every 5 seconds and debits 320 credits per GB as they are spent; datacenter egress is free.Proxy bandwidth is a plan allowance — 1 GB on Developer, 5 GB on Startup — and is billed per GB beyond it.
Strongest anti-detection tierOne anti-detect browser build for every session on every plan. The plan table gates credits, concurrency and seats only.Verified sessions run a purpose-built Chromium with real browser fingerprints; the docs state Verified is offered on the Scale plan, which is custom-priced.
CAPTCHA solvingAn explicit solve endpoint at POST /api/captcha, billed 1 credit and debited only after a successful solve.In-browser solving on by default (solveCaptchas defaults to true), with captchaImageSelector and captchaInputSelector for custom widgets.
Recording and replayNot offered.recordSession and logSession are browserSettings flags set at session creation.
Region placementOne operator-configured region for the whole deployment. There is no per-session region parameter.us-west-2, us-east-1, eu-central-1 or ap-southeast-1 via the region parameter, defaulting to us-west-2.
Reusing a logged-in profileNo profile API on the gateway: nothing is saved between connections and there is nothing to attach. Durable per-user profiles exist, but behind a service-account API rather than the CDP gateway.Contexts persist cookies, localStorage, IndexedDB, session storage, service workers, form autofill and preferences across sessions — but deliberately not the HTTP cache.
Hitting the concurrency ceilingThe open-page cap is enforced inside the live connection: an over-cap page request comes back as a CDP error and the connection stays up. Caps are 20, 100 and 400 open pages.Concurrency and session-creations-per-minute are capped per plan — 3/5 on Free, 25/25 on Developer, 100/50 on Startup, 250+/150+ on Scale — and overflow returns HTTP 429 rather than queueing.
What one balance coversOpen-page time, residential bytes, captcha solves, live search and every Web Data endpoint draw on the same credits.Browser hours and proxy GB are separate plan allowances with separate overage rates (100 hours and 1 GB on Developer, 500 and 5 on Startup); model tokens are billed pay-as-you-go on top.
Self-hostingNot published as a product. The service is operated by Wayfern; there is no self-serve on-premise install.No self-hosted or on-premise deployment option is documented. (not published)

One balance, or a meter per resource

A single scrape run touches search, a browser, an extraction and a store. The real question is how many separate quotas that trips before it finishes.

searchscrapeextractstoreONE CREDIT BALANCEevery stage bills from the same balance
A single scrape run touches search, a browser, an extraction and a store. The real question is how many separate quotas that trips before it finishes.

Browserbase’s published plans meter resources independently: browser hours carry a per-plan included quantity and their own overage rate, proxy GB carry a separate allowance and a separate per-GB rate, and model tokens are billed pay-as-you-go on top of both. That is a reasonable design for a platform assembling several products — Browserbase describes itself as a complete agent platform spanning Browsers, Search & Fetch, Agent Identity, Functions, Model Gateway and Stagehand — and it makes each product’s cost legible on its own. It also means a pipeline that leans hard on one resource can exhaust that allowance while the others sit unused, and that forecasting a job means forecasting each line separately.

Wayfern has one fungible credit and every stage debits it. An open page costs 8 credits an hour with a 60-second minimum per page. A scraped, extracted or crawled page costs 1 credit; a live search costs 2 credits per provider results page; a screenshot costs 5; a brand profile costs 10. Residential bytes are metered live at 320 credits per GB and datacenter egress is free. Re-running an extraction over pages already cached costs nothing, so iterating on a schema is free.

The practical consequence is where you spend your attention. With a meter per resource you tune each stage against its own ceiling. On one balance you tune the run as a whole and the only question is total spend — which also means a stage that suddenly gets expensive shows up as one number moving rather than one quota quietly emptying.

What each platform decides to charge for

Model, not price. Compare the shapes and then check both rate cards yourself.

Browserbase charges a monthly platform fee that carries an allowance of each metered resource, then bills overage per unit: browser hours and proxy GB each have their own included quantity and their own rate ($0.12/hr and $12/GB beyond the Developer allowance, $0.10/hr and $10/GB beyond Startup’s), model tokens are pay-as-you-go, and data retention is a plan attribute (7 days on the lower tiers, 30 on Startup). Two capability decisions sit inside that model rather than beside it: CAPTCHA solving and stealth are not included on the free tier, and the strongest anti-detection tier is offered on Scale, which is quoted by sales. So the anti-detection question and the procurement question arrive together.

Wayfern charges a monthly fee that grants credits — Developer $19/mo for 1,520 credits and 20 concurrent open pages; Business $99/mo for 9,000 credits and 100 concurrent open pages; Scale $499/mo for 46,000 credits and 400 concurrent open pages — and every billable action debits the same balance. Grant credits expire at the end of the period; separately bought credit packs do not and roll over. Nothing about detection resistance is gated by tier: the same browser build runs on every plan.

Two mechanics are worth knowing before you model a bill. Every page you open is billed for at least 60 seconds, so ten thousand two-second page opens cost the same as ten thousand one-minute ones — batch work into a held session rather than reconnecting per URL. And residential bandwidth is the item that moves fastest: 320 credits per GB, metered per byte from the container’s own counters, so an image-heavy target routed through a residential exit will dominate a session-hour bill. Route through the free datacenter exit until a target actually forces you off it.

The honest gap: Browserbase publishes a $0 tier and Wayfern does not. The cheapest way onto Wayfern is Developer at $19 a month. If your evaluation process needs to run real traffic before any card is entered, that is a genuine reason to start there.

Porting a session: from a create call to a connection

If your automation is already Playwright or Puppeteer, the port is the connect line and the session lifecycle around it. If it is Selenium, it is a rewrite — Wayfern speaks CDP only.

On Browserbase you create a session with the Create Session API — projectId, browserSettings, proxies, region, timeout, keepAlive — and then attach a client to it. Session options are decided at creation time, in the request body.

On Wayfern there is nothing to create. You open the CDP WebSocket, and the options that would have been a request body are query parameters on that URL: the link token, and the residential exit selectors. A country is what turns residential routing on; without it the session uses the free datacenter exit. The gateway has already opened a browser context for you, so take contexts()[0] rather than creating one.

Billing starts at the first page, not at connect, and each page carries a 60-second minimum — so a long-lived connection that opens pages sparingly is the cheap shape, and reconnecting per URL is the expensive one.

connect.js
import { chromium } from "playwright";

// Before (Browserbase): create a session via the Create Session API with
// projectId / browserSettings / proxies / region, then attach a client to it.
// After (Wayfern): the connection IS the session — no create call.

const ws = new URL("wss://browser.wayfern.com/ws");
ws.searchParams.set("token", process.env.WAYFERN_LINK_TOKEN);

// Residential exit selectors. `country` is required to route residentially at
// all; omit every one of these to stay on the free datacenter exit.
ws.searchParams.set("country", "US");        // ISO-3166, from /api/proxy/locations
ws.searchParams.set("region", "NY");         // optional
ws.searchParams.set("city", "new york");     // optional
ws.searchParams.set("isp", "verizon");       // optional
ws.searchParams.set("session", "run-42");    // optional: sticky exit for this run

const browser = await chromium.connectOverCDP(ws.toString());
const context = browser.contexts()[0];       // the gateway already opened it
const page = await context.newPage();        // billing starts here, 60s minimum

await page.goto("https://example.com");
console.log(await page.title());

await browser.close();                       // closes the session and the meter

Questions people ask before they switch

Can I keep my Playwright and Puppeteer code?

Yes. Wayfern is a CDP WebSocket, so chromium.connectOverCDP() and puppeteer.connect({ browserWSEndpoint }) both work and the change is the URL. Selenium is the exception: Browserbase publishes a Selenium quickstart for Node.js and Python, and Wayfern exposes no WebDriver endpoint, so a Selenium suite has to be rewritten against CDP rather than repointed.

Is there an equivalent of Browserbase Contexts?

Not on the CDP gateway. There is no call that saves a profile and no parameter that attaches one; a container is only ever reused for connections carrying the same link isolation key and the same upstream proxy, and that reuse is a pooling detail rather than a feature you can address. Browserbase Contexts persist cookies, localStorage, IndexedDB, session storage, service workers, form autofill and preferences between sessions (though not the HTTP cache, which is refetched each time). Wayfern does run durable per-user profiles, but through a separate service-account API rather than the self-serve browser gateway — so if reusing a logged-in profile across runs is central to your workload, Browserbase covers it with a first-party API today and Wayfern does not.

How different is the bill in practice?

Structurally, not just numerically. Browserbase’s plans meter browser hours and proxy GB separately, each with its own included quantity and its own overage rate, with model tokens pay-as-you-go on top. Wayfern debits one balance for everything: 8 credits per open-page hour with a 60-second floor per page, 320 credits per GB of residential egress metered per byte, free datacenter egress, 1 credit per scraped page and 2 per search results page. Model the run once, against one number.

Can I choose which region my browser runs in?

No, and this is a clear Browserbase advantage. Browserbase lets you set region per session across us-west-2, us-east-1, eu-central-1 and ap-southeast-1, defaulting to us-west-2. Wayfern runs one operator-configured region for the deployment, and the lever you get is the residential exit — country, region, city and ISP on the connection URL — which changes where the traffic appears to come from, not where the browser executes. If your constraint is browser placement (latency to an origin, or a data-residency requirement on the compute itself), that is a reason to stay.

What happens when I hit the concurrency limit?

Wayfern enforces the cap inside the live connection: a request to open a page beyond your plan’s limit is answered with a CDP error on that connection, which stays up, so your client sees a failed page rather than a dropped session. Browserbase documents per-plan concurrency and session-creation-per-minute limits — 3 and 5 on Free, 25 and 25 on Developer, 100 and 50 on Startup, 250+ and 150+ on Scale — with overflow returning HTTP 429 rather than being queued, so backpressure is the caller’s job on either platform. Wayfern’s published caps are 20 open pages on Developer, 100 on Business and 400 on Scale.

Do I get session recordings, replays or a live view?

No. Browserbase exposes recordSession and logSession as browserSettings on session creation; Wayfern has no equivalent, and debugging is whatever your own client captures. If watching a replay is how your team diagnoses a broken selector, treat that as a real cost of moving rather than a nice-to-have.

Try it on your own targets

Browser sessions, the Web Data API, search and captcha solving all draw on one credit balance. Start on any of them.