Step API: Scrape, click, and type with one call each.

The engine behind the No-Code Tool, exposed as functions you can call. Each one does a whole job: scrape a paginated list, solve a captcha, walk a date picker, run an LLM prompt without leaving the session. Call them from Node, from any CDP client, or hand them to your agent over MCP.

Step API
1import { AxiomApi } from '@axiom_ai/api';2 3const axiom = new AxiomApi('YOUR_API_KEY');4 5await axiom.browserOpen();6try {7  const rows = await axiom.scrape(8    'https://example.com/products',9    '.product-card',10    'button[data-load-more]',11    200,12    {}13  );14  console.log(rows.length);15} finally {16  await axiom.browserClose();17}18 
Scrape 200 rows in four lines.Step API docs

Single calls

Nine steps, one line each.

Nine of the twenty steps, with the line of code each one takes. The arguments are the selectors and values you already have. The steps that read something hand the data back, the rest act on the page and move on.

Why steps

The No-Code Tool's engine, as functions.

Each step does a whole job rather than a single browser instruction, and it runs on the same engine as the No-Code Tool.

Write less code

In Puppeteer or Playwright you write the mechanics yourself: waitForSelector, $$eval, click next, wait, loop. A step is that sequence already written. Pass it what it needs: click takes the button selector, scrape takes the data selector, the next-page selector, and a result count. A dozen lines come out as one.

Error handling built in

The steps run on the same engine as the No-Code Tool, so they wait for elements, retry flaky actions, and time out sensibly by default. Long-running steps poll transparently until they finish. You handle business logic, not browser flakiness.

Mix with your own code

Steps are ordinary async functions, so they sit in the middle of the JavaScript you already write. Pull rows from your database and loop them through a step. Drop to raw CDP with Puppeteer or Playwright when a step doesn't cover something, then carry on with steps in the same session, on the same browser.

Drive it from an MCP client

Give your agents hands on a real browser. The steps become tools an MCP client calls on its own: scrape a page for the data it needs, or chain a series to log in, fill a form, and read the result back. Claude, Cursor, or an agent you built yourself, all on your account key.

How to get started

Three steps to your first run.

Get a key, install the library, open a browser. The same key works against cloud and desktop.

Step 1

Get an API key

Sign up to the Code Tool or the No-Code Tool to generate a key. No card required, and new accounts get 30 free minutes of runtime.

Get an API key

Step 2

Install the Node library

The canonical wrapper. npm install, instantiate, and call the named methods: axiom.goto(), axiom.click(), axiom.enterText(), axiom.scrape(), and so on. Node only, and not required, but it saves you writing the HTTP boilerplate and handles transparent retries when a long-running step's request times out.

npm install @axiom_ai/api
Browse every step function

Step 3

Add it to your code

Import the client, pass your key, and open a browser session. From there every step function is available on the axiom instance.

import { AxiomApi } from '@axiom_ai/api';

const axiom = new AxiomApi('YOUR_API_KEY');

await axiom.browserOpen();

Worked examples

Chain the steps to fit the job.

Log in, fill a form, call AI mid-run, or drop the steps into code you already have.

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("https://example.com/products", ".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    const [[price]] = await axiom.scrape(url, ".price", null, 1, {});7    if (Number(price) < 100) await notifySlack(url, price);8  }9} finally {10  await axiom.browserClose();11}12 

The surface

All twenty steps.

Five groups. Everything you need to open a browser, get to a page, act on it, take data off it, and close it down.

Docs

Every layer, documented.

Quickstarts, worked examples, and full endpoint references for each layer. Start with the quickstart, generate a key, and build from there.

Start with the quickstart

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

2 free hours of runtime. No card required.