Automate clicking and typing

Most of what you do at the keyboard is the same fifty clicks and the same fifty fields, over and over. axiom drives Chrome so the click-and-type work happens automatically. From a Google Sheet, on a schedule, or one row at a time. There are three ways to start, with no code, with code, or with a Claude skill.

What I mean by automating clicking and typing


Automating clicking and typing means a bot does the repetitive UI work you would otherwise do by hand. Clicking through a multi-step form. Filling the same five fields on a hundred rows. Pressing tab between inputs. Hitting submit. Reading the confirmation. Going back and doing it again with the next row of data. The bot opens the site in Chrome, walks through the flow the way a person would, and writes the result back to wherever you want it.

Why bots are better at this than people


Web forms are structured, and structured work is what bots are built for. A person fills a form by hand: read the field, find the value in a sheet, type it, move to the next field, repeat. A bot reads the row and fills the form atomically. Every field at once. Then submits and moves to the next row. Same outcome, no fatigue, no copy-paste errors, no missed fields when the page scrolls.

The other thing bots do well: pace. Every form has a tolerance for how fast you can submit. Hit it manually and you're either too slow (boring) or too fast (the page hasn't finished loading). A bot waits for the form to settle before each interaction.

Who this is for


This is for anyone who fills the same form over and over. Operations teams entering orders from a CSV. Recruiters keying candidate details into an ATS. Finance teams moving rows from a sheet into an accounting system. Sales ops logging activity in a CRM that doesn't have a bulk import. QA running the same click-through smoke test on every release. If your weekly routine includes "open this form, fill these fields, submit, repeat for every row," a bot can take that off your plate.

How I'd approach it


Start by listing the click work, not the data work. "Open URL, click cookie banner away, click 'Add new', fill name, fill email, click submit, capture confirmation, repeat." Each line is a step. Build the steps in the Chrome extension. Point and click to select each element, pick the column it maps to from your sheet, then loop the rows.

Always test one row end-to-end before you loop. It's a lot easier to fix a selector than to undo a hundred wrong submissions.

Automate from a description


Describe the work in plain words in the Chrome extension and it builds the steps for you. Tell it the URL, the form fields, and where the data comes from. Explore no-code.

To the right is an example. Describe your click-and-type routine and let the AI lay out the steps.

Chrome extension
Describe your automation

Instructions

  • Open the order entry form on my admin site42 / 500
  • For each row in my Google Sheet, fill the name field52 / 500
  • Fill the email and order ID fields from the same row52 / 500
  • Click the Submit button23 / 500
  • Capture the confirmation number into a results column53 / 500
  • Move to the next row20 / 500

Automate in code


Build with code. If you would rather script it yourself, this is the path. Explore code

Connect Playwright (or Puppeteer) to our cloud Chromium and write the same scripts you'd run locally, without managing the browser.

Code tool
Code example
import { chromium } from "playwright";

const browser = await chromium.connectOverCDP(
  `wss://cdp-lb.axiom.ai/?token=${process.env.AXIOM_API_KEY}`
);

try {
  const context = browser.contexts()[0];
  const page = context.pages()[0] ?? await context.newPage();

  // Each row would come from your Google Sheet
  const rows = [
    { name: "Ada Lovelace", email: "ada@example.com",  orderId: "A-101" },
    { name: "Alan Turing",  email: "alan@example.com", orderId: "A-102" },
  ];

  for (const row of rows) {
    await page.goto("https://example.com/order");
    await page.locator('input[name="name"]').fill(row.name);
    await page.locator('input[name="email"]').fill(row.email);
    await page.locator('input[name="orderId"]').fill(row.orderId);
    await page.getByRole("button", { name: "Submit" }).click();
    await page.locator('.confirmation-number').waitFor();
    const confirmation = await page.locator('.confirmation-number').textContent();
    console.log(row.orderId, "→", confirmation?.trim());
  }
} finally {
  await browser.close();
}

Build with a Claude skill

Build no-code or code bots with a skill.

Add the Claude skill and describe the click-and-type routine. It builds the bot for you, no-code or code, picking the right step for each click, type, and read.

Claude building a click-and-type bot from a description

What can you automate?


Most click-driven web work. A couple of cases worth knowing first.

Works well

  • Bulk form filling from a Google Sheet
  • Multi-step flows (cookie banner → search → result → submit)
  • Reading a confirmation or error message after each submission
  • Sites that gate behind a login (with stored cookies)
  • Scheduling the routine to run while you're away

Harder

  • Dynamic forms that load fields in pieces (extra waits help)
  • Captchas (use a solver step or a saved session)
  • Forms inside iframes (iframe support is on, just turn it on per step)

Don't try

  • Anything against the target site's terms of service
  • Spamming form submissions or creating fake accounts
  • Pages that explicitly forbid automation in their TOS

What I'd watch out for


A few patterns trip up newcomers to click-and-type automation.

Wait for the page, not the clock

Don't insert hard delays everywhere. Wait for a specific element to appear. "wait for the submit button to become enabled" beats "wait 3 seconds" every time, because pages are unpredictable but selectors are stable.

Selectors that survive redesigns

Pick selectors that describe what an element is, not where it sits. input[name="email"] survives a redesign that moves the input from row 2 to row 3; form > input:nth-child(2) doesn't.

Test one row

Run a single row of data end-to-end before you loop. It catches the selector that targeted the wrong element, the validation that pops up unexpectedly, the cookie banner the bot missed. Fixing one bad row is fixable; undoing fifty bad submissions is much less fun.

Most forms hide behind a cookie banner that has to be clicked through first. Either store the "accepted" cookie or add a step that dismisses the banner if it's present.

"I was skeptical about no-code automation, but Axiom proved me wrong. It's incredibly powerful."

David Wilson

"Finally, a tool that makes browser automation accessible without compromising on power. Highly recommended!"

Michael Chen

"The visual builder is a dream come true. No more writing complex scripts!"

Lisa Anderson

"The support team is amazing, and the product just keeps getting better. Worth every penny."

Emma Davis

"Axiom has saved me countless hours. The automation possibilities are endless."

Robert Taylor

"The best browser automation tool I've used. The AI features are game-changing for complex workflows."

Sarah Johnson

"Axiom has completely transformed how I handle browser automation. The no-code interface is intuitive and powerful."

John Smith

Fast to build. Easy to run and scale. Outstanding support.

Start for free. No credit card required.