- Use cases
- Browser automation
Run Playwright in the cloud.
Keep your Playwright code and stop running browsers on your own servers. One API call starts a real Chromium in the cloud and returns its CDP address. Change launch() to connect_over_cdp() and the rest of your script stays the same.
100 free credits. No card, no subscription.
How it works.
Start a browser
One call to
create_agent(ttl="10m")returns the browser's id and itscdp_httpaddress.Connect Playwright
Swap
chromium.launch()forchromium.connect_over_cdp()with your key in anX-API-Keyheader, and use the page that is already open.Clean up
Call
destroy_agent()when the script is done, or let the browser shut down when its TTL ends.
from browsa import Client from playwright.sync_api import sync_playwright API_KEY = "agt_live_…" client = Client(api_key=API_KEY) agent = client.create_agent(ttl="10m") try: with sync_playwright() as p: browser = p.chromium.connect_over_cdp(agent["cdp_http"], headers={"X-API-Key": API_KEY}) context = browser.contexts[0] page = context.pages[0] if context.pages else context.new_page() page.goto("https://example.com") print(page.title()) # the rest is plain Playwright finally: client.destroy_agent(agent["id"])
import { Client } from "browsa"; import { chromium } from "playwright"; const apiKey = "agt_live_…"; const client = new Client({ apiKey }); const agent = await client.createAgent({ ttl: "10m" }); try { const browser = await chromium.connectOverCDP(agent.cdp_http, { headers: { "X-API-Key": apiKey } }); const context = browser.contexts()[0]; const page = context.pages()[0] ?? await context.newPage(); await page.goto("https://example.com"); console.log(await page.title()); } finally { await client.destroyAgent(agent.id); }
What you get.
No browsers on your servers
Nothing to install, patch or ship in your Docker image. Your workers only need Python or Node.
A browser sites treat like a browser
Browsa runs its own Chromium build: no automation flag, no HeadlessChrome user agent, a real GPU. See the benchmarks.
Saved logins
A persistent identity keeps cookies and local storage between runs, so scripts don't sign in from scratch every time.
Watch it live
Browsers come with a live view link. Open it to see exactly what your script is doing, and step in if a page needs a person.
Pricing.
You pay per browser, based on the TTL you ask for. Credits never expire.
A browser runs for up to 1 hour. Any TTL over 5 minutes, such as 10 minutes, is the 5-credit tier.
Free
Starter
Growth
Pro
Questions.
Do I need to change my Playwright code?
Only the line that starts the browser. Replace chromium.launch() with chromium.connect_over_cdp(agent["cdp_http"], headers={"X-API-Key": API_KEY}), drop your headless and user-agent flags, and use the page that is already open: browser.contexts[0].pages[0]. Everything after that is plain Playwright.
How long can a cloud browser run?
Up to 1 hour. Set ttl when you create it, for example "5m" or "1h". It shuts down when the TTL ends, or earlier when you call destroy_agent().
Can I use my own proxy?
Yes. Browsers connect directly by default, and you can bring any HTTP or SOCKS5 proxy per browser. Browsa doesn't sell proxies. The country option sets the browser's timezone and language; it doesn't change the network route.
What if my connection drops mid-script?
The browser keeps running until its TTL ends. Call get_agent(agent_id) for its cdp_http and connect again with the same X-API-Key header.
Move your Playwright scripts to the cloud.
100 free credits. No card, no subscription.