Google SERP Scraper — AI Overview, PAA & Rank Tracking
Pricing
Pay per event + usage
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.
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).
| Option | 1,000 keywords × 1 page | AI Overview on the page | Google AI Mode | People also ask | Local pack | Built-in rank tracking |
|---|---|---|---|---|---|---|
| Most-used Store Actor for Google Search (~193k users) | $4.50 / $1.80 | add-on, +$3.00 / +$1.00 per 1,000 captured | ✓ | ✓ | not listed | not 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 plan | Most-used Actor | This Actor | Difference |
|---|---|---|---|
| Free | $4.50 | $1.50 | 67% cheaper |
| Bronze | $2.50 | $1.50 | 40% cheaper |
| Silver | $1.95 | $1.50 | 23% cheaper |
| Gold | $1.80 | $1.20 | 33% cheaper |
| Platinum | $1.50 | $1.20 | 20% cheaper |
| Diamond | $1.20 | $1.20 | same 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 row | Extra cost |
|---|---|
| Up to ~10 organic results with 22 fields each | included in $1.50 / 1,000 pages |
| AI Overview (text, Markdown, cited sources) when it is part of the page | included |
| 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 searches | included |
| Rank tracking for your domains (position, page, URL, AI Overview citation, snippet, ads, local pack) | included |
| One flat row per organic/paid result for spreadsheets | included |
| 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")
| Field | Type | Example |
|---|---|---|
id | string | "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 |
searchTerm | string | "pizza" |
searchType | string | "organic" (or aiMode, news, images) |
page | integer | 1 |
country / language | string | "GB" / "en" |
location | string or null | "London,England,United Kingdom" |
device | string | "desktop" |
googleDomain | string | "google.com" |
searchUrl | string | "https://www.google.com/search?q=pizza&hl=en&gl=GB&ie=UTF-8&uule=…" (the page Google was asked for) |
totalResultsEstimate | integer | 1210000000 |
serpFeatures | array of strings | ["local_pack", "organic", "people_also_ask", "knowledge_graph"] |
organicResults | array of objects | position, absolutePosition, title, url, domain, displayedUrl, websiteName, description, preSnippet, extendedSnippet, highlighted, date, rating, price, sitelinks, images, faq, isFeaturedSnippet, isImage, isVideo, isAmp, relatedResults |
paidResults | array of objects | position, title, url, domain, description, sitelinks, price, rating |
aiOverview | object or null | text, markdown, citations (position, title, url, domain, source, snippet), loadedAsynchronously |
peopleAlsoAsk | array of objects | question, answer, sourceUrl, sourceDomain, answerIsAiGenerated, citations, revealedByQuestion |
localPack | array of objects | name, phone, website, rating, reviewsCount, isPaid, googleMapsUrl |
featuredSnippet | object or null | title, text, url, domain, table, images |
knowledgeGraph | object or null | title, subtitle, description, details |
topStories, videos, images, shopping, answerBox | arrays / object | when Google shows them |
relatedSearches, peopleAlsoSearch, refinementChips | array of strings | ["Pizza near me", "Pizza near London"] |
spellingCorrection | object or null | Google's "Did you mean" |
otherFeatures | array of objects | every other SERP element Google shows |
rankTracking | array of objects | domain, found, position, absolutePosition, page, url, title, resultsFromDomain, citedInAiOverview, aiOverviewCitationPosition, inFeaturedSnippet, inPaidResults, inLocalPack |
scrapedAt | string (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
- Open the Actor in Apify Console and enter your search terms, one per line (Google operators such as
site:work too). - Pick a country and language.
- Set Result pages per search term (1 page ≈ 10 organic results).
- 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.
- 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 ApifyClientclient = 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,pageand 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.
| Option | Default | Meaning |
|---|---|---|
Search type (searchType) | organic | organic (Google Search), aiMode, news or images |
Track rankings of these domains (trackDomains) | none | Domains or URL prefixes (nike.com, example.com/blog, *.example.org) to locate on every page |
Also output one row per result (outputResultRows) | false | Adds flat organicResult / paidResult / newsResult / imageResult / citation rows (free) |
City or region (location) | none | City,Region,Country, e.g. Austin,Texas,United States. Overrides Country |
Coordinates (coordinates) | none | lat,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.com | Without https:// or www, e.g. google.co.uk, google.de, google.com.br; results are localized by Country/City either way |
Device (device) | desktop | desktop or mobile (News is always desktop) |
Operating system (operatingSystem) | auto | windows, macos (desktop) or android, ios (mobile) |
Screen width (screenWidth) | 0 = automatic | 240–9999 px; automatic is 1920 on desktop, 360 on mobile |
Screen height (screenHeight) | 0 = automatic | 240–9999 px; automatic is 1080 on desktop, 640–812 on mobile |
Pixel ratio (pixelRatio) | 0 = automatic | 0.5–3; automatic is 1 on desktop, 3 on mobile |
Always load the AI Overview (loadAiOverview) | false | Waits for AI Overviews Google loads after the page (add-on price per page) |
Expand the full AI Overview (expandAiOverview) | false | Captures the complete AI Overview text and all sources (free) |
Expand "People also ask" (peopleAlsoAskDepth) | 0 | 1–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) | false | Adds x/y/width/height of each result (add-on price per page) |
Group indented results (groupRelatedResults) | true | Keeps indented results from the same site under their main result |
Results per search term (resultsPerQuery) | 0 = use result pages | Exact number of results, up to 700 (organic/news billed per started 10, images per started 100) |
Google search URLs (googleUrls) | none | Full Google URLs with any filters instead of search terms (not for AI Mode) |
Extra Google URL parameters (extraUrlParameters) | none | e.g. &tbs=qdr:w (past week) or &filter=0 |
Remove URL parameters from result links (removeUrlParameters) | none | Up to 10 parameter names, e.g. srsltid |
Stop paging when a tracked domain is found (stopWhenFound) | false | Stops requesting further pages once a tracked domain appears — you pay only for delivered pages |
Only return results matching (onlyResultsMatching) | none | Only SERP elements containing this domain/URL (wildcards * allowed) |
Match mode (matchMode) | any | any element containing the domain, or all = only elements where all links match |
Match only in these result types (matchOnlyInTypes) | all types | e.g. organic, paid, featured_snippet, local_pack, ai_overview |
Ignore these result types when matching (matchIgnoreTypes) | none | Same type names as above |
Processing speed (processingSpeed) | auto | auto / 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) | 60 | 1–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.
| Event | Free | Bronze | Silver | Gold, 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_SUMMARYand 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
nullwhen 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, soansweris oftennull(answerIsAiGenerated: true) even with expansion on — in our September 2026 test runs every answer wasnull. 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).