Wayfern vs Browserbase

Two cloud browsers you drive over CDP — one wraps more platform around the session, the other charges for the bytes that leave it.

The answer in three paragraphs

Both products give you a real browser in the cloud that you drive over the Chrome DevTools Protocol, so this is not a session-versus-API comparison — it is a comparison of what surrounds the session. Browserbase is the wider platform. It documents quickstarts for Playwright, Puppeteer and Selenium, publishes first-party Node.js and Python SDKs, offers contexts that carry cookies and localStorage from one session into the next, runs browsers in four regions, and lists Search & Fetch, Agent Identity, Functions, a Model Gateway and Stagehand alongside the browsers themselves.

Wayfern is the narrower one, and the narrowness is the point: a CDP endpoint at wss://browser.wayfern.com/ws, a residential exit you steer per connection or per call, and one credit balance that every product on the account debits. Open-page time bills at 8 credits per hour with a 60-second minimum per page; datacenter egress is free; residential bytes are sampled off the container's own counters every five seconds and debited at 320 credits per GB as they are consumed, with the session terminated once the balance can no longer cover them.

Three things should push you to Browserbase regardless of price: Wayfern publishes no first-party SDK (the REST endpoints are plain JSON and the session is raw CDP), its browser gateway has no context or profile API that persists state between runs, and its container backend is wired to a single configured region at a time. If any of those is load-bearing for you, the rest of this page will not change the answer.

Read this before the feature table

A comparison page that takes four screens to admit where the competitor wins is a sales deck. Here is the fork, first.

Choose Browserbase if your automation is already written against Selenium, or in a language where you want a supported SDK — the Selenium guide covers both Node.js and Python, injecting authentication through a custom RemoteConnection (x-bb-api-key) or a custom HTTP agent (x-bb-signing-key), and Node.js and Python SDKs are published. Choose it if your run has to resume an authenticated state: contexts persist the Chromium user data directory — cookies, localStorage, IndexedDB, session storage, service workers, form autofill and browser preferences — across sessions, with only the HTTP cache excluded. Choose it if the browser has to run in a particular region, since sessions can be pinned to us-west-2, us-east-1, eu-central-1 or ap-southeast-1. Choose it if you want captchas handled without writing that code: solveCaptchas defaults to true, with captchaImageSelector and captchaInputSelector for bespoke widgets. And choose it if you want to evaluate without a sales call — the free tier is $0 and the Developer tier is $20/month, both self-serve.

Choose Wayfern if the bill is dominated by residential bandwidth and you would rather meter it than buy it in plan bundles, or if you want the exit chosen per navigation instead of per session — country, region, city, ISP and a sticky session id all ride on the connect URL, and the Web Data endpoints default to trying a free datacenter exit first. Choose it if you want one balance for everything: the same credits pay for open-page hours, the nine Web Data endpoints, search, captcha solves and MCP tool calls, so a scraper that mixes a held session with a bulk crawl has one number to forecast instead of four meters. And choose it if you want the anti-detect browser itself — the container runs the Wayfern binary with a fingerprint applied over CDP, not a stock Chromium with a proxy bolted on.

One balance, or four meters

How each product counts, rather than what it costs — the counting model is what survives a price change.

Wayfern runs a single fungible credit. Plans grant credits monthly — Developer at $19/mo (1,520 credits, 20 concurrent pages), Business at $99/mo (9,000 credits, 100 concurrent pages), Scale at $499/mo (46,000 credits, 400 concurrent pages) — and every billable action debits the same balance: 8 credits per open-page hour (floored at 60 seconds per page), 320 credits per GB of residential egress, 1 credit per scraped page, 1 credit per captcha solve. Datacenter egress costs nothing. Non-expiring top-up packs sit behind the grant (1,000 for $12.50, 5,000 for $55, 20,000 for $200) and are spent only after the monthly grant is gone, so an unusual week does not need a plan change.

Browserbase counts several things separately. Its published pricing puts browser hours, Search calls, Fetch calls and proxy gigabytes on their own meters, each with a plan-included allowance and its own overage rate: Developer at $20/month includes 100 browser hours then $0.12/browser hour, 1,000 Search calls then $7 per 1,000, 1,000 Fetch calls then $1 per 1,000, and 1GB of proxies then $12/GB. Startup at $99/month moves those to 500 browser hours at $0.10, 10,000 Fetch calls and 5GB of proxies at $10/GB. There is a real advantage in that: a workload that is all browser-hours and no bandwidth pays a browser-hour price, and the free tier means the first evaluation costs nothing.

The practical difference shows up on bandwidth-heavy work. Wayfern debits residential bytes continuously from the same balance the browser time comes out of, so the two trade against each other inside one budget; Browserbase draws bandwidth from a separate per-GB allowance that overflows at its own rate. Neither is cheaper in the abstract — it depends entirely on whether your bytes or your hours dominate, and both publish the numbers you need to work that out.

