Skip to content
Guides

How to Scrape Google Search Results

Scraping Google search results requires rotating residential proxies, careful request pacing and correct localisation parameters. Google detects datacenter IPs almost immediately and serves a CAPTCHA rather than results, so the proxy layer decides whether the project works at all. Everything else — parsing, pagination, scheduling — is comparatively easy.

seamless Team11 min readAugust 6, 2026
  • serp scraping
  • google
  • residential proxies
  • python
A wide fan of routing lines converging on a single tall gate structure with one line passing through lit

SERP data drives rank tracking, competitive research, ad monitoring and a good deal of market analysis. Google offers no general search API for this, so collection means scraping — against one of the better-defended targets on the web.

Why the proxy choice decides everything

Google maintains excellent intelligence on IP ranges. Requests from known cloud and hosting ASNs are treated as automated more or less on arrival, which is why a scraper that works perfectly on your laptop returns nothing but consent pages and CAPTCHAs the moment it runs on a server.

Proxy typeOutcome on GoogleVerdict
DatacenterCAPTCHA within a handful of requestsUnusable
ISPWorks, but limited IP diversitySmall volumes only
Rotating residentialWorks at volume with pacingThe right answer
MobileVery tolerant, expensiveNiche

Use rotating residential proxies with a fresh exit per request or per small batch. The proxy-for-scraping guide covers the wider selection logic; for Google the choice is effectively made for you. Mobile proxies will also work and tolerate more abuse, but at four times the cost per gigabyte they only pay for themselves if residential is genuinely failing.

Getting localisation right

Results differ by country, language and physical location, and a rank check against the wrong locale is worse than no data. The IP influences this, but the URL parameters control it.

ParameterControlsExample
qThe queryq=proxy+provider
glCountry of searchgl=de
hlInterface languagehl=de
numResults per pagenum=20
startPagination offsetstart=20
uuleEncoded precise locationcity-level targeting

Keep them consistent with the exit IP. A German IP with gl=us is contradictory, and while Google will answer, you have created data that does not correspond to what any real user sees. Match the proxy's geo-targeting to the parameters.

A working example

The mechanics are unremarkable — a session, a proxy, realistic headers, and generous jitter between requests.

Pacing is the whole trick. A scraper that sends five requests a second through one exit fails within a minute; one that sends a request every few seconds across a rotating pool runs indefinitely.

In Python, that is a requests session pointed at the proxy endpoint, a browser-realistic User-Agent and Accept-Language matching hl, a randomised delay of a few seconds between calls, and a retry that backs off rather than hammers. Parse with selectorlib or BeautifulSoup, and treat every selector as optional.

  1. 1Send the request through a rotating residential endpoint with headers that match the locale.
  2. 2Detect the response type before parsing — results, consent page, or CAPTCHA.
  3. 3Back off on anything that is not results, with increasing delay.
  4. 4Parse organic results, ads, People Also Ask and related searches separately.
  5. 5Validate the parse: a zero-result page for a common query means the layout changed, not that the query has no results.
  6. 6Store the raw HTML alongside the parsed data so you can re-parse after a layout change.

That last point saves entire collection runs. When Google shifts its markup — and it will — re-parsing stored HTML costs nothing, while re-collecting costs bandwidth and time you may not have.

Residential IPs that survive Google

Rotating residential proxies with country and city targeting, billed by the gigabyte with no expiry.

Residential proxies

Reading CAPTCHAs correctly

A CAPTCHA is feedback. It means the pattern you are producing looks automated — usually too many requests per exit, too little variation in timing, or headers that do not match the claimed browser. The correct response is to reduce rate and increase exit diversity.

Solving CAPTCHAs treats the symptom and keeps the pattern that produced them. Fixing the rate removes both.

The anti-blocking guide covers header consistency and TLS fingerprinting in more depth. For Google specifically, the highest-yield changes are a lower per-exit rate, randomised intervals, and consistent header sets per session.

Costs and sizing

A SERP page is roughly 200–400 KB of HTML. Ten thousand queries a day at 300 KB is about 3 GB daily, or 90 GB a month — meaningful, and worth measuring before committing. Requesting num=20 halves the page count for a two-page-deep tracker at almost no extra size, which is the single easiest saving available.

~300 KB
per SERP page
90 GB
10k queries/day for a month
3–10 s
sensible delay per exit

The sizing guide has the full calculation, including how to convert a target's tolerated per-IP rate into the concurrency you need.

SERP results are publicly visible and scraping them is broadly accepted practice, though it conflicts with Google's terms of service. The legal overview sets out the distinction between contract, anti-hacking law and data protection. Be careful with results that contain personal data, and keep request rates proportionate.

Frequently asked questions

Can you scrape Google search results?

Technically yes, with rotating residential proxies and careful pacing. It conflicts with Google's terms of service, so it is a contract question rather than a technical prohibition — see our guide on proxy legality.

What proxies do I need to scrape Google?

Rotating residential proxies. Google identifies datacenter and cloud ASNs and serves CAPTCHAs instead of results, so datacenter IPs are effectively unusable regardless of how carefully you pace requests.

How do I avoid CAPTCHAs when scraping Google?

Reduce requests per exit, randomise delays to a few seconds, keep headers consistent with the browser you claim to be, and rotate exits. A CAPTCHA is a rate signal — treat it as instruction to slow down rather than an obstacle to solve.

How much bandwidth does SERP scraping use?

Roughly 200–400 KB per results page. Ten thousand queries a day averages about 3 GB daily. Requesting 20 results per page instead of 10 halves the page count for deeper tracking at almost no additional size.

What do the gl and hl parameters do?

`gl` sets the country the search is performed from and `hl` sets the interface language. Both change results substantially, and both should be consistent with the proxy's location — otherwise you collect data no real user in that market would see.

Why did my Google scraper suddenly return no results?

Almost always a markup change rather than a block, especially if the requests still return HTTP 200. Store raw HTML alongside parsed output so you can re-parse after a layout shift, and alert on zero-result rates rather than only on errors.

SE
seamless Team
Proxy infrastructure

The seamless team runs residential, ISP and datacenter proxy infrastructure and writes these guides from day-to-day operational experience.

Ready to try seamless proxies?

Residential, ISP and datacenter proxies with no data expiry.

Browse Plans