Google SERP Scraper — AI Mode, Shopping, Local | $2/1K pages
Pricing
from $2.00 / 1,000 serp pages
Google SERP Scraper — AI Mode, Shopping, Local | $2/1K pages
Scrape Google Search results (SERP) into clean JSON — organic results, People Also Ask, knowledge panel, related searches. Anchors on stable page structure, not fragile CSS classes, so it keeps working when Google changes its HTML. Every result ships a parse_confidence score.
Pricing
from $2.00 / 1,000 serp pages
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Share
Google SERP Scraper — Organic, AI Overview, AI Mode, Shopping, Local Pack, PAA & Sitelinks | from $2/1K | No API Key
For data engineers and analytics teams that want the full SERP page as a structured object — one push per query, every block included.
From $2 per 1,000 SERP pages returned. You get the full page — organic, ads, PAA, knowledge panel, top stories, inline videos, shopping/PLA cards, local pack (map 3-pack), AI Overview, AI Mode, sitelinks, and "people also search for" — in one JSON blob. No API key, no proxy purchase required.
Need per-result pricing? See our Google Search Scraper which charges per organic result at $1.50/1k.
Scrape Google Search results (SERP) into clean, structured JSON — organic results, ads, People Also Ask, knowledge panel, top stories, inline videos, shopping products, local pack businesses, AI Overview, AI Mode, related & "people also search for" suggestions. Built to keep working when Google changes its HTML, and honest about what it returns.
Most Google scrapers parse the page by CSS class name. Google rotates those class names every few weeks — when it does, those scrapers silently return empty or wrong data until someone notices. This one anchors on the stable structure of the results page instead (the #rso results container, <h3> headings, and data-* attributes Google's own code depends on), and ships a parse_confidence score with every result so you always know whether the data is trustworthy.
⚙️ Unofficial scraper of publicly available Google Search results. Not affiliated with or endorsed by Google.
What you can extract
- 🔎 Organic results — position, title, URL, displayed URL, snippet
- ❓ People Also Ask — the related questions block
- 📇 Knowledge panel — title, subtitle, description, and structured facts (born, party, etc.)
- 🔗 Related searches — the "searches related to…" suggestions
- 📰 Top Stories — the news pack: title, source, URL, and timestamp
- 🔁 People Also Search For — the suggestion chips (distinct from PAA questions)
- 🎬 Inline Videos — title, channel, and watch URL from the video pack
- 📢 Ads — parsed from the ad slots when Google serves them
- 🧠 AI Overview & Featured Snippet — extracted when Google serves them; reliably via
renderJs - 🗺️ Local Pack (map 3-pack) — business name, rating, review count, category, phone — lead-gen gold (render-gated)
- 🛍️ Shopping / PLA cards — product title, price, merchant, rating, review count (render-gated, commercial queries)
- 🤖 AI Mode — Google's 2026
udm=50dedicated AI answer page, fetched as a separate render (render-gated) - 🔗 Sitelinks — the deep-link grid under a brand result, attached to the top organic result
- 🌍 Geo & language control — target any country (
gl) and interface language (hl) - 🖥️ Desktop or mobile SERP layout
- ✅
parse_confidence+warningson every record — drift shows up loudly, never silently
Honest note on variant-gated blocks: Ads, AI Overview, and the Featured Snippet only appear when Google chooses to serve them for that query/region/session — not every fetch contains them. When present in the page they're parsed; when absent, the field is empty/
nulland the correspondinghas_*flag isfalse. That's expected, not a parse failure. AI Overview and Featured Snippet in particular are JavaScript-and-variant-gated and appear in a subset of static fetches. Need AI Overview reliably? Turn onrenderJs— see Browser-render mode below.
Browser-render mode (AI Overview, AI Mode, Shopping, Local Pack & Ads)
The default fetch is a fast, static HTTP request — great for organic, PAA, knowledge panel, top stories, videos and related searches, which Google ships in the initial HTML. The highest-value blocks — AI Overview, AI Mode, Shopping/PLA cards, Local Pack, the featured-snippet answer box, and ads-with-content — are injected by JavaScript after the page loads, or require a dedicated render path.
Set renderJs: true to render the SERP in a real browser. JavaScript executes, late blocks populate, and the same structural parser runs over the rendered HTML — so ai_overview, ai_mode, shopping, local_pack, featured_snippet, and ads come back filled when Google serves them.
- AI Overview — reliably extracted from Google's
m-x-contentmodule (validated: 4,000+ char responses on cloud). - AI Mode — fetched as a dedicated
udm=50Google AI answer page render (validated: 7,835+ char responses on cloud). - Shopping / PLA — product cards extracted on commercial queries (validated: 13 cards on a cloud run, e.g. "adidas Men's Galaxy 7 $60.00 Finish Line 4.6"). Auction- and geo-gated — present on commercial product queries from US-commercial exit IPs; empty on informational queries.
- Local Pack — the map 3-pack: business name, rating, reviews, category, phone. Prime lead-gen data.
- It's reliable. Render mode retries to land a clean residential IP and falls back to the static GOOGLE_SERP proxy if blocked — a render run never returns empty.
- It's slower. A browser render takes a few seconds per page vs. a sub-second static fetch.
- It costs one extra event. Each rendered page bills a
render-pagepremium event (you only pay it on pages you actually rendered). The static path never charges it. - Use the RESIDENTIAL proxy. Render mode needs a residential exit IP — switch the Proxy input to the
RESIDENTIALApify group (the defaultGOOGLE_SERPproxy is HTTP-only and can't carry a browser session).
Keep it off (the default) for high-volume organic/SERP harvesting where speed and cost matter; turn it on when you need AI Overview, AI Mode, Shopping, Local Pack, the featured snippet, or ads.
How to use it
- Click Try for free.
- Enter one or more search queries.
- (Optional) set country, language, number of pages, and which result types you want.
- Click Start and collect clean JSON from the dataset — or pull it via the Apify API, MCP, or any integration.
No code required. Runs on Apify's cloud with the purpose-built Google SERP proxy, so there's nothing to configure to get going.
Pricing
Pay-per-event, billed only for what actually comes back. COGS (proxy compute) is billed to the run owner via Apify — our cost to you is zero beyond these events.
| Event | Price / 1,000 | When charged |
|---|---|---|
serp-page ⭐ primary | $2.00 | Every SERP page returned |
render-page | $3.00 | Only when renderJs: true — per rendered page |
ai-overview | $5.00 | Only when an AI Overview is present in the result |
ai-mode | $8.00 | Only when AI Mode (udm=50) answer is returned |
featured-snippet | $3.00 | Only when a featured snippet is extracted |
shopping-result | $2.00 | Per shopping/PLA product card returned |
local-result | $3.00 | Per local pack business returned |
You only pay premium events when the high-value block is actually there. No AI Overview on the page → no AI-Overview charge. Static fetch → no render charge. No shopping unit on an informational query → no shopping charge.
Try it free first — Apify's free tier covers ~25 results so you can evaluate output quality before you commit.
How we compare
| Scraper | Price / 1k pages | Output model | Parser approach | AI Overview | AI Mode | Shopping/Local | Trust signal |
|---|---|---|---|---|---|---|---|
| This actor | from $2 | Full-page JSON (organic, ads, PAA, KP, stories, videos, shopping, local pack, AI Mode) | Structural (#rso, <h3>, data-*) — survives class churn | Yes — static when served; reliable via renderJs | Yes — udm=50 dedicated render | Both extracted (render-gated) | parse_confidence + warnings on every record |
| apify/google-search-results-scraper | ~$1.80/page | Full page | CSS-class based | Yes (owns it) | No | Partial | None |
| scraperlink Google SERP | ~$0.50/page | Per-result | CSS-class based | No | No | No | None |
| apidojo Google Search | ~3.2★ rated | Partial | CSS-class based | No | No | No | None |
| DataForSEO | $6/1k retail | Per-result JSON | API | No | No | No | None |
With browser-render mode we match the AI-Overview incumbent on the block it's known for — and we add AI Mode, Shopping, and Local Pack on top, all as an on-demand toggle (pay the render event only on pages you render), backed by a parser that survives Google's class churn.
We don't try to win the race to the bottom on price. We win on data you can trust and breadth of blocks: a parser that anchors on Google's own structural hooks, a parse_confidence score on every record, and high-value blocks — AI Mode, shopping/PLA, local pack, top stories, inline videos, sitelinks, PASF — that thinner scrapers drop.
Try it free first — Apify's free tier includes platform credits covering ~25 results, plenty to evaluate output quality before you commit.
Input
| Field | Type | Default | Description |
|---|---|---|---|
queries | string[] | — (required) | One or more Google search queries. |
countryCode | string | us | Two-letter country for geo-targeting (gl). |
languageCode | string | en | Two-letter interface language (hl). |
resultsPerPage | integer | 10 | Results per page. Google fixed this at ~10 in late 2025. |
maxPages | integer | 1 | Pages per query (paginated via start offset). |
resultTypes | string[] | organic, ads, PAA, KP, related, featured snippet, top stories, PASF, videos | Which blocks to extract (organic always included). |
device | enum | desktop | desktop or mobile layout. |
renderJs | boolean | false | Render the SERP in a real browser to capture AI Overview, AI Mode, Shopping/PLA, Local Pack, featured snippet, and ads that static fetches miss. Slower, costs a render-page event. Use the RESIDENTIAL proxy when on. |
proxyConfiguration | proxy | Apify GOOGLE_SERP | Google-grade proxy, billed to the run owner. Switch to RESIDENTIAL when renderJs is on. |
Output
One record per query/page:
{"query": "best running shoes 2026","page": 1,"organic": [{"position": 1,"title": "The 15 Best Running Shoes of 2026","url": "https://www.runnersworld.com/gear/best-running-shoes/","displayed_url": "https://www.runnersworld.com","snippet": "For new runners we recommend a shoe like the Brooks Ghost…","sitelinks": [{ "title": "Trail Running", "url": "https://www.runnersworld.com/gear/trail-running-shoes/" }]}],"people_also_ask": [{ "question": "What are the best running shoes for beginners?" }],"knowledge_panel": null,"related_searches": [{ "query": "best running shoes for 5k" }],"ai_overview": "","ai_mode": "","featured_snippet": null,"shopping": [{"title": "adidas Men's Galaxy 7","price": "$60.00","merchant": "Finish Line","rating": 4.6,"reviews": 312,"type": "shopping_result"}],"local_pack": [{"name": "Fleet Feet","rating": 4.8,"reviews": 512,"category": "Sports store","phone": "+1 555-123-4567","type": "local_result"}],"top_stories": [{"title": "These are the best running shoes for 2026, tested by our experts","url": "https://www.runnersworld.com/uk/gear/shoes/a776671/best-running-shoes/","source": "Runner's World","time": "1 week ago","type": "top_story"}],"people_also_search_for": [{ "query": "Best running shoes 2026 men", "type": "people_also_search_for" }],"inline_videos": [{"title": "Best Running Shoes of 2026 (So Far)","url": "https://www.youtube.com/watch?v=MCU4czOgvmQ","channel": "Believe in the Run","type": "inline_video"}],"parse_confidence": 1.0,"warnings": [],"organic_count": 9,"ads_count": 0,"paa_count": 4,"related_count": 8,"top_stories_count": 3,"pasf_count": 8,"videos_count": 2,"shopping_count": 8,"local_count": 3,"has_knowledge_panel": false,"has_ai_overview": false,"has_ai_mode": false,"has_featured_snippet": false}
Why this scraper doesn't break
Google ships HTML with two kinds of hooks: stable structural ones (the #rso results container, the <h3> title heading, data-sncf snippet bodies, data-attrid knowledge-panel facts) that its own JavaScript relies on, and cosmetic CSS class names (.yuRUbf, .tF2Cxc, …) that it rotates constantly for obfuscation. Scrapers that key off class names break on every rotation. This actor keys off the structural hooks — and when something does shift, the parse_confidence score drops and a warnings entry is emitted, so you find out from the data, not from a customer complaint.
FAQ
Is it legal to scrape Google Search? This actor only collects publicly available search results, logged-out, the same data any visitor sees. Courts have generally treated scraping public web data favorably (e.g. hiQ v. LinkedIn). It is not legal advice — review Google's terms and your own use case. Don't scrape personal data unlawfully.
How is this different from other Google SERP scrapers?
It anchors on stable page structure instead of rotating CSS classes, and it returns a parse_confidence score on every result so you can trust the output. It also extracts blocks most competitors skip entirely: AI Mode (udm=50), Shopping/PLA cards, Local Pack businesses, and Sitelinks — most scrapers give you no signal at all and break silently.
Does it return AI Overviews / AI Mode?
Yes to both. AI Overview is extracted from Google's m-x-content module — reliably via renderJs: true (validated: 4,000+ char responses on cloud). AI Mode is Google's 2026 dedicated AI answer (udm=50), fetched as a separate render — also reliable via renderJs: true (validated: 7,835+ char responses on cloud). On a static fetch Google renders AI Overview for only a subset of queries/regions/sessions; turn on renderJs when you need it reliably. When absent, the fields are empty and you're not charged for the premium event.
Does it extract Shopping / PLA cards?
Yes — product title, price, merchant, rating, and review count, charged at $2/1K products. Shopping units are auction- and geo-gated: they appear on commercial product queries from US-commercial exit IPs. They don't appear on informational queries. Requires renderJs: true.
Does it extract Local Pack results?
Yes — the map 3-pack: business name, rating, review count, category, phone. Charged at $3/1K leads, only when local results are present in the render. Requires renderJs: true.
Why is ads_count sometimes 0 on commercial queries?
Google frequently serves no ads to programmatic requests (ads are JavaScript-injected and auction-gated). When ads are present in the page, they're parsed; when they're absent, that's expected, not a failure.
Can I get one result per row?
Each record is one SERP page with an organic array. To flatten to one row per organic result, use the dataset's "unwind" option or a simple post-process step.
Can I use it via API / MCP / integrations? Yes — it's a standard Apify actor, callable via the Apify API, scheduler, webhooks, MCP server, and every Apify integration.
parse_confidence trust score
Every result ships a parse_confidence score (0.0–1.0) and a warnings list. When Google changes its HTML, the score drops loudly instead of silently returning garbage.
Use with AI agents (MCP)
This actor is available as an MCP tool. Connect it to Claude, GPT-4o, or any MCP-compatible agent to query Google SERP programmatically — including AI Mode answers, Shopping results, and Local Pack leads.
Config: https://mcp.apify.com/?tools=bovi/google-serp-structural
Support
Found a SERP layout we don't parse well, or a parse_confidence that dropped? Open an issue on the actor — drift reports are exactly what keep this parser ahead.
Integrations
Built for data engineers and analytics teams ingesting full SERP pages (organic, ads, PAA, knowledge panels, shopping, local pack, AI answers) into pipelines — the JSON/dataset output drops into the tools you already run, no glue code:
- n8n / Make / Zapier — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: n8n, Make, Zapier.
- Webhooks — fire your own endpoint the moment a run finishes, to push results straight into your pipeline (docs).
- MCP server — expose this actor as a tool to Claude, Cursor, or any MCP client so an AI agent can pull this data mid-conversation — including Shopping cards, Local Pack leads, and AI Mode answers (guide).
- API & SDKs — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.
See all Apify integrations.