all posts

The 7 Best Hyperbrowser Alternatives in 2026

Ajay Kumar··8 min read

There is a specific moment where teams start shopping for a cloud browser. Someone wired Playwright into an agent, it worked on a laptop, then production started failing for reasons unrelated to the code: Chromium eating 900MB a tab, /dev/shm at 64MB crashing renderers, a login repeated cold every run, and eventually a block page. The instinct is to rent all of it, which is often right. Sometimes it means buying an anti-blocking product to fix a memory problem.

I'm Ajay, I build PandaStack, and PandaStack is one of the seven below. Hard numbers are only for my own platform; everyone else gets described by what they're built for, because pricing here changes monthly and a confidently wrong figure is worse than none. Check current docs.

What a cloud browser actually sells you

The category is narrow. A vendor runs Chromium somewhere and gives you a WebSocket URL speaking the Chrome DevTools Protocol. You point Playwright or Puppeteer at it and drive a browser you never installed. On top they sell some mix of four things: session lifecycle, proxies and geolocation, anti-bot work, and observability.

The connect call is the same everywhere and differentiates nobody:

import { chromium } from "playwright";
import { writeFile } from "node:fs/promises";

// Every vendor in this post hands you a variant of this URL. The token in the
// query string is usually the only thing that changes between them.
const wsEndpoint = process.env.BROWSER_WS_ENDPOINT!; // wss://.../?token=...

const browser = await chromium.connectOverCDP(wsEndpoint);

// connectOverCDP attaches to an EXISTING browser, so it usually already has a
// context. Calling newContext() blindly is how people end up with a fresh
// cookie jar and a mysteriously logged-out session.
const context = browser.contexts()[0] ?? (await browser.newContext());
const page = await context.newPage();

await page.goto("https://example.com/login", { waitUntil: "domcontentloaded" });
await page.fill("#email", process.env.LOGIN_EMAIL!);
await page.fill("#password", process.env.LOGIN_PASSWORD!);
await page.click("button[type=submit]");
await page.waitForURL("**/dashboard");

// The valuable artefact is not the screenshot. It is this.
await writeFile("session.json", JSON.stringify(await context.storageState()));

await browser.close();

Note the last two lines. Logging in is the expensive step: slow, rate-limited, sometimes needing a human. How a platform keeps that state changes your bill more than stealth.

Where Hyperbrowser sits

Hyperbrowser is one of the newer entrants: managed headless browser sessions with a CDP endpoint, plus agent-oriented APIs on top. That's a deliberately neutral description and I'm leaving it there — I don't track their tiers closely enough to summarise them honestly, and a stale comparison table is how these posts go wrong. Read their docs, then use the criteria below.

The criteria that actually decide this

Work out which of these is forcing your hand:

  • Scraping-under-blocking versus an agent driving your own app. Identical in code, completely different problems. Extracting data from sites that don't want you to is an arms race: residential IPs, fingerprints, captchas. An agent clicking through your own product needs none of it.
  • Session persistence. Ask what actually persists — cookies only, or the full profile including IndexedDB and service workers. That gap is where 'it worked in dev' incidents live.
  • Concurrency and cost per session-hour. Browser work is bursty and mostly waiting, and a parked session costs the same as a working one. Multiply peak concurrent sessions by average session length; that is your bill, not the headline rate.
  • Proxy and geo. Datacentre IPs, or residential in twelve countries? A hard gate that disqualifies most of this list if it's the latter.
  • Observability. When an agent misbehaves at 3am, can you see what it saw? Homegrown setups underinvest here.
  • Isolation. A browser rendering a page you didn't write executes untrusted code. Chromium's sandbox is good; the question is what's underneath — a shared kernel next to other tenants, or a hardware boundary.

The seven alternatives

1. Browserbase

The category-defining product and the default for a first browser-driven agent. Managed sessions over CDP, stealth and proxies handled, session recording and a live view. Pick it when you want the browser problem to stop being yours.

2. Browserless

The longest-running option, and the one with a real self-hosting story: a container you run in your own cloud account, or consume hosted. Pick it when 'inside our VPC' is a hard constraint and you still want a supported product.

3. Steel.dev

Open-source browser infrastructure aimed at AI agents, with a hosted offering alongside the code. The pitch is that agents need different primitives from test runners — session reuse, resumable state, structured extraction — and open source lets you read how sessions are managed.

