Run Playwright in the cloud. Change one line.

Point connectOverCDP at our WebSocket and the script you already have runs on fresh cloud Chrome. You manage your script. We manage Chrome.

Playwright
1import { chromium } from "playwright";2 3const browser = await chromium.connectOverCDP(4  `wss://cdp-lb.axiom.ai/?token=${process.env.AXIOM_API_KEY}`5);6 7const context = browser.contexts()[0];8const page = context.pages()[0] ?? await context.newPage();9 10await page.goto("https://example.com");11await page.getByRole("button", { name: "Accept" }).click();12await page.screenshot({ path: "out.png" });13 14await browser.close();15 
Point connectOverCDP at our WebSocket. The rest of your script doesn't change.Read the Chrome API docs

The switch

Stop launching Chromium. Connect to ours.

Your script connects to a browser in our cloud instead of launching its own. Nothing else changes.

Explore the Chrome API

Swap launch() for connectOverCDP

Add your API key and run. Same one-line change in Node, Python, Java, and .NET.

const browser = await chromium.connectOverCDP(
  `wss://cdp-lb.axiom.ai/?token=${KEY}`
);
Explore the Chrome API

No Chromium install

Every session gets current cloud Chrome. Nothing to download in CI, nothing to rebuild when Chromium updates.

Scale your sessions

Up to 20 concurrent sessions in the cloud, unlimited on desktop, and more on request. Parallel work means more connections, not more servers, and runtime only meters while a session is open.

See infrastructure

Your data stays yours

Each cloud session gets its own server with a private Docker container, desktop runs never leave your machine, and we never train AI on anything that passes through either.

Also available

Mix Step API calls into the same script.

The browser you connected to also takes Step API calls, functions from the engine behind our No-Code Tool. One call scrapes a paginated list, solves a captcha, or walks a date picker, using the selectors you already have.

Explore the Step API
Log in and scrape
1await axiom.browserOpen();2try {3  await axiom.goto("https://example.com/login");4  await axiom.enterText("#email", "user@example.com");5  await axiom.enterText("#password", process.env.PW);6  await axiom.click("button[type=submit]");7  await axiom.wait(2000);8 9  const rows = await axiom.scrape(null, { hierarchy: ".product-card" }, null, 50, {});10} finally {11  await axiom.browserClose();12}13 
Fill in a form
1await axiom.goto("https://example.com/apply");2await axiom.enterText("#full-name", row.name);3await axiom.selectList("#country", row.country);4await axiom.click("button[type=submit]");5 
Use AI mid-run
1const [[title], [description]] = await axiom.scrapeMetadata([2  { id: "general_metadata_title" },3  { id: "meta_description", value: 'meta[name="description"]' }4]);5const verdict = await axiom.integrateAI({6  aiFunction: "generate",7  prompt: `Product page or category page? ${title} ${description}`8});9 
Combine with your own code
1const targets = await db.query("SELECT url FROM watchlist");2 3await axiom.browserOpen();4try {5  for (const { url } of targets) {6    await axiom.goto(url);7    const [[price]] = await axiom.scrape(null, { hierarchy: ".price" }, null, 1, {});8    if (Number(price) < 100) await notifySlack(url, price);9  }10} finally {11  await axiom.browserClose();12}13 

Get an API key and try the Chrome API for free.

2 free hours of runtime. No card required.