- Use cases
- Browser automation
Puppeteer without managing Chrome.
Point puppeteer.connect() at a browser Browsa starts for you. Installing Chromium, keeping it updated and cleaning up crashed processes stops being your job.
100 free credits. No card, no subscription.
How it works.
Start a browser
createAgent({ ttl: "5m" })returns the browser's id and itscdp_httpaddress.Connect Puppeteer
Pass that address and your key in an
X-API-Keyheader topuppeteer.connect()instead of callinglaunch(). Usepuppeteer-core: there is no Chrome to download.Disconnect and clean up
Call
browser.disconnect()anddestroyAgent(), or let the browser shut down when its TTL ends.
import { Client } from "browsa"; import puppeteer from "puppeteer-core"; const apiKey = "agt_live_…"; const client = new Client({ apiKey }); const agent = await client.createAgent({ ttl: "5m" }); const browser = await puppeteer.connect({ browserURL: agent.cdp_http, headers: { "X-API-Key": apiKey }, }); const [page] = await browser.pages(); await page.goto("https://example.com"); console.log(await page.title()); await browser.disconnect(); await client.destroyAgent(agent.id);
# Start the browser from your Python backend, # then hand the address to the Node worker that runs Puppeteer. from browsa import Client client = Client(api_key="agt_live_…") agent = client.create_agent(ttl="5m") print(agent["id"], agent["cdp_http"]) # Reconnect later, or from another process cdp_http = client.get_agent(agent["id"])["cdp_http"]
What you get.
No Chrome in your image
puppeteer-core skips the browser download, so installs are faster and your images are smaller.
Crashes stay in the cloud
Each browser runs in its own cloud session and shuts down when its TTL ends. No stray Chrome processes eating memory on your servers.
Fewer blocks
A fresh Browsa browser passes 4 of 6 public detection tests on default settings, 5 of 6 with a saved identity. See every result.
Saved logins
A persistent identity keeps cookies and local storage between runs, so a worker can pick up where the last one left off.
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 is the 5-credit tier.
Free
Starter
Growth
Pro
Questions.
Should I use puppeteer or puppeteer-core?
puppeteer-core. It has the same API but doesn't download a browser, which you no longer need. The full puppeteer package works too; it just installs a Chrome you won't use.
What changes in my existing scripts?
Replace puppeteer.launch() with puppeteer.connect({ browserURL: agent.cdp_http, headers: { "X-API-Key": apiKey } }) and take the open page from browser.pages(). End with browser.disconnect() and destroyAgent(). Your page code stays the same.
Can I reconnect to a browser that is still running?
Yes. getAgent(agentId) in TypeScript, or get_agent(agent_id) in Python, returns the cdp_http address of a running browser, so another process can connect to it with the same X-API-Key header.
How long can a browser run?
Up to 1 hour. Set ttl when you create it, for example "5m" or "1h".
Stop babysitting Chrome.
100 free credits. No card, no subscription.