Google Search Results Scraper avatar

Google Search Results Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Google Search Results Scraper

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

ScrapeLabs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 typeDescriptionExample value
searchQuery.termFull query sent to Google (with applied filters)"javascript intitle:"guide""
searchQuery.countryCodeCountry code used (gl)"US"
searchQuery.languageCodeInterface language (hl)"en"
urlFinal SERP URL"https://www.google.com/search?q=javascript+guide&gl=us&hl=en"
resultsTotalParsed total results (if present on page)132000000
organicResultsOrganic listings with title, url, snippet, position, siteLinks[{"title":"MDN Web Docs — JavaScript", "url":"https://developer.mozilla.org/...", "position":1, ...}]
paidResultsGoogle Ads detected with title, url, position[{"title":"Learn JS Fast", "url":"https://example.com", "position":1, ...}]
paidProductsShopping/product cards with title and prices[{"title":"JavaScript book", "displayedUrl":"store.example.com", "prices":["$19.99"]}]
peopleAlsoAskPAA questions with optional links[{"question":"What is JavaScript used for?", "url":"https://example.com", ...}]
relatedQueriesRelated search suggestions[{"title":"learn javascript", "url":"https://www.google.com/search?q=learn+javascript&hl=en&gl=us"}]
aiOverviewAI Overview text and references (if enabled and available){"text":"JavaScript is a programming language...", "references":[{"title":"MDN", "url":"..."}]}
suggestedResultsSuggested organic items derived from related queries[{"title":"learn javascript", "url":"https://www.google.com/search?q=learn+javascript", "position":1}]
customDataEcho of add-on settings and enrichment limits{"perplexitySearch":{"enablePerplexity":false,...},"chatGptSearch":{"enableChatGpt":false},...}
htmlSnapshotUrlKey to saved HTML in key-value store (if enabled)"javascript_20260403_101530_p1.html"
htmlFull 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

  1. Create or log in to your Apify account.
  2. Open the actor “Google Search Results Scraper” in the Apify Console.
  3. In the Input tab, paste your search queries or full Google search URLs — one per line — into queries.
  4. (Optional) Set limits with resultsPerPage and maxPagesPerQuery. Adjust Location and Language (countryCode, searchLanguage, languageCode) or add a locationUule for local targeting.
  5. (Optional) Expand Advanced Search Filters to set forceExactMatch, site/relatedToSite, wordsInTitle/wordsInText/wordsInUrl, date filters, and fileTypes.
  6. (Optional) Turn on aiMode and provide serpApiKey to fetch an AI Overview. Configure Perplexity/ChatGPT add-ons as needed.
  7. (Optional) Toggle mobileResults, includeUnfilteredResults, includeIcons, saveHtml, and saveHtmlToKeyValueStore based on your debugging and output needs.
  8. (Recommended) Keep the default Proxy configuration (GOOGLE_SERP). The actor will automatically fall back to RESIDENTIAL on blocks.
  9. Click Start. Monitor the Log for progress and any proxy fallback messages.
  10. 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 nameDescription
SEO rank tracking & auditsAggregate organic listings and snippets per keyword to benchmark visibility and track movements over time.
PPC ad intelligenceCollect paidResults to analyze Google Ads presence, messaging, and landing pages for competitor insights.
Content & keyword researchExtract organicResults, relatedQueries, and peopleAlsoAsk to discover topics, questions, and SERP competitors.
Shopping & pricing scansUse paidProducts to capture product titles and prices for trend tracking and merchandising inputs.
Local SERP monitoringApply countryCode, languageCode, and locationUule to observe location-specific SERP layouts and results.
Bulk Google SERP scrapingRun 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.

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

FieldTypeRequiredDefaultDescription
queriesstringYesSearch term(s) or full Google Search URLs, one per line. Keep within 32 words per query.
resultsPerPageintegerNo100Desired number of results per page (Google may return fewer).
maxPagesPerQueryintegerNo1Maximum number of pages to scrape per query (~10 organic results per page).
aiModestring (enum)NoaiModeOffAdd-on: Google AI Mode ($). Options: aiModeOff, aiModeWithSearchResults, aiModeOnly.
serpApiKeystring (secret, nullable)NonullWhen set and AI Mode is not off, fetches AI Overview via SerpApi.
perplexitySearchobjectNo{"enablePerplexity": false, "searchRecency":"", "returnImages": false, "returnRelatedQuestions": false}Add-on: Perplexity AI search ($). Settings echoed to output under customData.
perplexitySearch.enablePerplexitybooleanNofalseFetch AI answer using Perplexity Sonar model.
perplexitySearch.searchRecencystring (enum, nullable)No""Time range for Perplexity: "", "day", "week", "month", "year".
perplexitySearch.returnImagesbooleanNofalseInclude images in Perplexity response.
perplexitySearch.returnRelatedQuestionsbooleanNofalseInclude related questions in Perplexity response.
chatGptSearchobjectNo{"enableChatGpt": false}Add-on: ChatGPT Search ($). Settings echoed to output under customData.
chatGptSearch.enableChatGptbooleanNofalseFetch AI answer using OpenAI search model.
maximumLeadsEnrichmentRecordsintegerNo0Maximum leads to enrich per domain ($).
leadsEnrichmentDepartmentsarrayNo[]Optional filter for departments (e.g., "sales", "marketing").
focusOnPaidAdsbooleanNofalseImprove ads extraction with specialized proxy and retries ($).
countryCodestring (enum)NousCountry for Google domain and localization.
searchLanguagestring (enum, nullable)No""Restrict results to a specific content language (lr).
languageCodestring (enum)NoenGoogle interface language (hl).
locationUulestring (nullable)NonullExact location UULE parameter for local SERPs.
forceExactMatchbooleanNofalseWraps queries in quotes to force exact match.
sitestring (nullable)NonullLimit results to a specific site (site:).
relatedToSitestring (nullable)NonullFilter pages related to a site (related:).
wordsInTitlearrayNo[]Apply intitle:"..." filters (multiple supported).
wordsInTextarrayNo[]Apply intext:"..." filters (multiple supported).
wordsInUrlarrayNo[]Apply inurl:"..." filters (multiple supported).
quickDateRangestring (nullable)NonullQuick date range (qdr:), e.g., d10, w1, m3, y1.
beforeDatestring (datepicker)NonullAbsolute (YYYY-MM-DD) or relative (e.g., "8 days").
afterDatestring (datepicker)NonullAbsolute (YYYY-MM-DD) or relative (e.g., "3 months").
fileTypesarray (enum)No[]filetype filters (pdf, csv, html, xlsx, docx, md, etc.).
mobileResultsbooleanNofalseFetch mobile SERP when true; desktop otherwise.
includeUnfilteredResultsbooleanNofalseInclude lower-quality results Google normally filters.
saveHtmlbooleanNofalseSave raw SERP HTML to dataset (html).
saveHtmlToKeyValueStorebooleanNotrueSave HTML to key-value store and link via htmlSnapshotUrl.
includeIconsbooleanNofalseInclude icon image data (if found) for results.
proxyConfigurationobjectNoprefill GOOGLE_SERPProxy 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.