Browsa
  1. Use cases
  2. 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.

  1. Start a browser

    createAgent({ ttl: "5m" }) returns the browser's id and its cdp_http address.

  2. Connect Puppeteer

    Pass that address and your key in an X-API-Key header to puppeteer.connect() instead of calling launch(). Use puppeteer-core: there is no Chrome to download.

  3. Disconnect and clean up

    Call browser.disconnect() and destroyAgent(), 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);

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.

Browser, up to 5 minutes1 credit
Browser, up to 1 hour5 credits
Saved identity, per month50 credits
Session on a saved identity1 credit
Browser that fails to startRefunded

A browser runs for up to 1 hour. Any TTL over 5 minutes is the 5-credit tier.

Free

$0
100 credits to start

Starter

$20
200 credits

Growth

$100
1,200 credits, 20% bonus

Pro

$500
7,500 credits, 50% bonus
Full pricing Need volume or invoicing? support@browsa.io

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.