Start your trial

Google Search Scraper

A free, open-source Google Search scraper for Python. Get structured SERP data through a real Chrome browser and your NodeMaven residential proxy

Real Chrome via Patchright
SERP API-style JSON
NodeMaven proxies built in
Cost per page in every run

How the Google search scraper works

Four steps run for every proxy exit. The run summary and per-step timings show each one

New session and warm-up

01

The scraper opens a sticky proxy session and a fresh browser profile. Chrome then visits a few ordinary pages and stays on each for 20 to 45 seconds. A fresh warm-up uses about 60 MB, so the first query takes a few minutes. Later queries on the same exit take seconds

Search

02

Each query opens Google's results page directly. This is faster than typing in the search box and skips autocomplete traffic

Check before parsing

03

Every page is classified first. A captcha or a refused page is reported as one. It is never parsed as an empty result

Keep or replace

04

An exit Google serves is reused for the next queries. A refused exit is dropped, and the query is retried on a new one. If exits keep getting refused, the run stops instead of spending more traffic

How to start scraping Google search results

Three steps from install to your first JSON file. The exact commands are in the README on GitHub

Install

Install the Python package with NodeMaven support, then add the Chromium browser it runs on. It takes two short commands

Connect NodeMaven

Add your NodeMaven login and password to your environment. The scraper reads them and manages proxy sessions for you

Run your first search

Put your keywords in a text file and start a search. You get one JSON record for every Google results page

Google search scraper features

Everything runs on your machine, through NodeMaven proxies. Every page shows what it cost and whether Google served it

Honest failures
CAPTCHAs and refused pages are labeled in each record. A failed query is still saved, with the error attached. An empty result is never a hidden CAPTCHA or refusal
Cost counter
Each run ends with pages served, traffic used and the hosts that used it. Add --price-per-gb and the scraper prints the cost per 1,000 pages
NodeMaven built in
NodeMaven residential proxies connect with one flag: --nodemaven. The session id is handled for you, and credentials come from the environment
Real result links
Google wraps result links in its own redirects. The scraper resolves them in the background while the browser moves to the next query. You get the real URLs
Parallel workers
--workers N runs N browsers on N exits from one query list. All workers share one pool of copied cookies
Traffic relay
A local relay counts bytes per host. It also stops a large model download that Chrome makes on every fresh profile

Transparent costs per Google search

Cost per search

Benchmarks from the README for version 0.0.6. Multiply the traffic by your NodeMaven price per GB to get the cost of 1,000 searches

Cost per search
0.8 MB
traffic per search
9 s
per search, per instance
~0.8 GB
per 1,000 searches
~60 MB
per fresh warm-up

Cookie copies

New exits start from the cookies of an exit Google already serves. A copy costs a few MB instead of a full warm-up. It waits 40 to 60 seconds before its first search

Cookie copies
10
copied exits by default
180 min
cookie lifetime
40-60 s
start delay
Few MB
per copy

Long runs

Served exits stay in use for hundreds of queries. Regular browser restarts keep memory flat over long holds

Long runs
300
queries per exit
50
pages between restarts
1
retry on a browser error
N
parallel workers

Why scrape Google with a real browser

Google often expects a browser that runs JavaScript. A fresh browser on a fresh proxy exit can be refused quickly. That changes how a Google scraper has to work

The plain HTTP approach

A script sends raw requests and parses whatever HTML comes back. Google often expects JavaScript, so responses are unreliable. A refused page can be parsed as an empty result. You cannot tell "no results" from "refused"

The Google Search Scraper approach

Each search runs in real Chrome on a sticky proxy session that was warmed up first. Every page is classified before parsing. Served pages become JSON records. Refused pages come back labeled, and the exit is replaced

Use cases for a self-hosted Google scraper

Live Google results for SEO teams, AI builders and developers who already use NodeMaven

SEO monitoring

SEO monitoring

Track positions for your own keywords and watch how results change. Run keyword and competitor research on live Google results

Recommended for:
AI agents and LLM apps

AI agents and LLM apps

Give Claude, Cursor and other agents live Google search through the MCP server. Each call returns structured results, not raw HTML

Recommended for:
SERP API replacement

SERP API replacement

Already on NodeMaven? Run your own SERP API on localhost and point existing code at /search.json. You pay for proxy traffic, not per search

Recommended for:
Not sure which mode fits your project?

Try the scraper on a 300 MB traffic cap

Try the scraper on a 300 MB traffic cap

Frequently asked questions

It is NodeMaven’s free, open-source Google search scraper for Python. It collects Google SERP results in a real Chrome browser through NodeMaven residential proxies. Results come back as JSON. The package is published on PyPI and GitHub as google-browser-scraper, under the MIT license

The code is free. The searches are not. Every search runs through NodeMaven residential proxies, and proxy traffic is paid. In version 0.0.6, 1,000 searches used about 0.8 GB of residential traffic

A paid SERP API runs on its own servers and charges per search. This tool runs on your machine through NodeMaven residential proxies. You pay for traffic, and every run shows the cost per page. The HTTP API uses a familiar SERP API format

Install the scraper with the [nodemaven] extra, set NODEMAVEN_LOGIN and NODEMAVEN_PASSWORD, and add --nodemaven to your command. The session id is handled for you. Choose the exit country with --country

A new exit is warmed up first. The browser visits ordinary pages and stays on each for 20 to 45 seconds. Later searches on the same exit take seconds. The scraper is not frozen

The page is labeled captcha in page_verdict. It is never returned as an empty result. The exit is dropped and the query is retried on a new one.

Yes. The mcp command starts an MCP server with one tool, google_search(query, pages). Claude, Cursor and other MCP clients can call it.

Organic results, ads, related questions, related searches, pagination and search metadata. Knowledge panels, shopping and images are not parsed.

Yes. A ready image is published to GitHub Container Registry with every release. Run doctor inside it first to check the setup.

It depends on your use and where you run it. You are responsible for using the tool within Google’s terms and local law

Learn more about Google SERP scraping

This site uses cookies to enhance your experience. By continuing, you agree to our use of cookies.