Google Search Results Scraper
/apify/google-search-scraperasync$0.0113 / resultScrape Google Search Engine Results Pages (SERPs). Select the country or language and extract organic and paid results, AI Mode, AI overviews, ads, queries, People Also Ask, prices, reviews, like a Google SERP API. Export data, run the scraper via API, schedule runs, or integrate with other tools. Runs as an Apify actor (20–120 s); results are dataset rows.
Charged per returned row plus the flat fee.
queriesstringrequiredUse regular search words or enter Google Search URLs. You can also apply [advanced Google search techniques](https://blog.apify.com/how-to-scrape-google-like-a-pro/), such as AI site:twitter.com or javascript OR python. You can also define selected search filters as separate fields below (in the Adv
maxPagesPerQueryintegerMaximum number of pages to scrape per search query. Each page contains approximately 10 results.
aiOverviewobjectGet the complete AI Overview whenever Google shows one for your query - handy when the short snippet isn't enough. May take slightly longer than a standard run, and works best on queries likely to trigger an AI Overview. Costs extra per captured AI Overview - see the Pricing tab for your rate. (default {"scrapeFullAiOverview":false})
aiModeSearchobjectSee how your brand appears in Google AI Mode, Google's dedicated AI search interface on google.com (distinct from the AI Overview snippets in regular results). Great for AEO and GEO tracking. Costs extra per result - see the Pricing tab for your rate. (default {"enableAiMode":false})
geminiSearchobjectGet an AI answer from Google Gemini (gemini.google.com), Google's standalone assistant, separate from Google Search.Costs extra per result - see the Pricing tab for your rate. (default {"enableGemini":false})
perplexitySearchobjectGet AI answers and citations from Perplexity's Sonar model.Costs extra per result - see the Pricing tab for your rate. (default {"enablePerplexity":false,"returnImages":false,"returnRelatedQuestions":false})
chatGptSearchobjectGet AI answers from OpenAI's search model. The output includes query fan-out under queryFanOut - the extra searches the model ran to answer you.Costs extra per result - see the Pricing tab for your rate. (default {"enableChatGpt":false})
copilotSearchobjectGet AI answers from Microsoft Copilot. (default {"enableCopilot":false})
maximumLeadsEnrichmentRecordsintegerMaximum number of lead records to scrape per domain found. Set to 0 (the default) to disable leads enrichment.⚠️ Some fields contain personal data, which is protected by GDPR in the European Union and by similar laws elsewhere. Only scrape personal data if you have a legitimate reason to do so; if y (default 0)
leadsEnrichmentDepartmentsarrayInclude only leads from specific departments, such as Sales, Marketing, or C-suite. Only applies when business leads enrichment (maximumLeadsEnrichmentRecords) is enabled. Note that some job titles may be miscategorized.
verifyLeadsEnrichmentEmailsbooleanCheck whether each lead's email is actually deliverable before you reach out. Adds an emailVerification object to every lead with the result and a quality score.Charged (decisive results): valid (ok), invalid, and disposable addresses.Not charged: catch-all, unknown, and error results.⚠️ Requires bu (default false)
linkProspectingobjectCharged events: search-page-scraped (base, per Google SERP page), website-content-scraped, lead-scraped (up to 5 contacts per domain, marketing and C-suite roles only), and one event per enabled AI engine query. See the Pricing tab for rates.⚠️ If business leads enrichment is also active, domains th
websiteContentScraperobjectGet the full page content of every organic result as websiteContent.text, plus websiteContent.markdown when the page converts cleanly (null otherwise). Uses the Website Content Crawler. Charged event: website-content-scraped, per successfully scraped page. See the Pricing tab for rates.⚠️ If the Lin (default {"enable":false})
focusOnPaidAdsbooleanTurn on to capture the Google Ads shown for each query. (default false)
countryCodestringSpecifies the country used for the search and the Google Search domain (e.g. google.es for Spain). By default, the Actor uses United States (google.com).
, af, al, dz, as, ad, ao, ai, …
searchLanguagestringRestricts search results to pages in a specific language. For example, choosing 'German' results in pages only in German. Passed to Google Search as the lr URL query parameter. Read more here. (default "")
, ar, bg, ca, cs, da, de, el, …
languageCodestringLanguage of the Google Search interface (menus, buttons, etc. - not the search results themselves). Passed to Google Search as the hl URL query parameter. It can still affect results on international queries when no search-language restriction (the lr parameter) is set. Read more here. (default "")
, af, sq, sm, ar, az, eu, be, …
locationUulestringThe code for the exact location for the Google search. It's passed to Google Search as the uule URL query parameter. You can use the UULE code generator. Learn more about emulating local search.
forceExactMatchbooleanIf checked, the scraper will search for the exact phrase in the query. This is done by wrapping the query in quotes. Note that this may return fewer results. Also note that if you're using operators such as OR or AND, the whole query will be wrapped in quotes, such as "Windows AND macOS". If you wan (default false)
sitestringLimits the search to a specific site, such as: site:example.com. Note that the site filter takes precedence over the relatedToSite filter. If both filters are set, the relatedToSite filter will be ignored and not added to the search queries.
relatedToSitestringFilters pages related to a specific site, such as: related:example.com. Note that the site filter takes precedence over the relatedToSite filter. If both filters are set, the relatedToSite filter will be ignored and not added to the search queries.
wordsInTitlearrayFilters pages with specific words in the title. The scraper uses the intitle: operator, even for multiple words (e.g. recipe site:allrecipes.com intitle:"easy apple" intitle:pie). There's also a allintitle: operator available, but it's problematic when combined with other search filters, so the scra (default [])
wordsInTextarrayFilters pages with specific words in the text. The scraper uses the intext: operator, even for multiple words (e.g. cartoon site:wikipedia.com intext:cat intext:mouse). There's also a allintext: operator available, but it's problematic when combined with other search filters, so the scraper avoids u (default [])
wordsInUrlarrayFilters pages with specific words in the URL. The scraper uses the inurl: operator, even for multiple words (e.g. recipe site:allrecipes.com inurl:apple inurl:pie). There's also a allinurl: operator available, but it's problematic when combined with other search filters, so the scraper avoids using (default [])
quickDateRangestringFilters results from a specific date range. d[number] specifies the number of past days (e.g. the past 10 days can be written as d10). The same applies to hours, weeks, months, and years: h[number], w[number], m[number], y[number]. Example for the past year: 'y1' or even 'y'. The value is passed to
beforeDatestringFilters results from before the specified date. Either absolute date (e.g. `2024-05-03`) or relative date from now into the past (e.g. `8 days`, `3 months`). Absolute time is always interpreted in the UTC timezone, not your local timezone - please convert accordingly. Supported relative date & time
afterDatestringFilters results from after the specified date. Either absolute date (e.g. `2024-05-03`) or relative date from now into the past (e.g. `8 days`, `3 months`). Absolute time is always interpreted in the UTC timezone, not your local timezone - please convert accordingly. Supported relative date & time u
fileTypesarrayFilters results of specific file types using the filetype: operator, such as filetype:pdf. You can select multiple file types as well. They will be combined with the OR operator, for example: filetype:doc OR filetype:txt. If you need to use a file type that is not in the list (such as a source code
mobileResultsbooleanIf checked, the scraper returns results from the mobile version of Google Search. Otherwise, desktop results are returned. (default false)
includeUnfilteredResultsbooleanIf checked, the lower-quality results that Google normally filters out are included. (default false)
saveHtmlbooleanIf checked, the HTML of the Google Search results pages is stored in the default dataset, under the html property. This is useful if you need to process the HTML, but it makes the dataset large. (default false)
saveHtmlToKeyValueStorebooleanIf checked, the HTML of the Google Search results pages is stored in the default key-value store, and links to the files are stored in the dataset under the htmlSnapshotUrl property. This is useful for debugging, since you can easily view the pages in the browser. Note that this feature may slow dow (default true)
includeIconsbooleanIf checked, all of the results (organicResults, paidResults, suggestedResults) will contain Base64-encoded icon image data if found. (default false)
| Field | Type | Required | Description |
|---|---|---|---|
| queries | string | yes | Use regular search words or enter Google Search URLs. You can also apply [advanced Google search techniques](https://blog.apify.com/how-to-scrape-google-like-a-pro/), such as AI site:twitter.com or javascript OR python. You can also define selected search filters as separate fields below (in the Adv |
| maxPagesPerQuery | integer | — | Maximum number of pages to scrape per search query. Each page contains approximately 10 results. |
| aiOverview | object | — | Get the complete AI Overview whenever Google shows one for your query - handy when the short snippet isn't enough. May take slightly longer than a standard run, and works best on queries likely to trigger an AI Overview. Costs extra per captured AI Overview - see the Pricing tab for your rate. (default {"scrapeFullAiOverview":false}) |
| aiModeSearch | object | — | See how your brand appears in Google AI Mode, Google's dedicated AI search interface on google.com (distinct from the AI Overview snippets in regular results). Great for AEO and GEO tracking. Costs extra per result - see the Pricing tab for your rate. (default {"enableAiMode":false}) |
| geminiSearch | object | — | Get an AI answer from Google Gemini (gemini.google.com), Google's standalone assistant, separate from Google Search.Costs extra per result - see the Pricing tab for your rate. (default {"enableGemini":false}) |
| perplexitySearch | object | — | Get AI answers and citations from Perplexity's Sonar model.Costs extra per result - see the Pricing tab for your rate. (default {"enablePerplexity":false,"returnImages":false,"returnRelatedQuestions":false}) |
| chatGptSearch | object | — | Get AI answers from OpenAI's search model. The output includes query fan-out under queryFanOut - the extra searches the model ran to answer you.Costs extra per result - see the Pricing tab for your rate. (default {"enableChatGpt":false}) |
| copilotSearch | object | — | Get AI answers from Microsoft Copilot. (default {"enableCopilot":false}) |
| maximumLeadsEnrichmentRecords | integer | — | Maximum number of lead records to scrape per domain found. Set to 0 (the default) to disable leads enrichment.⚠️ Some fields contain personal data, which is protected by GDPR in the European Union and by similar laws elsewhere. Only scrape personal data if you have a legitimate reason to do so; if y (default 0) |
| leadsEnrichmentDepartments | array | — | Include only leads from specific departments, such as Sales, Marketing, or C-suite. Only applies when business leads enrichment (maximumLeadsEnrichmentRecords) is enabled. Note that some job titles may be miscategorized. |
| verifyLeadsEnrichmentEmails | boolean | — | Check whether each lead's email is actually deliverable before you reach out. Adds an emailVerification object to every lead with the result and a quality score.Charged (decisive results): valid (ok), invalid, and disposable addresses.Not charged: catch-all, unknown, and error results.⚠️ Requires bu (default false) |
| linkProspecting | object | — | Charged events: search-page-scraped (base, per Google SERP page), website-content-scraped, lead-scraped (up to 5 contacts per domain, marketing and C-suite roles only), and one event per enabled AI engine query. See the Pricing tab for rates.⚠️ If business leads enrichment is also active, domains th |
| websiteContentScraper | object | — | Get the full page content of every organic result as websiteContent.text, plus websiteContent.markdown when the page converts cleanly (null otherwise). Uses the Website Content Crawler. Charged event: website-content-scraped, per successfully scraped page. See the Pricing tab for rates.⚠️ If the Lin (default {"enable":false}) |
| focusOnPaidAds | boolean | — | Turn on to capture the Google Ads shown for each query. (default false) |
| countryCode | string (, af, al, dz, as, ad, ao, ai, …) | — | Specifies the country used for the search and the Google Search domain (e.g. google.es for Spain). By default, the Actor uses United States (google.com). |
| searchLanguage | string (, ar, bg, ca, cs, da, de, el, …) | — | Restricts search results to pages in a specific language. For example, choosing 'German' results in pages only in German. Passed to Google Search as the lr URL query parameter. Read more here. (default "") |
| languageCode | string (, af, sq, sm, ar, az, eu, be, …) | — | Language of the Google Search interface (menus, buttons, etc. - not the search results themselves). Passed to Google Search as the hl URL query parameter. It can still affect results on international queries when no search-language restriction (the lr parameter) is set. Read more here. (default "") |
| locationUule | string | — | The code for the exact location for the Google search. It's passed to Google Search as the uule URL query parameter. You can use the UULE code generator. Learn more about emulating local search. |
| forceExactMatch | boolean | — | If checked, the scraper will search for the exact phrase in the query. This is done by wrapping the query in quotes. Note that this may return fewer results. Also note that if you're using operators such as OR or AND, the whole query will be wrapped in quotes, such as "Windows AND macOS". If you wan (default false) |
| site | string | — | Limits the search to a specific site, such as: site:example.com. Note that the site filter takes precedence over the relatedToSite filter. If both filters are set, the relatedToSite filter will be ignored and not added to the search queries. |
| relatedToSite | string | — | Filters pages related to a specific site, such as: related:example.com. Note that the site filter takes precedence over the relatedToSite filter. If both filters are set, the relatedToSite filter will be ignored and not added to the search queries. |
| wordsInTitle | array | — | Filters pages with specific words in the title. The scraper uses the intitle: operator, even for multiple words (e.g. recipe site:allrecipes.com intitle:"easy apple" intitle:pie). There's also a allintitle: operator available, but it's problematic when combined with other search filters, so the scra (default []) |
| wordsInText | array | — | Filters pages with specific words in the text. The scraper uses the intext: operator, even for multiple words (e.g. cartoon site:wikipedia.com intext:cat intext:mouse). There's also a allintext: operator available, but it's problematic when combined with other search filters, so the scraper avoids u (default []) |
| wordsInUrl | array | — | Filters pages with specific words in the URL. The scraper uses the inurl: operator, even for multiple words (e.g. recipe site:allrecipes.com inurl:apple inurl:pie). There's also a allinurl: operator available, but it's problematic when combined with other search filters, so the scraper avoids using (default []) |
| quickDateRange | string | — | Filters results from a specific date range. d[number] specifies the number of past days (e.g. the past 10 days can be written as d10). The same applies to hours, weeks, months, and years: h[number], w[number], m[number], y[number]. Example for the past year: 'y1' or even 'y'. The value is passed to |
| beforeDate | string | — | Filters results from before the specified date. Either absolute date (e.g. `2024-05-03`) or relative date from now into the past (e.g. `8 days`, `3 months`). Absolute time is always interpreted in the UTC timezone, not your local timezone - please convert accordingly. Supported relative date & time |
| afterDate | string | — | Filters results from after the specified date. Either absolute date (e.g. `2024-05-03`) or relative date from now into the past (e.g. `8 days`, `3 months`). Absolute time is always interpreted in the UTC timezone, not your local timezone - please convert accordingly. Supported relative date & time u |
| fileTypes | array | — | Filters results of specific file types using the filetype: operator, such as filetype:pdf. You can select multiple file types as well. They will be combined with the OR operator, for example: filetype:doc OR filetype:txt. If you need to use a file type that is not in the list (such as a source code |
| mobileResults | boolean | — | If checked, the scraper returns results from the mobile version of Google Search. Otherwise, desktop results are returned. (default false) |
| includeUnfilteredResults | boolean | — | If checked, the lower-quality results that Google normally filters out are included. (default false) |
| saveHtml | boolean | — | If checked, the HTML of the Google Search results pages is stored in the default dataset, under the html property. This is useful if you need to process the HTML, but it makes the dataset large. (default false) |
| saveHtmlToKeyValueStore | boolean | — | If checked, the HTML of the Google Search results pages is stored in the default key-value store, and links to the files are stored in the dataset under the htmlSnapshotUrl property. This is useful for debugging, since you can easily view the pages in the browser. Note that this feature may slow dow (default true) |
| includeIcons | boolean | — | If checked, all of the results (organicResults, paidResults, suggestedResults) will contain Base64-encoded icon image data if found. (default false) |
Run it
Or ask your agent: it will call inspect for this schema and run it over MCP.