Google SERP Scraper — AI Overview, PAA & Rank Tracking avatar

Google SERP Scraper — AI Overview, PAA & Rank Tracking

Pricing

Pay per event + usage

Go to Apify Store
Google SERP Scraper — AI Overview, PAA & Rank Tracking

Google SERP Scraper — AI Overview, PAA & Rank Tracking

Scrape Google SERPs: organic results, ads, AI Overview with sources, People also ask, local pack, AI Mode, News & Images, plus rank tracking.

Pricing

Pay per event + usage

Rating

0.0

(0)

Developer

CheapAPI

CheapAPI

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Scrape complete Google search results pages as clean JSON — organic results, ads, AI Overview with every cited source, People also ask, local pack, featured snippet, knowledge graph and related searches — plus Google AI Mode, Google News, Google Images and built-in rank tracking for your domains. No proxies, no Google account, no setup.

Why this Actor

  • Speed: standard processing (the default, no add-on) usually delivers results in 1–5 minutes; choose Instant under Processing speed for results in seconds at +$0.0018 per page.
  • $1.50 per 1,000 result pages ($1.20 on Gold and above) with every SERP feature in the same row — no extra fee for the AI Overview shown on the page, People also ask, local pack, rank tracking or flat result rows.
  • Google AI Mode answers for $2.50 per 1,000 ($1.80 on Gold and above): the full answer text, Markdown and all cited sources, with your domain's citation position.
  • 32 fields per results page, 22 fields per organic result (position, absolute position, URL, displayed URL, sitelinks, rating, date …).
  • 249 countries, 91 languages, city-level or GPS-level location, desktop or mobile, any Google domain.
  • Built to finish runs: busy or network errors are retried automatically (up to 4 attempts with increasing waits); searches rejected before processing are free, searches Google answers with nothing cost only a small no-results fee, and every problem is listed with the reason in RUN_SUMMARY; your maximum charge per run is checked before anything is requested, and the run stops cleanly at the limit.

Compared with alternatives

Typical run: 1,000 keywords × 1 results page (about 10,000 organic results). Prices are the Actor fees per listing (Free plan / Gold plan).

Option1,000 keywords × 1 pageAI Overview on the pageGoogle AI ModePeople also askLocal packBuilt-in rank tracking
Most-used Store Actor for Google Search (~193k users)$4.50 / $1.80add-on, +$3.00 / +$1.00 per 1,000 captured✓✓not listednot listed
Cheapest per-page Actor (~12k users)$0.50 / $0.50✗✗✗✗✗
Per-result budget Actor (~2,300 users)≈ $3.00 / ≈ $1.30 (≈ 10 results per page)✗✗✗✗✗
Per-query budget Actor (~1,300 users)$2.00 / $2.00 (first 10 results per query included)✗✗✗✗✗
This Actor$1.50 / $1.20✓ included✓ ($2.50 / $1.80 per 1,000)✓✓✓

Prices from public Apify Store listings, checked September 2026 (start fees of $0.0003–$0.002 per run left out). ✗ = not mentioned in the listing. Apify platform usage is billed separately by Apify for this Actor too (see Pricing); the table compares Actor fees only.

Per plan, 1,000 result pages (most-used Actor vs. this Actor). Apify lets us set Free, Bronze, Silver and Gold prices; Platinum and Diamond pay our Gold price.

Apify planMost-used ActorThis ActorDifference
Free$4.50$1.5067% cheaper
Bronze$2.50$1.5040% cheaper
Silver$1.95$1.5023% cheaper
Gold$1.80$1.2033% cheaper
Platinum$1.50$1.2020% cheaper
Diamond$1.20$1.20same price

Plainly: on Silver we are 23% cheaper, not more; on Gold and above our page price matches the most-used Actor's Diamond price, so a Diamond customer pays the same per page (their AI Overview add-on, $0.50 per 1,000 on Diamond, is included here).

Honest take: if you only need position, title, URL and snippet of organic results, the cheapest per-page Actor costs about a third of our price, and a per-result Actor is similar on Gold. You pay $1.50 here for the full page in one row — AI Overview with cited sources, People also ask, local pack, ads, featured snippet, knowledge graph — plus rank tracking of your domains and optional Google AI Mode, at no add-on fee for the AI Overview Google shows on the page.