The exit path, and who decides it

Wayfern picks the exit per attempt: a Web Data call leaves through the free datacenter exit and is retried through a metered residential exit only when the first attempt is classified as blocked.

requestdatacenter exitfree egressresidential exitmetered per bytetargetescalates to residential only when a navigation is classified as blocked
Wayfern picks the exit per attempt: a Web Data call leaves through the free datacenter exit and is retried through a metered residential exit only when the first attempt is classified as blocked.

On Wayfern the routing decision is made late. Every Web Data endpoint takes proxy: auto | datacenter | residential plus an optional ISO-3166 exit country, and auto is the default — the page runs on the datacenter exit, and only a failure carrying the blocked sentinel earns one retry through a residential exit. Any other failure is surfaced immediately rather than paid for twice. Held CDP sessions express the same targeting in the connect URL: country, region, city, isp and a sticky session id, each validated against the upstream catalog before a browser is spawned, and a session that asks for a geo the deployment cannot provide is refused at connect rather than quietly given a different exit.

The meter is bolted to the container, not to the request. A sidecar inside the browser container exposes raw rx/tx byte counters; the manager polls them every five seconds, debits the delta, advances its baseline only once that debit is durable, and terminates the session after three consecutive billing failures. A residential session whose byte counters cannot be reached is refused outright, because an unmeterable session would stream bandwidth nobody can be charged for. That is why the residential rate is per-GB-as-consumed rather than a bundle: there is a live counter behind it.

Browserbase makes the decision earlier and, in one respect, more expressively. Proxies are configured on the Create Session call — its own managed residential pool (proxies defaults to false), your own HTTP/HTTPS proxies, or a list of proxies with domain-pattern rules, where "Proxies are applied in the order they are listed, meaning the first matching rule is used for each request." Geolocation takes a required country plus optional state and city over built-in proxies the docs say cover 201 countries, and custom proxies performing TLS interception can reference an uploaded PEM CA certificate. Per-domain routing has no equivalent on Wayfern, and that is a genuine gap on our side. The trade-off runs the other way too: left as proxies: true, the docs note it "makes a best-effort attempt to use a US-based proxy" and may route through a nearby country such as Canada, and the built-in pool is sourced from third-party providers that restrict banking, government, streaming, ticketing, webmail and gambling domains, with restrictions that vary by session and change over time.

Feature by feature, against the docs

The Wayfern column is what the code in this repository does. The Browserbase column is what its own published documentation states, checked before this page shipped.

CapabilityWayfernThem
Client protocolCDP over WebSocket at wss://browser.wayfern.com/ws?token=…; chromium.connectOverCDP() or puppeteer.connect() drive it directly. No WebDriver endpoint.Playwright, Puppeteer or Selenium, with a published quickstart for each plus one for Stagehand.
First-party SDKsNone published. The REST surface is ordinary JSON over HTTP and the session is raw CDP, so any language works — but there is no supported client to import.Two official SDKs: Node.js and Python. No Go, Java, Ruby, C# or PHP SDK is listed.
Browser engineThe Wayfern anti-detect browser only — a Chromium-family binary, linux-x64, with the fingerprint applied per page over CDP. No Firefox, no WebKit.The Create Session API exposes no browser-engine, browser-type or browser-name parameter — the documented session settings offer no engine choice.
State that survives a runNo context or profile API on the gateway: cookies and storage last exactly as long as you hold the socket. Nothing to name, store and re-attach later.Contexts persist cookies, localStorage, IndexedDB, session storage, service workers, form autofill and preferences across sessions — everything except the HTTP cache.
Exit geo targetingcountry, region, city, isp and a sticky session id, set per connection on the /ws URL or per call as proxy + country on any Web Data endpoint.Required country plus optional state and city, over built-in proxies stated to cover 201 countries; per-domain routing rules applied in listed order.
Residential billing modelMetered per byte from the container sidecar every 5s and debited at 320 credits/GB from the same balance as everything else; the session is cut when it can no longer pay.A per-plan GB allowance then per-GB overage: 1GB then $12/GB on Developer, 5GB then $10/GB on Startup.
Captcha handlingAn explicit POST /api/captcha/solve (anti-captcha, 1 credit, charged only on success). The search runner solves interstitials in-session; a session you drive yourself does not.On by default in the browser — solveCaptchas "Defaults to `true`" — with captchaImageSelector and captchaInputSelector for custom widgets.
Strongest anti-detection tierOne tier for everyone: the anti-detect browser and its fingerprinting are the product, not a plan upgrade.Verified sessions run a purpose-built Chromium with real (not randomly generated) fingerprints, but are offered on the Scale plan, which is custom-priced.
RegionsOne configured region per deployment — the container backend takes a single region setting (default fr-par).Four: us-west-2, us-east-1, eu-central-1 and ap-southeast-1, chosen per session; all sessions default to us-west-2.
Over-limit behaviourThe gateway refuses the connection with WebSocket close code 4003 once a link hits its concurrency cap. Plan caps: 20 / 100 / 400 open pages.Requests over the plan limit return HTTP 429 and are not queued — the docs state "the request was effectively dropped." Limits run 3 to 250+ concurrent by plan.
Session recording and replayNot offered. The gateway proxies CDP frames and counts open pages for billing; there is no recorder and no replay surface.recordSession and logSession are session settings on the Create Session API.
Self-hostingNot published. The control plane, the pool and the container image live in one repo, but there is no supported on-premise install.No self-hosted or on-premise deployment is documented; the managed-vs-self-hosted page uses "self-hosted" to mean running your own Chromium.

