BNOD

← All templates
scrapinggooglesearchjson

Google search — extract results to JSON

Type a query into Google Search, scrape result titles and URLs, download as JSON.

Install in BNOD

Install in BNOD

Opens BNOD sidepanel with this template installed. Requires BNOD extension.

Manually running the same Google query, scrolling past the AI overview, and copying the first ten organic results into a research doc is the kind of repetitive task that ate an hour of your week. This template automates it. You type the query once when you save the workflow; every run, the extension opens Google, types the query, scrapes the result block, and dumps {title, url} pairs as a JSON file. Common users: SEO analysts checking ranking on a tracked keyword set, journalists building source lists, or anyone tired of Cmd+C, Cmd+Tab, Cmd+V cycles.

How this workflow works

The workflow drives Google as a real user would — type, press Enter, wait, scrape. Eight blocks total.

  1. manual_trigger — Run button in the sidepanel. The trigger exposes a query input with a default value, so you can override the search per-run via the prompt that pops up. targetTab: "new" opens a fresh tab.
  2. navigate — Goes to https://www.google.com. Plain landing page, no search params.
  3. wait_for — Waits for textarea[name="q"] to be visible. Google switched the search input from <input> to <textarea> in 2023, which is why that selector looks slightly off.
  4. input — Types the query value into that textarea. The value template {{vars.input.query}} substitutes whatever you entered at the prompt.
  5. press_key — Sends an Enter keypress. This submits the search just like a human pressing return.
  6. wait_for — Waits up to 10 seconds (timeoutMs: 10000) for #search to appear. That's the wrapper Google uses around organic results, and it shows up after the AI overview (if any) finishes streaming.
  7. scrape_list — The core extraction. Container selector is #search a:has(h3) — every organic result link that wraps an <h3> title. For each, it pulls title from the <h3> text and url from the anchor's own href (the :scope selector means "the current container element").
  8. export_data — Writes everything to google-results.json via Chrome's download bar.

The workflow only captures the first page of results (typically 10 organic links). Pagination is not part of this template — see customisation below if you need it.

Customising it for your case

Three things people typically tweak.

Common gotchas

Google actively detects and throttles automated traffic. If you hammer this template every 30 seconds you'll see a CAPTCHA page and the workflow will fail because #search never renders. Spacing runs 10+ minutes apart is usually fine. Second pitfall: the AI overview block at the top of results sometimes pushes #search further down and delays its appearance — bumping timeoutMs to 15000 helps on slow connections. Third: ad blocks at the top match the #search a:has(h3) selector on some queries; expect a few sponsored links mixed into the JSON.

FAQ

Do I need a Google account or API key? No. The workflow uses the regular search UI, so it works as long as you can open google.com in a browser. If you want a CAPTCHA-free option, switch to the official Custom Search JSON API — but that has a 100-queries-per-day free limit.

Will this trip Google's bot detection? Occasionally, especially if you reuse the same Chrome profile that's been making lots of automated searches. The fix is the same as for any scraper: slow down, vary timing, or use a fresh profile.

Can Automa or Browserflow do this? Yes — both have similar text-input + scrape patterns. The selectors and the press_key Enter pattern are portable. The main difference is this template uses BNOD's $('Step Name').items grammar; in Automa you'd reference the previous block by index.

Blocks used

  • manual_trigger
  • navigate
  • input
  • press_key
  • wait_for
  • scrape_list
  • export_data

Works on

  • https://www.google.com/*
Install in BNOD

Free. No signup required.

Related templates