Not included

  • AI answers from other engines (ChatGPT, Perplexity, Gemini, Claude) — this Actor covers Google only (AI Overview and AI Mode). For cross-engine AI answers and brand citations use our AI Search Visibility Tracker.
  • Full Google Maps place data (opening hours, all reviews, photos) beyond the local pack — use our Google Maps Scraper Plus.
  • Search volume, keyword difficulty and keyword ideas — use our Keyword Research Tool.
  • Content of the ranking pages, contact/lead enrichment, Google Shopping product pages and screenshots of the results page — not collected; the Actor returns what Google shows on the results page.

One row, one price

In one results-page rowExtra cost
Up to ~10 organic results with 22 fields eachincluded in $1.50 / 1,000 pages
AI Overview (text, Markdown, cited sources) when it is part of the pageincluded
People also ask (questions; the answer text when Google shows it in the page)included
Local pack (name, phone, website, rating, reviews, Google Maps link)included
Ads, featured snippet, knowledge graph, top stories, videos, related searchesincluded
Rank tracking for your domains (position, page, URL, AI Overview citation, snippet, ads, local pack)included
One flat row per organic/paid result for spreadsheetsincluded
Google AI Mode answer with all sources (separate search type)$2.50 / 1,000 answers

So checking 1,000 keywords for rankings, AI Overview citations, People also ask and the local pack costs $1.50 + $0.002 start on the Free plan — one page, one price.

What data you get

Every dataset row has a stable id and a rowType: serpPage (one Google results page), aiModeAnswer (Google AI Mode), or — when Also output one row per result is on — organicResult, paidResult, newsResult, imageResult or citation.

Results page (rowType: "serpPage")

FieldTypeExample
idstring"482afcf38b538266347d" — stable hash of row type, search context, page (position and URL for result rows) and capture time; use it to de-duplicate appended exports
searchTermstring"pizza"
searchTypestring"organic" (or aiMode, news, images)
pageinteger1
country / languagestring"GB" / "en"
locationstring or null"London,England,United Kingdom"
devicestring"desktop"
googleDomainstring"google.com"
searchUrlstring"https://www.google.com/search?q=pizza&hl=en&gl=GB&ie=UTF-8&uule=…" (the page Google was asked for)
totalResultsEstimateinteger1210000000
serpFeaturesarray of strings["local_pack", "organic", "people_also_ask", "knowledge_graph"]
organicResultsarray of objectsposition, absolutePosition, title, url, domain, displayedUrl, websiteName, description, preSnippet, extendedSnippet, highlighted, date, rating, price, sitelinks, images, faq, isFeaturedSnippet, isImage, isVideo, isAmp, relatedResults
paidResultsarray of objectsposition, title, url, domain, description, sitelinks, price, rating
aiOverviewobject or nulltext, markdown, citations (position, title, url, domain, source, snippet), loadedAsynchronously
peopleAlsoAskarray of objectsquestion, answer, sourceUrl, sourceDomain, answerIsAiGenerated, citations, revealedByQuestion
localPackarray of objectsname, phone, website, rating, reviewsCount, isPaid, googleMapsUrl
featuredSnippetobject or nulltitle, text, url, domain, table, images
knowledgeGraphobject or nulltitle, subtitle, description, details
topStories, videos, images, shopping, answerBoxarrays / objectwhen Google shows them
relatedSearches, peopleAlsoSearch, refinementChipsarray of strings["Pizza near me", "Pizza near London"]
spellingCorrectionobject or nullGoogle's "Did you mean"
otherFeaturesarray of objectsevery other SERP element Google shows
rankTrackingarray of objectsdomain, found, position, absolutePosition, page, url, title, resultsFromDomain, citedInAiOverview, aiOverviewCitationPosition, inFeaturedSnippet, inPaidResults, inLocalPack
scrapedAtstring (ISO date)"2026-09-28T06:19:15.000Z"

AI Mode answer (rowType: "aiModeAnswer"): the context fields above plus answerText, answerMarkdown, citations, otherElements and rankTracking (whether and where your domain is cited).

