Google Search Results Scraper — Cheaper SERP API
Pricing
from $1.00 / 1,000 actor starts
Google Search Results Scraper — Cheaper SERP API
Scrape Google Search result pages by query or URL. Extract organic results, related searches, People Also Ask, best-effort ads, and HTML snapshots. Slightly cheaper pay-per-event pricing than Apify's Google Search Results Scraper.
Pricing
from $1.00 / 1,000 actor starts
Rating
0.0
(0)
Developer
Arnas
Maintained by CommunityActor stats
0
Bookmarked
39
Total users
11
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Google Search result pages by keyword or by a pasted Google Search URL. The actor returns one dataset record per SERP page with organic results, related queries, People Also Ask, best-effort paid ads/product ads, result counts, pagination metadata, and optional raw HTML snapshots.
It is designed as a cheaper, simpler alternative to apify/google-search-scraper for the common SEO and market research workflow: "give me Google SERP pages and the links on them." AI search add-ons and lead enrichment are intentionally out of scope so the per-page price can stay lower and predictable.
Why use this actor
- A little cheaper — $4.20 per 1,000 scraped SERP pages before Apify subscription discounts, compared with Apify's current $4.50 per 1,000 Free-plan page price.
- No paid-ads add-on fee — best-effort ad extraction is included in the page event price.
- Google URL or keyword input — paste raw search terms or full
google.com/search?...URLs. - Advanced search filters — country, interface language, result language, exact-match, site/related filters, title/text/URL words, file types, and date filters.
- Debuggable output — optionally save raw HTML in the dataset or key-value store for parser inspection.
- Compatible page-level shape — one dataset item per SERP page with
searchQuery,organicResults,paidResults,paidProducts,relatedQueries, andpeopleAlsoAsk.
Pricing
This actor uses Apify Pay-Per-Event pricing.
| Event | Price |
|---|---|
| Actor start | $0.001 per run |
| Scraped SERP page | $0.0042 per successful Google results page |
Examples before subscription discounts:
| Workload | Cost |
|---|---|
| 10 SERP pages | $0.043 |
| 1,000 SERP pages | $4.201 |
| 10,000 SERP pages | $42.001 |
Failed or blocked pages emit an error record but are not charged as scraped SERP pages.
Input
{"queries": "best SEO tools\nsite:apify.com google search scraper","maxPagesPerQuery": 2,"resultsPerPage": 10,"countryCode": "us","languageCode": "en","mobileResults": false,"maxConcurrency": 5,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
queries accepts one item per line. Each item can be either a normal Google query or a full Google Search URL such as:
https://www.google.com/search?q=hotels+in+Seattle&num=10
Proxies
If you omit proxyConfiguration, the actor uses Apify RESIDENTIAL proxies (in the country given by countryCode), falling back to GOOGLE_SERP if residential proxies are not available on the account. Residential is the recommended setup: pages are small (~60–80 KB), fast (1–3 s) and every blocked request is retried on a fresh IP.
GOOGLE_SERP is still supported. It is slower (often 5–60 s per page), and its result links are opaque Google redirects that the actor resolves with extra requests.
Pages that are not real results pages (Google homepage, consent screen, CAPTCHA, "enable JavaScript" interstitial, or results that ignore part of the query) are retried and, if they still fail, emitted as uncharged error records.
Output
Each dataset item represents one SERP page:
{"searchQuery": {"term": "best SEO tools","url": "http://www.google.com/search?q=best+SEO+tools&num=10&start=0&hl=en&gl=us&pws=0","device": "DESKTOP","page": 1,"type": "SEARCH","domain": "google.com","countryCode": "US","languageCode": "en","locationUule": null,"resultsPerPage": 10},"url": "http://www.google.com/search?q=best+SEO+tools&num=10&start=0&hl=en&gl=us&pws=0","hasNextPage": true,"serpProviderCode": "google.com","resultsTotal": "About 1,230,000 results","organicResults": [{"title": "Example result","url": "https://example.com/","displayedUrl": "example.com","description": "Result snippet from Google.","emphasizedKeywords": ["SEO tools"],"siteLinks": [],"productInfo": {},"type": "organic","position": 1}],"paidResults": [],"paidProducts": [],"relatedQueries": [],"peopleAlsoAsk": [],"suggestedResults": [],"customData": null,"aiOverview": "not-found","#error": false}
If Google returns a block page or a request fails after retries, the actor emits a page-level error record with #error: true and debug details. Error records are not charged as scraped pages.
Notes and limitations
Google changes SERP markup frequently. This actor uses static HTML parsing for speed and price: with residential or custom proxies it requests Google's server-rendered basic HTML results page (gbv=1), which does not need JavaScript.
- Google no longer honours
num, so each page has about 10 organic results whateverresultsPerPageis. UsemaxPagesPerQueryfor more. - Google sometimes answers automated traffic with results for only part of the query (for example ignoring
site:). The actor detects this and retries in verbatim mode (tbs=li:1). Pages 2+ andGOOGLE_SERPrequests always use verbatim mode, so their ranking can differ slightly from a normal browser search. mobileResultsonly changes thedevicefield in the output. The basic HTML page is the same for every device. It is best for organic/link extraction and lightweight ad monitoring. It does not provide bundled AI Mode, Perplexity, ChatGPT, Copilot, Gemini, lead enrichment, or email verification add-ons.
For large runs, lower maxConcurrency if error records increase. For strict quality validation, enable saveHtmlToKeyValueStore and compare parsed fields against the original HTML snapshots.
Legal
Scrape only public data you have a legitimate reason to process. Google Search results can include personal data, snippets from copyrighted pages, and region-specific content. Follow applicable laws, Google terms, and privacy rules such as GDPR.