Google Search Results Scraper
Pricing
$19.99/month + usage
Google Search Results Scraper
🔎 Google Search Results Scraper (google-search-results-scraper) captures live SERP data—organic, ads, featured snippets, PAA, local pack & knowledge panels. ⚙️ Geo/lang targeting, pagination, proxies. Export CSV/JSON. Ideal for SEO, PPC, content & competitor research. 🚀
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
ScrapeLabs
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Google Search Results Scraper
The Google Search Results Scraper is a production-ready Google SERP scraper that collects live search results into structured JSON for analysis and export. It solves the pain of manual SERP checks by turning queries into a consistent dataset of organic results, paid ads, shopping product cards, related queries, and People Also Ask — ideal for marketers, developers, data analysts, and researchers. With robust proxy handling and advanced filters, this Google search results extractor scales from quick checks to bulk Google SERP scraping for SEO, PPC, and research workflows.
What data / output can you get?
Below are the core fields this Google search scraping tool pushes to the dataset. Each item represents one SERP state for a query and page.
| Data type | Description | Example value |
|---|---|---|
| searchQuery.term | Full query sent to Google (with applied filters) | "javascript intitle:"guide"" |
| searchQuery.countryCode | Country code used (gl) | "US" |
| searchQuery.languageCode | Interface language (hl) | "en" |
| url | Final SERP URL | "https://www.google.com/search?q=javascript+guide&gl=us&hl=en" |
| resultsTotal | Parsed total results (if present on page) | 132000000 |
| organicResults | Organic listings with title, url, snippet, position, siteLinks | [{"title":"MDN Web Docs — JavaScript", "url":"https://developer.mozilla.org/...", "position":1, ...}] |
| paidResults | Google Ads detected with title, url, position | [{"title":"Learn JS Fast", "url":"https://example.com", "position":1, ...}] |
| paidProducts | Shopping/product cards with title and prices | [{"title":"JavaScript book", "displayedUrl":"store.example.com", "prices":["$19.99"]}] |
| peopleAlsoAsk | PAA questions with optional links | [{"question":"What is JavaScript used for?", "url":"https://example.com", ...}] |
| relatedQueries | Related search suggestions | [{"title":"learn javascript", "url":"https://www.google.com/search?q=learn+javascript&hl=en&gl=us"}] |
| aiOverview | AI Overview text and references (if enabled and available) | {"text":"JavaScript is a programming language...", "references":[{"title":"MDN", "url":"..."}]} |
| suggestedResults | Suggested organic items derived from related queries | [{"title":"learn javascript", "url":"https://www.google.com/search?q=learn+javascript", "position":1}] |
| customData | Echo of add-on settings and enrichment limits | {"perplexitySearch":{"enablePerplexity":false,...},"chatGptSearch":{"enableChatGpt":false},...} |
| htmlSnapshotUrl | Key to saved HTML in key-value store (if enabled) | "javascript_20260403_101530_p1.html" |
| html | Full HTML concatenated for saved pages (if enabled) | "......" |
Notes:
- Exports are available from the Apify dataset as JSON and can be converted to CSV or Excel.
- Bonus fields: suggestedResults, htmlSnapshotUrl, and html (when enabled) support debugging and downstream parsing for a Google search results parser workflow.
Key features
-
🔐 Adaptive proxy resilience (Google SERP → Residential) Always uses Apify proxies to maximize success. Starts with a Google SERP proxy and automatically falls back to residential proxies with up to 3 retries when blocks are detected — then sticks to residential for the remainder of the run.
-
📦 Bulk query input Paste multiple queries or full Google Search URLs — one per line — to power bulk Google SERP scraping with consistent output.
-
🎯 Advanced search filters Apply forceExactMatch, site or relatedToSite, wordsInTitle/wordsInText/wordsInUrl, quickDateRange, beforeDate/afterDate (absolute or relative), and fileTypes for precise control over the SERP.
-
🌍 Location & language targeting Control countryCode, searchLanguage, languageCode, and locationUule (UULE parameter) for a local Google search results scraper use case.
-
📱 Mobile or desktop results Toggle mobileResults to fetch the mobile or desktop version of Google’s SERP.
-
🤖 AI add-ons Enable aiMode with serpApiKey to fetch an AI Overview, and configure Perplexity and ChatGPT add-ons (settings echoed to output under customData).
-
🖼️ Result icons (optional) Include icon image data for results when includeIcons is enabled.
-
💾 HTML capture for debugging Save HTML to the dataset (html) and/or to key-value store (htmlSnapshotUrl) for post-processing, reproducibility, and building a Google search results parser pipeline.
-
📊 Structured JSON output Output matches a standard Google search results JSON layout — ready for analytics, data warehousing, and workflows like Google search results to CSV.
How to use Google Search Results Scraper - step by step
- Create or log in to your Apify account.
- Open the actor “Google Search Results Scraper” in the Apify Console.
- In the Input tab, paste your search queries or full Google search URLs — one per line — into queries.
- (Optional) Set limits with resultsPerPage and maxPagesPerQuery. Adjust Location and Language (countryCode, searchLanguage, languageCode) or add a locationUule for local targeting.
- (Optional) Expand Advanced Search Filters to set forceExactMatch, site/relatedToSite, wordsInTitle/wordsInText/wordsInUrl, date filters, and fileTypes.
- (Optional) Turn on aiMode and provide serpApiKey to fetch an AI Overview. Configure Perplexity/ChatGPT add-ons as needed.
- (Optional) Toggle mobileResults, includeUnfilteredResults, includeIcons, saveHtml, and saveHtmlToKeyValueStore based on your debugging and output needs.
- (Recommended) Keep the default Proxy configuration (GOOGLE_SERP). The actor will automatically fall back to RESIDENTIAL on blocks.
- Click Start. Monitor the Log for progress and any proxy fallback messages.
- In the Output tab, download your dataset. Export as JSON directly or convert to CSV/Excel.
Pro Tip: Combine filters like forceExactMatch + fileTypes + quickDateRange to create highly targeted datasets for SEO audits and content research using this best Google SERP scraper approach.
Use cases
| Use case name | Description |
|---|---|
| SEO rank tracking & audits | Aggregate organic listings and snippets per keyword to benchmark visibility and track movements over time. |
| PPC ad intelligence | Collect paidResults to analyze Google Ads presence, messaging, and landing pages for competitor insights. |
| Content & keyword research | Extract organicResults, relatedQueries, and peopleAlsoAsk to discover topics, questions, and SERP competitors. |
| Shopping & pricing scans | Use paidProducts to capture product titles and prices for trend tracking and merchandising inputs. |
| Local SERP monitoring | Apply countryCode, languageCode, and locationUule to observe location-specific SERP layouts and results. |
| Bulk Google SERP scraping | Run large lists of queries with limits and filters, then export Google search results to CSV/JSON for analysis. |
| Data pipelines (JSON) | Produce standardized Google search results JSON for ingestion by dashboards, ETL, or analysis notebooks. |
Why choose Google Search Results Scraper?
This tool focuses on accuracy, resilience, and structured output — a reliable Google SERP scraper for production use.
- 🎯 Precision filtering: Combine exact matches, site scoping, keyword-in-title/text/URL, and flexible date ranges.
- 🌍 Geo & language control: Dial in country, interface/search languages, and exact local UULE settings.
- ⚙️ Scale-ready: Bulk input with controls for resultsPerPage and maxPagesPerQuery to manage cost and depth.
- 🤖 AI add-on support: Enable aiMode with serpApiKey to capture AI Overview; Perplexity/ChatGPT add-on flags recorded in output.
- 🔒 Robust proxy strategy: Starts on a Google SERP proxy and auto-switches to residential with retries if blocked.
- 💾 Developer-friendly JSON: Consistent Google search results JSON schema for parsing, analytics, and automation.
- 🧪 Debuggability: Optional HTML capture to dataset and key-value store for reproducibility and troubleshooting.
In short, it’s a Google search results extractor engineered for reliability and structured insights — not a brittle browser extension.
Is it legal / ethical to use Google Search Results Scraper?
Yes — when done responsibly. This actor collects data from publicly available Google Search result pages only. You are responsible for ensuring your use complies with Google’s Terms of Service and applicable regulations.
Guidelines:
- Scrape only publicly available SERP pages.
- Respect data protection laws (e.g., GDPR, CCPA) and avoid processing personal data without a lawful basis.
- Use reasonable limits and the built-in proxy strategy to avoid undue load.
- Consult your legal counsel for edge cases or jurisdiction-specific requirements.
Input parameters & output format
Example JSON input
{"queries": "javascript\npython\nsite:developer.mozilla.org javascript","resultsPerPage": 100,"maxPagesPerQuery": 1,"aiMode": "aiModeOff","serpApiKey": "","perplexitySearch": {"enablePerplexity": false,"searchRecency": "","returnImages": false,"returnRelatedQuestions": false},"chatGptSearch": {"enableChatGpt": false},"maximumLeadsEnrichmentRecords": 0,"leadsEnrichmentDepartments": [],"focusOnPaidAds": false,"countryCode": "us","searchLanguage": "","languageCode": "en","locationUule": null,"forceExactMatch": false,"site": null,"relatedToSite": null,"wordsInTitle": [],"wordsInText": [],"wordsInUrl": [],"quickDateRange": null,"beforeDate": null,"afterDate": null,"fileTypes": [],"mobileResults": false,"includeUnfilteredResults": false,"saveHtml": false,"saveHtmlToKeyValueStore": true,"includeIcons": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["GOOGLE_SERP"]}}
Input parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| queries | string | Yes | — | Search term(s) or full Google Search URLs, one per line. Keep within 32 words per query. |
| resultsPerPage | integer | No | 100 | Desired number of results per page (Google may return fewer). |
| maxPagesPerQuery | integer | No | 1 | Maximum number of pages to scrape per query (~10 organic results per page). |
| aiMode | string (enum) | No | aiModeOff | Add-on: Google AI Mode ($). Options: aiModeOff, aiModeWithSearchResults, aiModeOnly. |
| serpApiKey | string (secret, nullable) | No | null | When set and AI Mode is not off, fetches AI Overview via SerpApi. |
| perplexitySearch | object | No | {"enablePerplexity": false, "searchRecency":"", "returnImages": false, "returnRelatedQuestions": false} | Add-on: Perplexity AI search ($). Settings echoed to output under customData. |
| perplexitySearch.enablePerplexity | boolean | No | false | Fetch AI answer using Perplexity Sonar model. |
| perplexitySearch.searchRecency | string (enum, nullable) | No | "" | Time range for Perplexity: "", "day", "week", "month", "year". |
| perplexitySearch.returnImages | boolean | No | false | Include images in Perplexity response. |
| perplexitySearch.returnRelatedQuestions | boolean | No | false | Include related questions in Perplexity response. |
| chatGptSearch | object | No | {"enableChatGpt": false} | Add-on: ChatGPT Search ($). Settings echoed to output under customData. |
| chatGptSearch.enableChatGpt | boolean | No | false | Fetch AI answer using OpenAI search model. |
| maximumLeadsEnrichmentRecords | integer | No | 0 | Maximum leads to enrich per domain ($). |
| leadsEnrichmentDepartments | array | No | [] | Optional filter for departments (e.g., "sales", "marketing"). |
| focusOnPaidAds | boolean | No | false | Improve ads extraction with specialized proxy and retries ($). |
| countryCode | string (enum) | No | us | Country for Google domain and localization. |
| searchLanguage | string (enum, nullable) | No | "" | Restrict results to a specific content language (lr). |
| languageCode | string (enum) | No | en | Google interface language (hl). |
| locationUule | string (nullable) | No | null | Exact location UULE parameter for local SERPs. |
| forceExactMatch | boolean | No | false | Wraps queries in quotes to force exact match. |
| site | string (nullable) | No | null | Limit results to a specific site (site:). |
| relatedToSite | string (nullable) | No | null | Filter pages related to a site (related:). |
| wordsInTitle | array | No | [] | Apply intitle:"..." filters (multiple supported). |
| wordsInText | array | No | [] | Apply intext:"..." filters (multiple supported). |
| wordsInUrl | array | No | [] | Apply inurl:"..." filters (multiple supported). |
| quickDateRange | string (nullable) | No | null | Quick date range (qdr:), e.g., d10, w1, m3, y1. |
| beforeDate | string (datepicker) | No | null | Absolute (YYYY-MM-DD) or relative (e.g., "8 days"). |
| afterDate | string (datepicker) | No | null | Absolute (YYYY-MM-DD) or relative (e.g., "3 months"). |
| fileTypes | array (enum) | No | [] | filetype filters (pdf, csv, html, xlsx, docx, md, etc.). |
| mobileResults | boolean | No | false | Fetch mobile SERP when true; desktop otherwise. |
| includeUnfilteredResults | boolean | No | false | Include lower-quality results Google normally filters. |
| saveHtml | boolean | No | false | Save raw SERP HTML to dataset (html). |
| saveHtmlToKeyValueStore | boolean | No | true | Save HTML to key-value store and link via htmlSnapshotUrl. |
| includeIcons | boolean | No | false | Include icon image data (if found) for results. |
| proxyConfiguration | object | No | prefill GOOGLE_SERP | Proxy settings. Defaults to Apify GOOGLE_SERP; actor falls back to RESIDENTIAL on block. |
Example JSON output (one dataset item)
{"searchQuery": {"term": "javascript intitle:\"guide\"","url": "https://www.google.com/search?q=javascript+intitle%3A%22guide%22&gl=us&hl=en","device": "DESKTOP","page": 1,"type": "SEARCH","domain": "google.com","countryCode": "US","languageCode": "en","locationUule": null,"resultsPerPage": 10},"searchQueryTerm": "javascript intitle:\"guide\"","url": "https://www.google.com/search?q=javascript+intitle%3A%22guide%22&gl=us&hl=en","hasNextPage": false,"serpProviderCode": "O","resultsTotal": 132000000,"relatedQueries": [{"title": "learn javascript","url": "https://www.google.com/search?q=learn+javascript&hl=en&gl=us"}],"paidResults": [{"title": "Learn JS Fast","url": "https://example.com","displayedUrl": "example.com","description": "","emphasizedKeywords": ["javascript intitle:\"guide\""],"siteLinks": [],"productInfo": {},"type": "paid","position": 1}],"paidProducts": [{"title": "JavaScript Book: A Beginner’s Guide","displayedUrl": "store.example.com","prices": ["$19.99"]}],"aiOverview": null,"organicResults": [{"title": "JavaScript — MDN Web Docs","url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript","displayedUrl": "developer.mozilla.org/en-US/docs/Web/JavaScript","description": "JavaScript is a programming language...","emphasizedKeywords": ["javascript intitle:\"guide\""],"siteLinks": [],"productInfo": {},"type": "organic","position": 1}],"suggestedResults": [{"title": "learn javascript","url": "https://www.google.com/search?q=learn+javascript&hl=en&gl=us","type": "organic","position": 1}],"peopleAlsoAsk": [{"answer": null,"question": "What is JavaScript used for?","title": "What is JavaScript used for?","url": "https://example.com/article","date": null}],"customData": {"perplexitySearch": {"enablePerplexity": false,"searchRecency": null,"returnImages": false,"returnRelatedQuestions": false},"chatGptSearch": {"enableChatGpt": false},"maximumLeadsEnrichmentRecords": 0,"leadsEnrichmentDepartments": []},"htmlSnapshotUrl": null}
Notes:
- aiOverview appears only when aiMode is not off and serpApiKey is provided (then it contains {"text": "...", "references": [...]}).
- html and _htmlPayloads appear only when saveHtml/saveHtmlToKeyValueStore are enabled.
FAQ
Is there a free tier or trial?
You can run the actor on Apify and check the Pricing tab for your plan details. The scraper supports scalable runs, and you can control costs with resultsPerPage and maxPagesPerQuery.
Do I need to use a proxy?
No setup is needed — the actor initializes Apify’s Google SERP proxy by default. If Google blocks the request, it automatically falls back to a residential proxy with up to 3 retries and then continues on residential for the rest of the run.
Can it scrape People Also Ask?
Yes. The output includes peopleAlsoAsk with question, optional link, and metadata, making it a practical Google people also ask scraper for research.
Does it support local and language-targeted SERPs?
Yes. Use countryCode, languageCode, searchLanguage, and locationUule to collect localized results with this local Google search results scraper configuration.
Can I export Google search results to CSV or JSON?
Yes. Results are stored in the Apify dataset as structured JSON and can be downloaded or converted to CSV/Excel for analysis and reporting.
How do I get AI Overview in the output?
Set aiMode to a non-off value and provide serpApiKey. When available, the AI Overview text and references will be included in the aiOverview field.
Can I run bulk Google SERP scraping?
Yes. Provide multiple queries (or full Google Search URLs) — one per line — in queries. Control depth with resultsPerPage and maxPagesPerQuery.
What if I only want mobile or unfiltered results?
Enable mobileResults to fetch the mobile version and includeUnfilteredResults to include lower-quality items that Google normally filters out.
Closing CTA / Final thoughts
The Google Search Results Scraper is built for accurate, resilient collection of live SERPs into structured JSON. With robust proxy fallback, granular filters, and bulk input, it’s a dependable Google organic results scraper and Google search results JSON generator for SEO, PPC, and research teams. Developers can rely on a consistent schema for downstream parsing and automation. Start extracting smarter insights today — at scale and with confidence.