News / Images rows: newsResults (title, url, domain, source, snippet, published, date, imageUrl) or imageResults (title, alt, source, pageUrl, imageUrl, thumbnailUrl, domain), plus resultsCount, pagesCovered and rankTracking.

Flat result rows (free, optional): id, rowType, searchTerm, page, position, absolutePosition, title, url, domain, displayedUrl, description, date, isTrackedDomain, country, language, scrapedAt.

How to use

  1. Open the Actor in Apify Console and enter your search terms, one per line (Google operators such as site: work too).
  2. Pick a country and language.
  3. Set Result pages per search term (1 page ≈ 10 organic results).
  4. Optional: under Search type, rank tracking & output, add your domains to Track rankings of these domains, or switch to Google AI Mode, News or Images.
  5. Press Start, then open the Result pages, Rank tracking or One row per result view and export as JSON, CSV, Excel or HTML.

Ready-to-paste input (rank tracking across 3 pages, stopping once your domain is found):

{
"searchTerms": ["running shoes", "trail running shoes", "marathon shoes"],
"country": "GB",
"language": "en",
"maxPagesPerQuery": 3,
"trackDomains": ["nike.com", "runnersneed.com"],
"stopWhenFound": true,
"outputResultRows": true
}

Google AI Mode visibility check:

{ "searchTerms": ["best crm for small business"], "searchType": "aiMode", "trackDomains": ["hubspot.com"] }

API: curl (waits for the run and returns the dataset items)

curl -X POST "https://api.apify.com/v2/acts/cheapapi~google-serp-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchTerms":["best running shoes"],"country":"US","language":"en","maxPagesPerQuery":1}'

