BLOG
Comparison Web Agent: How to Evaluate Browser Runtimes
A comparison web agent guide: how to evaluate hosted Chromium runtimes, self-hosted Browserless, and open-source browser-use for production.
# Comparison Web Agent: How to Evaluate Browser Runtimes
A comparison web agent decision is really a runtime decision. The agent framework — browser-use, Stagehand, a custom Playwright loop, or a CLI like agent-browser — decides *what* to do on a page. The runtime decides whether that plan survives contact with a real site at 3 a.m. under load. Most "comparison web agent" searches are trying to answer one question: which browser layer should sit under my agent in production? This guide gives you the criteria, a side-by-side table, and the wiring details to test each option yourself.
The short version: hosted Chromium runtimes (Remote Browser, Browserbase, Hyperbrowser, Steel, Kernel, Anchor) trade per-hour cost for operational simplicity. Self-hosted Browserless and open-source browser-use trade control for the burden of running Chrome fleets, proxies, and session cleanup yourself. Neither is universally better. The right pick depends on concurrency shape, session length, and how much of your team's time you want spent on browser infrastructure.
What a "comparison web agent" actually compares
When people search for an agent-browser comparison, they usually conflate three separate layers. Separating them makes the decision tractable:
- The agent layer. The reasoning loop that turns a goal into clicks and keystrokes. browser-use, Stagehand, Claude computer-use, or your own planner. This layer is model-bound and changes fast.
- The protocol layer. How the agent talks to the browser. Almost everything converges on the Chrome DevTools Protocol (CDP) over a WebSocket endpoint. Playwright's
connectOverCDP, Puppeteer'sbrowserWSEndpoint, and Selenium's remote WebDriver all land here. - The runtime layer. Where Chromium actually executes: your laptop, a container you operate, or a hosted session you rent by the browser-hour.
A comparison web agent that only compares agent frameworks misses the layer that causes most production incidents. The agent can be excellent and still fail because the browser ran out of memory, lost its profile, or got blocked by a bot check. So the useful comparison is at the runtime layer, with the agent layer held constant.
The comparison table
The table below compares the categories, not specific price points — pricing changes and you should verify current numbers on each vendor's page. For Remote Browser specifically, see /pricing.
| Criterion | Hosted Chromium (Remote Browser, Browserbase, Hyperbrowser, Steel, Kernel, Anchor) | Self-hosted Browserless | Open-source browser-use (local) |
|---|---|---|---|
| Setup time | Minutes: API call returns a CDP endpoint | Hours to days: container orchestration, scaling | Minutes locally, days to harden |
| Browser lifecycle | Managed create/stop, session isolation | You build pooling and reaping | You manage process lifecycle |
| Persistent profiles | Built-in profile storage | DIY volume mounts | Local profile dirs, fragile across hosts |
| Live debugging | Viewer URL per session | Limited, depends on setup | Local headed mode only |
| Proxy / stealth settings | Configurable browser settings per session | You supply proxies and config | You supply everything |
| Scaling model | Concurrency limits per plan | Your cluster capacity | Your machine |
| Cost shape | Per browser-hour | Infra + engineering time | Engineering time + compute |
| Control / customization | Constrained to exposed settings | Full | Full |
| Data residency | Vendor-dependent, check DPA | You own it | You own it |
| Best fit | Teams shipping agents, not infra | Teams with existing k8s and ops | Prototyping, research, air-gapped |
Two rows deserve emphasis. Persistent profiles are where self-hosted setups quietly break: a profile is only useful if the same browser identity reappears across sessions, and that requires storage that survives container restarts. Live debugging is where hosted runtimes earn their cost — being able to open a viewer URL and watch the agent's tab in real time collapses debugging from hours to minutes.
Hosted runtimes compared
Among hosted options, the differences are mostly in session semantics and what's exposed around the browser.
- Remote Browser provides hosted Chromium sessions with CDP access, Playwright/Puppeteer/Selenium compatibility, a live viewer, persistent profiles, configurable browser settings for proxy and stealth-related behavior, session isolation, and usage controls. It's aimed at browser-use workflows and agent runtimes that need a stable endpoint rather than a framework.
- Browserbase is the most established name and has broad framework integrations. Its plans are concurrency-tiered, which matters if you run many short sessions.
- Hyperbrowser and Steel position around similar hosted-Chromium primitives; Steel is also open-source, which appeals to teams that want a self-host escape hatch.
- Kernel and Anchor compete on session startup characteristics and agent-specific APIs.
The honest guidance: run the same agent task against two or three of these and measure *your* workload. Startup latency, session stability under long tasks, and profile persistence behavior differ enough that vendor benchmarks rarely transfer. If you want a deeper runtime walkthrough, read /blog/remote-browser-for-ai-agents.
Self-hosting Browserless and open-source browser-use
Self-hosting is the right answer for a real set of teams, and it's worth being precise about when.
Choose self-hosted Browserless or a raw Playwright fleet when:
- You already run Kubernetes and have on-call coverage for it.
- Data cannot leave your network, and no vendor DPA satisfies your compliance team.
- Your workload is steady-state and high-volume enough that per-hour pricing exceeds your fully loaded infra cost.
- You need browser modifications (patched Chromium, custom extensions) that hosted vendors won't expose.
Avoid self-hosting when:
- Your sessions are bursty. Idle capacity you provisioned for peak is money burned.
- You need persistent profiles across ephemeral workers — this is the hardest part to get right.
- Your team's time is better spent on the agent than on Chrome memory leaks and zombie processes.
Open-source browser-use is excellent for development. Running it locally gives you fast iteration and full visibility. The gap appears when you move to a fleet: browser-use's own documentation and community discussions repeatedly point at the browser infrastructure problem as the production bottleneck. That's the gap hosted runtimes fill. If you're evaluating the open-source path against hosted, /blog/remote-web-browser covers the trade-offs in more depth.
Wiring an agent to a hosted runtime over CDP
The protocol layer is where a comparison web agent becomes concrete. Every hosted runtime worth considering returns a CDP WebSocket URL. Here's the Playwright path in TypeScript, which works against Remote Browser and any CDP-compatible endpoint:
import { chromium, Browser, Page } from "playwright";
interface SessionInfo {
cdpUrl: string; // wss://... from the runtime's session API
viewerUrl: string;
}
async function runAgentTask(session: SessionInfo, goal: string) {
// connectOverCDP attaches to the already-running hosted Chromium.
// No local browser binary is launched.
const browser: Browser = await chromium.connectOverCDP(session.cdpUrl, {
timeout: 30_000,
});
// Hosted sessions usually expose one default context.
const context = browser.contexts()[0];
const page: Page = context.pages()[0] ?? (await context.newPage());
try {
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
// Hand the page to your agent loop here. The agent drives `page`
// through the same Playwright API it would use locally.
console.log(`Debug live at: ${session.viewerUrl}`);
// ... agent reasoning, actions, extraction ...
} finally {
// Close the connection, not the remote browser, unless you also
// call the runtime's stop-session endpoint.
await browser.close();
}
}Three details matter in production:
- `connectOverCDP` does not launch a browser. It attaches. If the session is already stopped, you get a connection error, not a fresh browser. Handle that explicitly.
- `browser.close()` closes the CDP connection. Whether it also terminates the remote session depends on the runtime. Check the docs and stop sessions explicitly so you aren't billed for orphans.
- The viewer URL is your debugging tool. Log it with every session ID. When an agent fails at step 14, you want to look at the tab, not reconstruct it from logs.
For the protocol itself, the Chrome DevTools Protocol documentation is the authoritative reference, and Playwright's `connectOverCDP` docs cover the connection semantics.
Production criteria that actually differentiate runtimes
Beyond the table, these are the questions that separate a demo from a deployment. Ask each vendor — or test each option — against them.
Session lifecycle and billing
- Can you stop a session explicitly, and does stopping stop the meter?
- What happens to a session when the client disconnects mid-task?
- Are there idle timeouts, and are they configurable?
A runtime that bills until a timeout after your agent crashed is a runtime that will surprise your finance team. See /pricing for how Remote Browser meters usage.
Profile persistence
- Do profiles survive across sessions and across worker hosts?
- Can two sessions share a profile, or is it locked?
- How do you delete a profile for compliance?
Persistent profiles are what make logins, cookies, and local storage useful to an agent. They're also a data-handling liability if you can't delete them.
Isolation
- Is each session a separate browser process, or a shared one with separate contexts?
- Can one agent's cookies leak into another's?
For multi-tenant agents, process-level isolation is the safer default. Confirm which model a runtime uses before you put customer data through it.
Observability
- Is there a live viewer? Can you record sessions?
- Are console logs and network requests accessible after the fact?
- Can you correlate a session ID to your own trace IDs?
If you can't answer "what did the agent see at step 9," you can't debug it. /blog/remote-control-browser covers live control and observation patterns.
Network and stealth settings
- Can you set a proxy per session?
- What browser settings are configurable (user agent, locale, timezone, headers)?
- Are settings applied at the browser level or the context level?
Be skeptical of "undetectable" claims from any vendor. What matters is whether the settings you need are exposed and applied consistently. Remote Browser exposes configurable browser settings for proxy and stealth-related behavior; verify the specific knobs against /documentation before you depend on them.
A practical evaluation plan
Don't pick a runtime from a comparison table. Pick it from a week of your own traffic.
- Pick three representative tasks. One short read-only scrape, one multi-step form flow with a login, one long-running task over 10 minutes.
- Run each against two hosted runtimes and one self-hosted baseline. Use the same agent code and the same CDP connection path.
- Measure four things: task success rate, p50/p95 session startup, failure modes (timeouts vs. blocks vs. crashes), and engineering hours spent on setup and debugging.
- Check the boring stuff: can you delete data, export logs, and get a DPA? Does the vendor's status page show incidents during your test window?
- Project cost at your real concurrency and session length, not at the vendor's example numbers.
The runtime that wins is usually the one whose failure modes you can diagnose fastest, not the one with the lowest headline price. A cheap runtime that hides the browser from you costs more in engineer-hours than it saves in browser-hours.
Where Remote Browser fits
Remote Browser is a hosted Chromium runtime for AI agents and browser-use workflows. It's the right fit if you want CDP endpoints, a live viewer, persistent profiles, configurable browser settings, and session isolation without operating Chrome infrastructure — and you'd rather spend your time on the agent than on the browser. It's the wrong fit if you need to patch Chromium itself or run fully air-gapped; self-hosting is better there.
Start with /documentation to get a session endpoint, then run the evaluation plan above against your own tasks. If you're coming from a local setup, /blog/remote-browser-online walks through the migration. The comparison web agent question has no universal answer — but with the right criteria, yours takes an afternoon to settle.