Repointing a Playwright script

If your code already talks CDP, the move is a URL change: create no session, mint a link token, and put the exit selectors in the query string. Everything after connectOverCDP() is unchanged, because both ends are the same protocol.

What does not port: a Selenium script has nowhere to land, since Wayfern exposes no WebDriver endpoint. Neither does a context id — there is no Wayfern equivalent to re-attach, so a flow that resumed a logged-in Browserbase context has to log in inside the run. And captcha handling stops being automatic: solveCaptchas has no counterpart on a driven session, so a challenge becomes an explicit call to POST /api/captcha/solve with the sitekey you scraped off the page.

playwright — before / after
import { chromium } from 'playwright';

// Before: create a session through the Browserbase SDK, then drive the
// CDP endpoint it hands back. Proxy, region, stealth and captcha options
// were all decided in that create call.

// After: Wayfern. There is no create call — the link token IS the
// session, and the exit is selected on the connect URL itself.
const endpoint = new URL('wss://browser.wayfern.com/ws');
endpoint.searchParams.set('token', process.env.WAYFERN_LINK_TOKEN!);
endpoint.searchParams.set('country', 'DE');    // residential exit; omit for datacenter
endpoint.searchParams.set('city', 'Berlin');   // region / city / isp all optional
endpoint.searchParams.set('session', 'run-42'); // sticky exit for the whole run

const browser = await chromium.connectOverCDP(endpoint.toString());
const page = await browser.newPage();
await page.goto('https://example.com');

// Closing is what stops the clock: open-page time bills at
// 8 credits/hour with a 60s minimum per page, and the
// residential meter samples the container every 5 seconds until then.
await browser.close();

Questions that actually decide this one

Can I point an existing Browserbase script at Wayfern unchanged?

If it uses Playwright or Puppeteer over CDP, effectively yes — swap the connect URL for wss://browser.wayfern.com/ws?token=… and drop the session-create call, since the token is the session. If it uses Selenium, no: Browserbase documents a Selenium path (Node.js and Python, authenticating through x-bb-api-key or x-bb-signing-key), and Wayfern exposes no WebDriver endpoint at all.

Does Wayfern solve captchas automatically inside a session I am driving?

No, and this is the clearest place Browserbase is ahead for hands-off use. Browserbase solves captchas in the browser by default — solveCaptchas defaults to true, with selectors for custom widgets. On Wayfern, solving is an explicit POST /api/captcha/solve backed by anti-captcha, costing 1 credit and charged only on a successful solve; Wayfern search requests solve interstitials in-session, but a session you drive yourself does not.

How does each one charge for residential bandwidth?

Wayfern meters it live: a sidecar in the browser container reports raw byte counters, the manager samples them every five seconds and debits 320 credits per GB from the same balance that pays for browser time, terminating the session if the balance runs out. Browserbase includes an allowance per plan and charges overage per gigabyte — 1GB then $12/GB on Developer, 5GB then $10/GB on Startup. If your bytes are unpredictable, a live meter is easier to reason about; if they are steady, a bundle usually is.

Can either be self-hosted or run on-premise?

Neither, on the published evidence. Browserbase documents no self-hosted or on-premise deployment — its managed-vs-self-hosted page uses "self-hosted" to describe running your own Chromium in your own VMs, not deploying Browserbase on your infrastructure. Wayfern is likewise a hosted control plane with no supported on-premise install. If running the platform inside your own perimeter is a hard requirement, both are out.

Which one is stronger against bot protection?

This page will not give you a number, because any head-to-head score printed here would be invented. What can be compared is the model: Browserbase gates its strongest tier — Verified sessions on a purpose-built Chromium with real rather than randomly generated fingerprints — to the Scale plan, which is custom-priced, so its best anti-detection is not reachable on a published self-serve tier. Wayfern ships one anti-detect browser to every plan, with the fingerprint applied per page over CDP. Test both against your actual targets; that is the only measurement that means anything.

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.