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.
- serp scraping
- residential proxies
- python

Table of contents
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 type | Outcome on Google | Verdict |
|---|---|---|
| Datacenter | CAPTCHA within a handful of requests | Unusable |
| ISP | Works, but limited IP diversity | Small volumes only |
| Rotating residential | Works at volume with pacing | The right answer |
| Mobile | Very tolerant, expensive | Niche |
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.
| Parameter | Controls | Example |
|---|---|---|
q | The query | q=proxy+provider |
gl | Country of search | gl=de |
hl | Interface language | hl=de |
num | Results per page | num=20 |
start | Pagination offset | start=20 |
uule | Encoded precise location | city-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.
- 1Send the request through a rotating residential endpoint with headers that match the locale.
- 2Detect the response type before parsing — results, consent page, or CAPTCHA.
- 3Back off on anything that is not results, with increasing delay.
- 4Parse organic results, ads, People Also Ask and related searches separately.
- 5Validate the parse: a zero-result page for a common query means the layout changed, not that the query has no results.
- 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.
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.
The sizing guide has the full calculation, including how to convert a target's tolerated per-IP rate into the concurrency you need.
Legal and ethical notes
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.
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 PlansKeep reading
How to Choose the Best Proxies for Web Scraping
Which proxy type to use, how to size your pool, how rotation and geo-targeting work, and the response-quality checks that catch silent failures.
GuidesHow to Avoid Getting Blocked When Web Scraping
The six layers a modern anti-bot system checks, in the order it checks them — and what to change at each one to stay unblocked.
GuidesWhat Is Web Scraping?
What web scraping is, the pipeline behind it, where it is used, what it costs, and why proxies stop being optional the moment you scale.
