Build a Google search scraper
Sometimes you need the search results themselves, the titles, links, and snippets for a list of queries, or where your site ranks. A bot can read them off the page into a sheet. The catch is that Google fights scraping harder than anyone, so this works small and slow, on your own research. There are three ways to start, with no code, with code, or with a Claude skill.
What I mean by a Google search scraper
A Google search scraper is a bot that runs a query and reads the results into a sheet. The titles, the links, the snippets, the position each result sits in. Give it a list of queries and it works down them, gathering what comes back. People use it to check where a site ranks, to track results over time, or to pull a topic's results together for research.
Google does not want to be scraped
Here is the honest truth up front. Google is the most defended search box on the internet, and it does not want to be scraped. Run too many queries too fast and it throws a CAPTCHA or an unusual-traffic block, and automated querying is against its terms. This is not a target you can hammer.
So set your expectations. For serious or large-scale search data, Google has an official Custom Search API, and there are SERP data providers built for exactly this, and those are the routes that scale. The browser is for the small and occasional, a handful of queries for your own research or rank checks, run slowly, spaced out, and stopped the moment Google pushes back. When you see a CAPTCHA, that is the signal to back off, not to push through.
Who this is for
This is for the person who needs a few search results, not a data empire. An SEO checking where a page ranks for a handful of keywords, a researcher gathering results on a topic, someone tracking how a result moves week to week. Low volume, your own research. If you need search data at scale, the API is your friend, not a scraper. No-coders and coders both, since you can build it without code and drop into code when you want.
How I'd approach it
Keep it small and slow. Put your queries in a sheet, a handful, not thousands, and have the bot run each one, read the results, and write them back. Put a real pause between queries so you look like a person, not a flood. Watch for any block, and if Google throws a CAPTCHA, stop, do not try to get around it. For anything bigger, switch to the official API.
A few queries, spaced out, stop on a block. I would lay out the first draft with Build with description.
Build a Google search scraper from a description
Describe the queries in plain words in the Chrome extension and it builds the steps for you. Give it a few short lines, check what it made, and run it. Explore no-code.
To the right is an example. Describe the queries and the fields you want, and the AI lays out the steps. Keep it slow.
Chrome extensionInstructions
- Read the next query from a Google Sheet39 / 500
- Search Google for it20 / 500
- Wait a few seconds before reading33 / 500
- Scrape the title, link, and snippet of each result50 / 500
- Write them to a Google Sheet, then move on42 / 500
Build a Google search scraper 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();
const queries = ["best running shoes", "no code automation"];
const results = [];
for (const q of queries) {
await page.goto(`https://www.google.com/search?q=${encodeURIComponent(q)}`);
await page.waitForSelector("#search");
const items = await page.$$eval("#search a h3", els =>
els.map(h => ({
title: h.textContent.trim(),
link: h.closest("a")?.getAttribute("href"),
}))
);
results.push({ query: q, items });
await page.waitForTimeout(8000); // a real pause, do not flood
}
console.log(results); // write these to your sheet
} 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 queries you want. It builds the bot for you, no-code or code, running a few searches and reading the results into a sheet, slowly.

What can you scrape?
Small and slow, for your own research. A couple of cases worth knowing first.
Works well
- Titles, links, and snippets for a query
- Where your site ranks for a keyword
- A handful of queries from a sheet
- Tracking a result over time
- Spacing queries out on a schedule
Harder
- Anything at volume, which Google blocks
- Results that change by location and login
- Ads and features mixed into the results
Don't try
- Bypassing a CAPTCHA or block
- Hammering Google with thousands of queries
- Anything against Google's terms
What I'd watch out for
Google is the hardest scrape there is, so read this one carefully. Here is what I would watch for.
When you hit a CAPTCHA, back off
A CAPTCHA or an unusual-traffic message means you have gone too fast. The answer is to slow down or stop, not to push through it. Space your queries out, run fewer, and give it time. There is no version of beating the block that ends well.
Use the API for anything real
For volume, or anything you depend on, Google's official Custom Search API and the SERP data providers exist for a reason. They are built to be queried. A browser scraper is for the small and occasional, not a pipeline.
Results are not the same for everyone
What you scrape depends on location, language, and whether you are signed in. The ranking you see is not the ranking everyone sees, so note the conditions, and do not read too much into one run.
Go slow on purpose
Put real pauses between queries, run a few at a time, and spread them out. The slower you go, the longer it works. Pick what you read with the selector tool, since Google's result markup shifts.