4. Scrapybara

Broader than a browser: remote desktop instances for computer-use agents, where the browser is one application among several. If your agent needs a PDF viewer, a spreadsheet, or a desktop app with no web equivalent, a CDP-only vendor cannot help.

5. Bright Data's browser API

The heavyweight for scraping-under-blocking. Their business is the proxy network — residential and mobile IPs at a scale nobody else here operates — and the browser product is that network with a CDP endpoint attached. No infrastructure cleverness substitutes for IP diversity. Pick it when the adversary is the target site.

6. Playwright or Puppeteer on a VM you own

Dismissed too fast. Playwright ships a browser download command and a container image; running it on a VM or in CI is a couple of hours. For a nightly scrape of cooperative sites, renting browser infrastructure solves a problem you don't have. The costs arrive later: concurrency ceilings, zombie cleanup, upgrades, no session recording.

7. PandaStack

Mine, so here's the shape rather than a pitch. We ship a browser template: a Firecracker microVM running Ubuntu 24.04 with Node 24, Playwright and a real Chromium, plus the Python crawl4ai and trafilatura stack, in a 4 GiB guest. One hardware-isolated VM per session with its own kernel, and root inside it — your Playwright version, your apt packages, arbitrary ports. Creates restore at p50 179ms.

The different part is copy-on-write fork. Log in once, snapshot the whole machine — browser process, profile, disk, memory — then branch a fresh VM off it per job. Not a cookie jar replayed into a cold browser: the same machine, resumed.

from pandastack import Sandbox

# The browser template: Ubuntu 24.04, Node 24, Playwright with a real Chromium,
# plus the Python crawl4ai / trafilatura stack. 4 GiB guest, own kernel, root.
sbx = Sandbox.create(template="browser", ttl_seconds=900,
                     metadata={"job": "orders-export"})

SCRIPT = """
import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        # Launched locally, inside this VM. No CDP over the public internet,
        # no shared pool -- the browser and your code are on the same machine.
        browser = await p.chromium.launch()
        ctx = await browser.new_context(storage_state="/workspace/session.json")
        page = await ctx.new_page()
        await page.goto("https://example.com/orders", wait_until="domcontentloaded")
        print(await page.title())
        await page.screenshot(path="/workspace/orders.png", full_page=True)
        await browser.close()

asyncio.run(main())
"""

try:
    sbx.filesystem.write("/workspace/run.py", SCRIPT)
    r = sbx.exec("cd /workspace && python3 run.py", timeout_seconds=180)
    if r.exit_code != 0:
        raise RuntimeError(r.stderr)
    png = sbx.filesystem.read("/workspace/orders.png")
finally:
    sbx.kill()
# Log in ONCE, freeze the machine, then branch a VM per job from the frozen
# state. Each fork is copy-on-write: pages are shared until something writes.
base = Sandbox.create(template="browser", ttl_seconds=3600)
base.filesystem.write("/workspace/login.py", LOGIN_SCRIPT)
base.exec("python3 /workspace/login.py", timeout_seconds=300)

ready = base.snapshot()   # browser profile, disk and memory, all of it

for account in accounts:
    job = Sandbox.fork(ready)     # already authenticated, no login round-trip
    try:
        job.exec(f"python3 /workspace/export.py {account}", timeout_seconds=300)
    finally:
        job.kill()

Who should not pick PandaStack

Plainly: we do not run a managed residential proxy pool. We do not offer captcha solving. We do no fingerprint or stealth tuning — no patched Chromium, no TLS signature work, no evasion layer. Those are whole products with dedicated teams.

If your workload is scraping sites that actively block you, we are the wrong choice. Use Bright Data, a purpose-built browser vendor with stealth included, or bring your own proxy provider. Hardware isolation does not make you look less like a bot.

You can bring your own proxy — it's a real VM, so you set Chromium's proxy flags or the guest's routing — but you maintain that relationship. We fit when the browser is a tool your agent uses rather than a weapon: driving your own product, testing your own app, or a partner's admin panel that never shipped an API.

