Apify's Google Search Scraper: cost, inputs, and what changed
Apify's Google Search Results Scraper (apify/google-search-scraper) returns Google SERPs as structured JSON: organic results, ads, People Also Ask, related searches, and AI answers from Google AI Overview, AI Mode, Gemini, Perplexity, ChatGPT and Copilot. It bills per event, from $1.80 per 1,000 scraped result pages, and needs no Google API key.
Every figure below was checked against Apify's own Actor, pricing and limits pages on 2026-09-09. Where two official Apify pages disagree, this page says so instead of picking one.
What does maxPagesPerQuery do?
maxPagesPerQuery sets how many Google result pages the Actor loads for each search term. One page is roughly 10 organic rows; the Actor's schema states each page contains approximately 10 results, and there is no input that changes it. It is also the billing multiplier: the charged unit is a scraped search result page, so your event count is queries × maxPagesPerQuery.
Set it to 1 while you are checking the output shape. Raising it to 5 makes the same keyword list five times more expensive, and pages 3 and beyond are usually noise for rank tracking.
The input keys that matter
| Key | Type | Default | What it does |
|---|---|---|---|
queries | string | — | One search term or Google URL per line. Max 32 words per query. |
maxPagesPerQuery | integer | — | Result pages per query. The cost multiplier. |
countryCode | string | us | Country the search is run from. |
languageCode | string | — | Google interface language (the hl parameter). |
searchLanguage | string | — | Filters results by language (the lr parameter). |
locationUule | string | — | Exact location code, for local-pack queries. |
mobileResults | boolean | false | Mobile SERP instead of desktop. |
focusOnPaidAds | boolean | false | Capture Google Ads for each query. |
saveHtml | boolean | false | Store the raw HTML in the dataset. |
Field names and defaults read from the Actor's live input schema on 2026-09-09.
What does a run actually cost?
The base event, search-page-scraped, starts at $1.80/1,000 result pages subject to change · verified 2026-09-09 on the Business plan and costs more on lower plans, because this Actor honours Apify Store discounts.
| Job | Pages | Free ($0.0045) | Starter ($0.0025) | Business ($0.0018) |
|---|---|---|---|---|
| 100 keywords, 1 page each | 100 | $0.45 | $0.25 | $0.18 |
| 1,000 keywords, 1 page each | 1,000 | $4.50 | $2.50 | $1.80 |
| 1,000 keywords, 5 pages each | 5,000 | $22.50 | $12.50 | $9.00 |
| 500 keywords, daily for 30 days | 15,000 | $67.50 | $37.50 | $27.00 |
That $1.80 is the Business-plan rate. Apify Store discounts mean the per-page price falls as your plan rises, so the page rate is $0.0045 on the free plan, $0.0025 on Starter, $0.00195 on Scale and $0.0018 on Business. Apify's free plan carries $5 of monthly usage, which is about 1,100 result pages at the free-plan rate. The $19 Starter plan includes $19 of usage, about 7,600 pages (apify.com/pricing, checked 2026-09-09).
Two things will break that arithmetic. First, every AI-engine and enrichment option in the next section charges its own event on top of the page event, at rates listed on the Actor's pricing tab. Second, Apify's docs state that "most pay-per-event Actors include platform usage in the event price" but that some charge for platform usage separately — so read the Actor's pricing tab before you scale a keyword matrix, not after. For the general model, see our note on pay-per-event pricing.
Which AI answers can this Actor capture?
This is the part of the Actor most SERP tutorials have not caught up with. Alongside the classic blue links, the live input schema exposes a toggle per answer engine, each billed as its own event:
| Key | What it returns |
|---|---|
aiOverview | The complete AI Overview panel, when Google shows one for the query. |
aiModeSearch | Google AI Mode results, for checking how a brand appears there. |
geminiSearch | An answer from Google Gemini. |
perplexitySearch | An answer from Perplexity's Sonar model. |
chatGptSearch | An answer from OpenAI's search model. |
copilotSearch | An answer from Microsoft Copilot. |
websiteContentScraper | Full page text or markdown for each result, charged per page. |
linkProspecting | Pages that cite a topic without mentioning your brand. |
maximumLeadsEnrichmentRecords | How many lead records to pull per domain found. 0 (the default) disables enrichment; there is no upper cap, so this multiplies your bill. Personal data — read the legality note below. |
The previous version of this page, written 2026-05-26, described none of these; it listed a single generic aiModeResult.text field. If you are tracking brand visibility inside AI answers rather than inside the ten blue links, that is now the reason to use this Actor over a plain SERP API.
Turn them on one at a time. Each toggle multiplies both the run time and the bill, and a keyword list that costs $1.80 as plain SERPs can cost several times that with three engines enabled.
How do you run it?
- Open the Actor page and click Try for free to load the run console.
- Paste your queries, one per line. Start with two or three, not two hundred.
- Set
countryCodeandlanguageCodefor the market you care about. There is no results-per-page control — each page returns about 10 organic results. - Set
maxPagesPerQueryto1, click Start, and watch the log until the status is SUCCEEDED. - Open Storage, check the field names against your pipeline, then export JSON, CSV or Excel — or pull items with the Dataset API. The Apify API tutorial covers tokens and scheduled pulls.
Only step 5 is worth repeating: check the shape before you scale. Field names shift between Actor versions, and a 5,000-page run that lands in the wrong shape still costs $9.
What does the output look like?
One dataset item per query and page. The organic block is stable across versions; the AI-engine blocks are not documented publicly field-by-field, and we did not spend the events to run them, so this page does not invent names for them. Enable the toggle, run one query, and read the keys.
| Field | Description | Example |
|---|---|---|
| searchQuery.term | The query as submitted | Hotels in Seattle |
| organicResults[].title | Title of the organic listing | Downtown Seattle Hotel | Luxury Waterfront Hotel |
| organicResults[].url | Destination URL | https://www.edgewaterhotel.com/ |
| organicResults[].description | Snippet text | Waterfront hotel with views of Elliott Bay... |
| organicResults[].position | 1-based rank on that result page | 1 |
| relatedQueries[].title | Related search suggestions | Best hotels in seattle |
| peopleAlsoAsk[].question | People Also Ask questions | What is the best area to stay in Seattle? |
| paidResults | Ads, populated when focusOnPaidAds is on | [{ ... }] |
Structural example. Field names and nesting follow the Actor version you run — verify against your own first run.
{
"searchQuery": {
"term": "Hotels in Seattle",
"device": "DESKTOP",
"page": 1,
"type": "SEARCH",
"domain": "google.com",
"countryCode": "US"
},
"organicResults": [
{
"title": "Downtown Seattle Hotel | Luxury Waterfront Hotel Rooms",
"url": "https://www.edgewaterhotel.com/",
"description": "The Edgewater Hotel is laden with a rich musical past and surrounded by breathtaking views...",
"position": 1,
"type": "organic"
},
{
"title": "Top 10 Hotels in Seattle, WA",
"url": "https://www.hotels.com/de1481165/hotels-seattle-washington/",
"description": "Compare 2963 hotels in Seattle using 47993 real guest reviews.",
"position": 2,
"type": "organic"
}
],
"relatedQueries": [
{ "title": "Hotels in seattle downtown" },
{ "title": "Best hotels in seattle" }
],
"peopleAlsoAsk": [
{ "question": "What is the best area to stay in Seattle?" },
{ "question": "How many days do you need in Seattle?" }
],
"paidResults": []
}
When is Google's own API the better choice?
Google sells first-party search results through the Custom Search JSON API, and for a narrow case it is still the right answer: 100 queries per day are free, which beats paying anyone. Its own documentation states the terms plainly.
| Custom Search JSON API | apify/google-search-scraper | |
|---|---|---|
| Free tier | 100 queries/day | Whatever $5 of monthly credit buys (~1,100 pages) |
| Paid rate | $5 per 1,000 queries, capped at 10k/day | from $1.80 per 1,000 result pages ($4.50 on the free plan, $2.50 on Starter) |
| Scope | A Programmable Search Engine you configure | Google's live SERP |
| Ads, PAA, AI Overview | No | Yes, per toggle |
| Availability | "closed to new customers"; existing customers "have until January 1, 2027 to transition to an alternative solution" | Open |
Both quoted phrases come from Google's own Custom Search JSON API overview, read 2026-09-09.
So the honest split: if you already hold a key, stay under 100 queries a day, and only need results from a search engine you configured yourself, keep using it until the 2027 cutoff. It is free and first-party. If you are starting today you cannot sign up, and if you need the ad block, People Also Ask, or the AI answer panels, no first-party Google API returns them at all.
Open Google Search Results Scraper on Apify, run a single query with maxPagesPerQuery: 1, and read the dataset keys before you load a keyword list. The first run costs well under a cent.
How many runs can you start at once on the free plan?
Two official Apify pages disagree, and both were live on 2026-09-09:
| Source | Free-plan concurrent Actor runs |
|---|---|
| apify.com/pricing | 5 |
| docs.apify.com/platform/limits | 25 |
Both agree on 32 for the $19 Starter plan. Until Apify reconciles them, design for 5: a scheduler that queues five concurrent runs works under either number, while one built for 25 fails hard if the pricing page is the operative limit. If you are batching a large keyword list, put the batching inside one run rather than across many.
Is this legal?
Scraping public search results is not settled the same way in every jurisdiction, and it is not this page's job to tell you it is fine. Two specifics worth flagging. Google's terms address automated querying, so read them for your use case. And maximumLeadsEnrichmentRecords returns named business contacts, which is personal data under GDPR and needs a lawful basis before you run it, not after. Our scraping legality guide covers the general framing; a lawyer covers your situation.
It sets how many Google result pages the Actor loads per search term, roughly 10 organic rows each, a fixed figure stated in the Actor's own schema with no setting to change it. It is also the billing multiplier: charging is per scraped result page, so your cost is queries multiplied by maxPagesPerQuery. Start at 1.
The base event starts at $1.80 per 1,000 scraped search result pages on the Business plan, rising to $2.50 on Starter and $4.50 on the free plan, verified on the Actor's pricing tab on 2026-09-09. AI-engine toggles, website content scraping and lead enrichment each charge their own additional events, listed on the same tab.
Yes. The live input schema exposes separate toggles for aiOverview, aiModeSearch, geminiSearch, perplexitySearch, chatGptSearch and copilotSearch. Each is billed as its own event per query, so enable them one at a time and check the bill after a small run.
No, and for new projects you cannot use it: Google's documentation states the Custom Search JSON API is closed to new customers, with existing customers required to transition by January 1, 2027. The Apify Actor scrapes the live SERP and bills through Apify instead.
Google does not show every module for every query. Ads only appear when focusOnPaidAds is on and the query is commercial, People Also Ask is query-dependent, and AI Overview is not shown for many queries. Check the run log for proxy or CAPTCHA messages before assuming a bug.
Apify's own pages disagree: apify.com/pricing says 5 and docs.apify.com/platform/limits says 25, both as of 2026-09-09. Design for 5 so your scheduler works under either limit.