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 extensionInstructions
- 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 toolimport { 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.

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.
Cookie banners
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.