Google search result data — who ranks where, what snippets look like, which ads appear — is foundational for SEO analysis, lead generation, and market research. Google processes 8.5 billion searches per day and doesn’t offer a public API for organic results. So how do you get the data?
What SERP Data Looks Like
A single Google results page contains multiple data types:
- Organic results — title, URL, meta description, position
- Featured snippets — the answer box at position zero
- People Also Ask — expandable question blocks
- Ads — paid listings at the top and bottom
- Knowledge panel — entity information on the right
- Local pack — map + 3 local business listings
- Related searches — bottom of page suggestions
Why Google Is Particularly Hard
Google has some of the best bot detection in the world — they’ve been fighting scrapers for 20+ years:
- Rate limiting kicks in after as few as 10 requests from one IP
- CAPTCHAs appear immediately for headless browsers
- Results are personalised — location, language, and login state all affect what you see
- HTML structure changes frequently, breaking CSS selectors
The Manual Approach
Step 1 — Basic request (works for ~5 queries)
import requests
from bs4 import BeautifulSoup
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."}
params = {"q": "web scraping python", "hl": "en", "gl": "us", "num": "10"}
resp = requests.get("https://www.google.com/search", headers=headers, params=params)
soup = BeautifulSoup(resp.text, "html.parser")
for result in soup.select("div.g"):
title = result.select_one("h3")
link = result.select_one("a")
desc = result.select_one("div[data-sncf]")
if title and link:
print(title.text, link["href"])
Step 2 — Handle the CAPTCHA wall
After a handful of requests Google returns a CAPTCHA page. Solving this at scale requires:
- A CAPTCHA solving service (2Captcha, CapMonster) — adds latency and cost
- Rotating residential proxies per request
- Browser automation to simulate real user behaviour (scrolling, mouse movement)
- Geolocation control — requests must originate from the target country for accurate local results
Step 3 — Maintain the HTML parser
Google changes their SERP HTML structure regularly. A scraper that worked last month often breaks silently — you get data, but it’s wrong. You need monitoring and frequent maintenance.
The Reliable Way — Scrapios Google SERP Scraper
Instead of building and maintaining all of that infrastructure, submit a single API request:
curl -X POST https://api.scrapios.com/api/v1/ext/jobs
-H "X-API-Key: scr_live_YOUR_KEY"
-H "Content-Type: application/json"
-d '{
"url": "https://www.google.com/search?q=web+scraping+api&gl=us&hl=en",
"catalog_scraper_id": 2,
"catalog_version_id": 5
}'
The response gives you every SERP element as structured JSON:
{
"organic": [
{ "position": 1, "title": "...", "url": "...", "description": "..." },
{ "position": 2, "title": "...", "url": "...", "description": "..." }
],
"featured_snippet": { "title": "...", "body": "...", "source_url": "..." },
"people_also_ask": [
{ "question": "What is the best web scraping API?", "answer": "..." }
],
"ads": [
{ "position": "top_1", "title": "...", "url": "...", "description": "..." }
],
"related_searches": ["web scraping python", "web scraping tools", ...]
}
SEO Use Cases
- Rank tracking — monitor your domain’s position for target keywords daily
- Competitor analysis — see who ranks above you and what their snippets look like
- SERP feature monitoring — track when featured snippets, PAA boxes, and knowledge panels appear
- Ad intelligence — monitor competitor ad copy and landing pages
- Local SEO — check local pack rankings across different cities
Track Google rankings without the headache
Clean JSON. 500 free credits/month. Works for any country and language.