How to choose

  1. Answer the blocking question first. If target sites are adversarial, your shortlist is Bright Data or a stealth-first vendor.
  2. If you need a desktop and not just a browser, it's Scrapybara or a VM you control — a CDP-only product cannot open a PDF viewer.
  3. If compliance says page content cannot leave your infrastructure: self-hosted Browserless, self-hosted Steel, or your own VMs.
  4. If you're not fighting anyone, start with Browserbase or Hyperbrowser and revisit when the bill hurts.
  5. If logging in is your dominant cost, look hard at resumable state — full-machine snapshots, or documented profile persistence rather than cookies alone.
  6. Multiply peak concurrent sessions by average session length before signing.

The short version

Browserbase if you want it handled. Browserless if it must run in your account. Steel for open source with agent ergonomics. Scrapybara if the task is a desktop. Bright Data if you're being blocked. Your own Playwright if the volume is small and the sites are friendly. PandaStack if you want the browser inside a machine you control, hardware-isolated per session, with a logged-in state you can snapshot and branch — and you don't need proxies, captchas or stealth.

Two things matter on day one whichever you pick: know whether your workload is adversarial, and never build a system that logs in every run.

Frequently asked questions

What is Hyperbrowser and what are the main alternatives?

Hyperbrowser is one of several newer cloud browser products: managed headless browser sessions reachable over a CDP endpoint, with agent-oriented APIs layered on top. The main alternatives are Browserbase, Browserless, Steel.dev, Scrapybara, Bright Data's browser API, running Playwright or Puppeteer yourself on a VM or in CI, and PandaStack's browser microVM template. They all hand you a WebSocket that speaks the Chrome DevTools Protocol, so the connect call is identical; they differ in isolation, session persistence, proxy coverage and pricing shape. Check each vendor's current docs, since features here change month to month.

Do I actually need a cloud browser, or can I run Playwright myself?

For a nightly scrape of a handful of cooperative sites, or an agent driving your own staging environment, self-hosting Playwright on a VM or in CI is a couple of hours of work and completely reasonable. The costs arrive later: you own the concurrency ceiling, zombie process cleanup, browser version upgrades, and the absence of session recording when something breaks at 3am. Rent when you're fighting blocking, when you need proxy geo coverage, or when observability matters more than the line item. Budget real memory per browser and check /dev/shm, since 64MB crashes renderers.

How do I keep a logged-in browser session between runs?

The cheapest version is Playwright's storageState, which serialises cookies and local storage to JSON you replay into a new context. It's fine for simple sites and it silently misses things: IndexedDB, service workers and some device-bound tokens don't travel. The stronger version is persisting the whole browser profile directory, or snapshotting the entire machine including memory and forking from it, which is what PandaStack's copy-on-write fork does. Ask any vendor specifically what persists rather than accepting 'session persistence' as an answer, because the gap is where production incidents live.

Does PandaStack provide proxies, captcha solving or stealth?

No, and this is worth being clear about before you evaluate us. We do not run a managed residential proxy pool, we do not offer a captcha-solving service, and we do no fingerprint or stealth tuning. If your workload is scraping sites that actively block you, use Bright Data or a stealth-first browser vendor instead. What we provide is a Firecracker microVM with Chromium and Playwright already installed, one hardware-isolated VM per session, root access inside it, and copy-on-write fork from a snapshot. You can bring your own proxy provider, but you maintain that relationship.

How much does browser automation cost per session-hour?

Rates vary by vendor and change often, so check current pricing pages rather than any figure in a blog post. The more useful exercise is modelling your own usage: multiply peak concurrent sessions by average session length, because browser work is bursty and mostly waiting, and a session parked on a spinner costs the same as one doing real work under per-session pricing. PandaStack bills one rate card across classes at $0.054 per vCPU-hour and $0.0162 per GiB-hour on active CPU-seconds and committed GiB-hours, plus egress, with no per-request charge.

Is scraping the same problem as driving my own app with an agent?

No, and conflating them is the most expensive mistake in this category. They look identical in code — both are Playwright driving Chromium — but scraping under blocking is an adversarial arms race requiring residential IPs, fingerprint work and captcha handling, while an agent clicking through your own product or a partner's admin panel needs none of that. Teams routinely buy an anti-blocking product to fix what was really a memory or concurrency problem. Work out which side you're on first; it eliminates most of the shortlist immediately and saves you paying for a fight you're not in.

Keep reading

Run code in a microVM in one API call.

49ms p50 cold start. Fork, snapshot, and scale to zero.

Start free
Written by Ajay Kumar, Founder, PandaStack.