API: JavaScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('cheapapi/google-serp-scraper').call({
searchTerms: ['best running shoes'],
country: 'US',
language: 'en',
trackDomains: ['runnersworld.com'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const page of items) {
console.log(page.searchTerm, page.rankTracking?.[0]?.position, page.aiOverview?.citations?.length ?? 0);
}

API: Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("cheapapi/google-serp-scraper").call(run_input={
"searchTerms": ["best running shoes"],
"country": "US",
"language": "en",
"trackDomains": ["runnersworld.com"],
})
for page in client.dataset(run["defaultDatasetId"]).iterate_items():
for result in page.get("organicResults", []):
print(result["position"], result["url"])

Use cases

  • Rank tracking: schedule daily or weekly runs for your keywords and domains and follow position, page and the ranking URL over time.
  • AI search visibility (GEO): see whether your domain is cited in Google's AI Overview and AI Mode answers, and at which citation position.
  • Content research: collect People also ask questions, related searches and featured snippets to plan articles and FAQs.
  • Local SEO: check the local pack for a city or GPS point, with ratings, review counts and phone numbers of the businesses shown.
  • Competitor and ads monitoring: see who ranks and who advertises (paidResults) on your commercial keywords, per country and device.
  • LLM and RAG pipelines: feed fresh Google results, AI answers and cited sources to your AI agents.

Advanced options

Everything is optional — the defaults work well.

OptionDefaultMeaning
Search type (searchType)organicorganic (Google Search), aiMode, news or images
Track rankings of these domains (trackDomains)noneDomains or URL prefixes (nike.com, example.com/blog, *.example.org) to locate on every page
Also output one row per result (outputResultRows)falseAdds flat organicResult / paidResult / newsResult / imageResult / citation rows (free)
City or region (location)noneCity,Region,Country, e.g. Austin,Texas,United States. Overrides Country
Coordinates (coordinates)nonelat,lng or lat,lng,radius-m in decimal degrees, e.g. 40.7580,-73.9855 or 51.5074,-0.1278,1000 (radius 200–199999 m, default 200). Overrides City and Country
Google domain (googleDomain)google.comWithout https:// or www, e.g. google.co.uk, google.de, google.com.br; results are localized by Country/City either way
Device (device)desktopdesktop or mobile (News is always desktop)
Operating system (operatingSystem)autowindows, macos (desktop) or android, ios (mobile)
Screen width (screenWidth)0 = automatic240–9999 px; automatic is 1920 on desktop, 360 on mobile
Screen height (screenHeight)0 = automatic240–9999 px; automatic is 1080 on desktop, 640–812 on mobile
Pixel ratio (pixelRatio)0 = automatic0.5–3; automatic is 1 on desktop, 3 on mobile
Always load the AI Overview (loadAiOverview)falseWaits for AI Overviews Google loads after the page (add-on price per page)
Expand the full AI Overview (expandAiOverview)falseCaptures the complete AI Overview text and all sources (free)
Expand "People also ask" (peopleAlsoAskDepth)01–4 = click questions this many levels deep to reveal more questions; each extra revealed question is billed (answers are often not included, see Limitations)
Capture pixel positions (pixelPositions)falseAdds x/y/width/height of each result (add-on price per page)
Group indented results (groupRelatedResults)trueKeeps indented results from the same site under their main result
Results per search term (resultsPerQuery)0 = use result pagesExact number of results, up to 700 (organic/news billed per started 10, images per started 100)
Google search URLs (googleUrls)noneFull Google URLs with any filters instead of search terms (not for AI Mode)
Extra Google URL parameters (extraUrlParameters)nonee.g. &tbs=qdr:w (past week) or &filter=0
Remove URL parameters from result links (removeUrlParameters)noneUp to 10 parameter names, e.g. srsltid
Stop paging when a tracked domain is found (stopWhenFound)falseStops requesting further pages once a tracked domain appears — you pay only for delivered pages
Only return results matching (onlyResultsMatching)noneOnly SERP elements containing this domain/URL (wildcards * allowed)
Match mode (matchMode)anyany element containing the domain, or all = only elements where all links match
Match only in these result types (matchOnlyInTypes)all typese.g. organic, paid, featured_snippet, local_pack, ai_overview
Ignore these result types when matching (matchIgnoreTypes)noneSame type names as above
Processing speed (processingSpeed)autoauto / standard (usually 1–5 min, no add-on), fast (about 1 min, +$0.0008 per page; News uses Instant), instant (seconds, +$0.0018 per page)
Maximum wait (maxWaitMinutes)601–600 minutes; searches not finished in time are reported and charged the no-results fee (they were already processed)

Output example

Example output: one results-page row from a test run with this input — {"searchTerms": ["pizza"], "country": "GB", "language": "en", "location": "London,England,United Kingdom", "trackDomains": ["bbcgoodfood.com"], "outputResultRows": true}. To keep it short, organicResults shows only result 4 of 10 (the tracked domain), other arrays are cut to one or two items and long texts end with …. Fields that were empty on this page are left out here but are always present in the data: paidResults, topStories, videos, images, shopping, peopleAlsoSearch, refinementChips ([]) and aiOverview, featuredSnippet, answerBox, spellingCorrection (null).

{
"id": "482afcf38b538266347d",
"rowType": "serpPage",
"searchTerm": "pizza",
"searchType": "organic",
"country": "GB",
"language": "en",
"location": "London,England,United Kingdom",
"device": "desktop",
"googleDomain": "google.com",
"searchUrl": "https://www.google.com/search?q=pizza&hl=en&gl=GB&ie=UTF-8&uule=w+CAIQIFISCXXeIa8LoNhHEZkq1d1aOpZS",
"totalResultsEstimate": 1210000000,
"serpFeatures": ["find_results_on", "local_pack", "organic", "people_also_ask", "related_searches", "google_reviews", "knowledge_graph"],
"scrapedAt": "2026-09-28T06:19:15.000Z",
"page": 1,
"organicResults": [
{
"position": 4,
"absolutePosition": 9,
"title": "30 best pizza restaurants in London 2026",
"url": "https://www.bbcgoodfood.com/travel/the-best-pizza-in-london",
"domain": "www.bbcgoodfood.com",
"displayedUrl": "https://www.bbcgoodfood.com › Travel",
"websiteName": "Good Food",
"description": "12 Apr 2026 — Best for a bargain · 1. Vincenzo's · 2. Ria's · 3. Dough Hands · 4. Voodoo Ray's · … Read more",
"preSnippet": "04/12/2026 00:00:00",
"extendedSnippet": null,
"highlighted": ["1. Vincenzo's"],
"date": "2026-04-12T00:00:00.000Z",
"rating": null,
"price": null,
"sitelinks": [{ "title": "Read more", "url": "https://www.bbcgoodfood.com/travel/the-best-pizza-in-london#:~:text=Best%20for%20a%20bargain…", "description": null }],
"images": [],
"faq": null,
"isFeaturedSnippet": false,
"isImage": false,
"isVideo": false,
"isAmp": false,
"relatedResults": []
}
],
"peopleAlsoAsk": [
{ "question": "Which is the best pizza in the UK?", "revealedByQuestion": null, "answer": null, "answerTitle": null, "sourceTitle": null, "sourceUrl": null, "sourceDomain": null, "answerIsAiGenerated": true, "citations": [] }
],
"localPack": [
{ "position": 2, "name": "Pizza Pilgrims Carnaby", "description": "11 Kingly St …", "phone": "020 7287 2200", "website": "https://www.pizzapilgrims.co.uk/pizzerias/carnaby/?utm_source=google&utm_medium=local&utm_campaign=gbplisting", "domain": "www.pizzapilgrims.co.uk", "bookingUrl": null, "rating": 4.8, "reviewsCount": 16000, "isPaid": false, "googleMapsUrl": "https://maps.google.com/?cid=13464038642211587617" }
],
"knowledgeGraph": {
"title": "Pizza",
"subtitle": "Dish",
"description": "Pizza is an Italian dish typically consisting of a flat base of leavened wheat-based dough topped with tomato, cheese, and other ingredients …",
"details": [{ "type": "knowledge_graph_description_item", "text": "Pizza is an Italian dish …", "links": [{ "type": "link_element", "title": "Wikipedia", "url": "https://en.wikipedia.org/wiki/Pizza", "domain": "en.wikipedia.org" }] }]
},
"relatedSearches": ["Pizza near me", "Pizza Hut", "Pizza near London", "Pizza near me takeaway"],
"otherFeatures": [
{ "type": "find_results_on", "items": [{ "type": "find_results_on_element", "title": "Pizza Takeaway and Delivery in London", "domain": "deliveroo.co.uk", "url": "https://deliveroo.co.uk/cuisines/pizza-takeaway/london", "source": "deliveroo" }] }
],
"rankTracking": [
{ "domain": "bbcgoodfood.com", "found": true, "position": 4, "absolutePosition": 9, "page": 1, "url": "https://www.bbcgoodfood.com/travel/the-best-pizza-in-london", "title": "30 best pizza restaurants in London 2026", "resultsFromDomain": 1, "citedInAiOverview": false, "aiOverviewCitationPosition": null, "inFeaturedSnippet": false, "inPaidResults": false, "inLocalPack": false }
]
}

Example output: the matching flat result row (from Also output one row per result):

{
"id": "f10e9670737c47856a8b",
"rowType": "organicResult",
"searchTerm": "pizza",
"searchType": "organic",
"country": "GB",
"language": "en",
"location": "London,England,United Kingdom",
"device": "desktop",
"googleDomain": "google.com",
"page": 1,
"position": 4,
"absolutePosition": 9,
"title": "30 best pizza restaurants in London 2026",
"url": "https://www.bbcgoodfood.com/travel/the-best-pizza-in-london",
"domain": "www.bbcgoodfood.com",
"displayedUrl": "https://www.bbcgoodfood.com › Travel",
"description": "12 Apr 2026 — Best for a bargain · 1. Vincenzo's · 2. Ria's · 3. Dough Hands · 4. Voodoo Ray's · … Read more",
"date": "2026-04-12T00:00:00.000Z",
"isTrackedDomain": true,
"scrapedAt": "2026-09-28T06:19:15.000Z"
}

The key-value store record RUN_SUMMARY lists searches requested, completed, without results, failed or skipped by your spending limit, pages and rows delivered, AI Overviews and tracked domains found, and the reason for every problem.

Pricing

Apify Free plan: Apify does not pay developers for usage on its Free plan, so on the Free plan this Actor can be used for up to $0.25 of results per calendar month — enough to try it on a small input. When the allowance is used up, the run ends with a clear message (not an error). Any paid Apify plan removes the limit; prices are the same.

Pay per event — you pay for delivered pages, plus a small no-results fee for searches that were processed but gave nothing to deliver (see below). Searches rejected before processing (for example invalid input) are free. Your Apify plan's price is applied automatically.

Apify platform usage is billed separately by Apify (at the default 256 MB a small run typically uses about $0.001–$0.005); the prices below are the Actor's fees.

EventFreeBronzeSilverGold, Platinum, Diamond
Run start (once, only if at least one page is delivered)$0.002$0.002$0.001$0.0006
Search results page (Google Search page, News page of 10, or Images page of 100)$0.0015$0.0015$0.0015$0.0012
Results page with search operators (site:, intitle:, inurl:, filetype: …)$0.0045$0.0045$0.0045$0.0045
Google AI Mode answer (full answer + all sources)$0.0025$0.0025$0.0025$0.0018
AI Overview loading (per page, only with "Always load the AI Overview")$0.0009$0.0009$0.0009$0.0008
Pixel positions (per page, only with "Capture pixel positions")$0.0009$0.0009$0.0009$0.0009
Extra "People also ask" question (only with expansion on)$0.0003$0.0003$0.0003$0.0003
Fast processing add-on (per page unit, only if you choose Fast)$0.0008$0.0008$0.0008$0.0008
Instant processing add-on (per page unit, only if you choose Instant)$0.0018$0.0018$0.0018$0.0018
Search without results (per page unit, only when a processed search gives nothing to deliver)$0.001$0.001$0.001$0.001

The AI Overview that is part of the page, rank tracking, flat result rows and the full AI Overview expansion are free. Automatic speed uses standard processing (the Fast queue is used only when you choose it). For Google News, Fast is served and charged as Instant.

Search without results: every search is paid for as soon as it is processed, even when Google shows nothing. So a search that returns no results (or no AI Mode answer), and a search that did not finish within "Maximum wait" or whose request got no answer, costs $0.001 per page unit instead of the page price — for the requested pages when it never came back, one page otherwise. A chosen speed add-on applies to the same units. It is listed per search in RUN_SUMMARY (searchesChargedWithoutResults).

"People also ask" expansion: each expansion click is paid even when it reveals no new question, so a results page that shows the box is charged at least one extra question per expansion level (e.g. level 2 → at least 2 × $0.0003), and one per question when more are revealed.

Worked examples

  • 1,000 keywords × 1 page: 1,000 × $0.0015 + $0.002 = $1.50 on Free or Bronze; 1,000 × $0.0012 + $0.0006 = $1.20 on Gold.
  • Rank tracking, 100 keywords × 3 pages: at most 300 pages = $0.45 + $0.002 start (Free). With "Stop paging when a tracked domain is found", keywords where you rank on page 1 cost only one page.
  • 500 AI Mode answers: 500 × $0.0025 = $1.25 + $0.002 on Free; $0.90 + $0.0006 on Gold.
  • 1,000 pages with "Always load the AI Overview": $1.50 + $0.90 = $2.40 on Free; $1.20 + $0.80 = $2.00 on Gold.
  • 200 keywords, 12 of them rare terms with no Google results: 188 × $0.0015 + 12 × $0.001 + $0.002 = $0.296 on Free.

Page units (for the Fast/Instant add-ons and the no-results fee): a normal page is 1 unit, a page with search operators 5 units, an AI Mode answer 2 units, and "AI Overview loading" or "pixel positions" add 1 unit each per page (×5 with search operators).

Set a maximum charge per run in the run options: the Actor only requests the searches your limit can pay for in the worst case (all requested pages, or the no-results fee) and never charges above the limit.

Integrations

  • Scheduling: use Apify Schedules to run your keyword list daily or weekly for rank and AI Overview monitoring.
  • Google Sheets, Excel, CSV: export any view with one click, or send results to a sheet with the Google Sheets integration.
  • Make, Zapier, n8n: start runs and pass results to your workflows with the Apify apps.
  • Webhooks: get notified when a run finishes and fetch the dataset automatically.
  • API and MCP: use the REST API, the JavaScript or Python clients, or connect AI agents through Apify's MCP server.

FAQ

Is there a limit on the Apify Free plan? Yes: up to $0.25 of this Actor's results per calendar month, enough to try it. Apify pays developers nothing for Free-plan usage while our data costs are real, so this keeps the Actor sustainable. Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month. Any paid Apify plan has no limit.

Is it legal to scrape Google search results? This Actor collects publicly visible search results. You are responsible for using the data in line with applicable laws and Google's terms. If you are unsure, ask a lawyer.

How fresh is the data? Every search is run live on Google at the time of your run. scrapedAt shows when the page was collected.

Does every search have an AI Overview? No — Google decides when to show one, mostly for informational questions. When it does, you get the full text and cited sources. Turn on "Always load the AI Overview" to also capture those Google loads a moment after the page.

Why did I get fewer results than I asked for? Google often shows fewer than 10 organic results on a page, stops offering pages for narrow searches, or returns nothing for rare terms. Your spending limit or "Stop paging when a tracked domain is found" can also end a search early. You pay for delivered pages; a search that returned nothing costs the no-results fee ($0.001 per page unit), and RUN_SUMMARY lists every such search.

How is the position counted? position is the organic rank (1 = first organic result). absolutePosition counts every SERP element (ads, local pack, AI Overview …) from the top of the page.

How do I monitor rankings over time? Schedule the Actor with your keywords and trackDomains. Each run stores positions with a timestamp; the Rank tracking view and the flat result rows are easy to append to a spreadsheet or database, and the id field lets you de-duplicate rows if an export is appended twice.

Why was I charged for a search without results? The search was already run on Google (and paid for) before we could see it was empty — for example a very rare term, a site: search on a small site, or a search that did not finish within "Maximum wait". Instead of the page price you pay the no-results fee: $0.001 per page unit (a site: search counts 5 units, an AI Mode answer 2), plus the Fast/Instant add-on if you chose one. Searches rejected before processing are free.

Why was I charged for "People also ask" questions that did not appear? With expansion on, each expansion click is paid even when Google reveals no new question, so a page that shows the box is charged at least one question per expansion level. Pages without the box are not charged for expansion.

Why was my Fast Google News run charged as Instant? Google News is served faster and cheaper by Instant processing than by the Fast queue, so Fast is replaced by Instant for News (a warning is shown in the log).

How do I control what a run costs? Set a maximum charge per run. The Actor plans the searches that fit, skips the rest (reported as searchesSkippedByLimit) and never charges above the limit.

Can I get results for a specific city? Yes — use "City or region" (e.g. Chicago,Illinois,United States) or exact GPS "Coordinates".

Which export formats are available? JSON, JSONL, CSV, Excel, XML and HTML from the Console or API, with three ready views: result pages, rank tracking and one row per result.

Where do I get support? Open an issue on the Actor's Issues tab in Apify Console and describe what you need.

Limitations

  • Results reflect Google at the moment of collection. Google personalizes and tests results constantly, so small differences from your own browser are normal.
  • Google shows about 10 organic results per page, sometimes fewer. Depth is limited to 700 results per search term (Google Search, News and Images).
  • AI Mode returns one answer per search term (no result pages) and cannot use Google search URLs. News is always collected as desktop.
  • Embedded images inside AI answers are not included (the text, links and all cited sources are).
  • With Standard speed, runs at busy times can take longer than 5 minutes; searches not finished within "Maximum wait" are reported in RUN_SUMMARY and charged the no-results fee. If the platform moves a run to another server, searches already sent are collected, never sent twice.
  • Some fields (ratings, dates) are null when Google does not show them. People also ask questions are always collected, but Google now loads most answers as AI-generated text only after a click, so answer is often null (answerIsAiGenerated: true) even with expansion on — in our September 2026 test runs every answer was null. Expansion reveals extra questions, not answers.

Privacy

Search results can contain names, phone numbers and websites of businesses and public figures that Google shows publicly. The Actor does not log in anywhere and does not collect private data. If you process personal data from the results, you are responsible for doing so lawfully (for example under GDPR or CCPA).