Google Search Results Scraper
Pricing
from $0.97 / 1,000 search results
Google Search Results Scraper
Scrape Google search results for one query: organic results with their rank, ads, People Also Ask questions and related searches, page by page. Pick the country, the language and the Google domain, and use operators like site: and OR. $1.00 per 1,000 organic results.
Pricing
from $0.97 / 1,000 search results
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
22
Total users
14
Monthly active users
3 days ago
Last modified
Categories
Share
Type one Google query and get the results page back as rows: organic listings with their rank, the ads above them, the People Also Ask questions and the related searches at the bottom. You pick the country, the language, the Google domain and how many pages to follow.
The url on an organic row is the address of the page itself. Now and then Google won't give one
up. That row still arrives, with url and domain set to null, and it is not billed.
| Input | One Google query, operators like site:, quotes and OR included |
| Output | One row per organic result, ad, People Also Ask entry or related search |
| Ceiling | 100 rows per run, across up to 10 pages |
| Account needed | None, and no Google API key |
| Price | $1.00 per 1,000 organic results on the Free plan, a little less on paid plans. Ads, People Also Ask and related searches come free. The free plan's $5 a month covers about 5,000 |
🔍 What Google Search Results Scraper does
It runs your query against the Google domain you name, reads the results page, and turns it into four kinds of row.
Organic rows carry the title, the page's address, the displayed source, the snippet and the rank.
Ad rows carry the same shape for the paid results Google marks as such, without the advertiser's
address: Google prints only its own click link for an ad and we don't follow it, so url and
domain are null there. People Also Ask rows carry
the question, and the answer text when Google puts it in the page. Related search rows carry the
phrases printed at the bottom.
Set maxPages above 1 and it follows Google's own Next link, page by page, stopping when your row
limit is reached or Google runs out of pages. Duplicate links are dropped across pages, so a listing
that appears twice arrives once.
📋 What data you get from each Google search result
| What you get | Field |
|---|---|
| Which kind of row it is | type |
| The listing: title, the page's address and its host, the source Google displays, the snippet | title, url, domain, displayedUrl, snippet |
| Position within its page, and which page | rank, page |
| People Also Ask: the question and the answer text | question, answer |
| The search and its settings, on every row | query, countryCode, language, googleDomain |
| When the page was read | fetchedAt |
▶️ How to scrape Google search results
- Open Google Search Results Scraper and click Try for free.
- Put your search in Search query, replacing the example.
- Set Maximum results. Ten is a sensible first run.
- Change Google domain, Country code and Language if you want another country's view, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
An empty query writes one labelled sample row and stops, so you can see the shape first.
💰 How much does it cost to scrape Google search results?
$1.00 per 1,000 organic results on the Free plan. Paid plans pay a little less: $0.99 on Starter, $0.98 on Scale and $0.97 on Business. On the free plan, the $5 Apify gives you each month covers about 5,000 organic results.
Only organic results are billed. Ads, People Also Ask entries and related searches arrive free
beside them. maxResults caps all four kinds together, so it also caps what a run can bill: set it
to 10 and ten organic results is the most you can be charged for, however many pages get read.
The sample row, every diagnostic row, an organic result that came without its address and a query that finds nothing are not billed.
📥 What you give it
{"query": "best running shoes site:runnersworld.com","countryCode": "US","language": "en","googleDomain": "google.com","maxResults": 20,"maxPages": 2}
| Field | Default | What it is |
|---|---|---|
query | none, the box starts at best running shoes | Your search. site:, intitle:, quoted phrases, OR and minus terms all work. |
googleDomain | google.com | The Google host, without https://. google.co.uk, google.ca and the rest are fine. |
countryCode | US | Two-letter country, sent as Google's gl. |
language | en | Interface language, sent as Google's hl. |
maxResults | 10 | Total rows, 1 to 100, counting all four kinds together. It is also the most a run can bill you. |
maxPages | 1 | Follow Google's pagination this far, 1 to 10. |
includeAds | on | Return the paid results Google marks as ads. |
includePeopleAlsoAsk | on | Return the People Also Ask questions, with answer text when the page carries it. |
includeRelatedSearches | on | Return the related phrases from the foot of the page. Read the limit below first. |
enableProxyFallback | on | On by default. Switched off, runs can come back with no results. |
proxyConfiguration | leave it alone | Optional. Your own servers are used exactly as given. |
📤 What you get back
A real organic row from a run on 11 October 2026:
{"ok": true,"type": "organic","title": "Best of Road Running Shoes","url": "https://believeintherun.com/shoe-reviews/type/best-of-road/","domain": "believeintherun.com","displayedUrl": "Believe in the Run","snippet": "Independent, run-tested reviews of running shoes, Popular Brands New Balance Nike Asics Hoka Saucony Puma Adidas. These are the Best On Running Shoes Right Now ...","rank": 4,"page": 1,"query": "best running shoes","countryCode": "US","language": "en","googleDomain": "google.com","fetchedAt": "2026-10-11T18:43:56.264Z"}
| Field | How to read it |
|---|---|
url | The page's own address. null on a result Google gave no address for, and that row is not billed. |
domain | The host of url, without www.. null when url is. |
rank | Position within its own page, so page 2 starts counting again. |
answer | People Also Ask rows only, and usually null: on our test runs none of the 12 questions came with answer text. |
query | The search you typed. On a related_search row this overwrites the related phrase, which survives only inside url. |
snippet | Google's own description text, trailing Read more and all. |
🧾 Reading the output
Four kinds of row can land in your dataset.
| Row | How to spot it | Billed as a result |
|---|---|---|
| An organic result | ok: true, a type of organic and a url | yes |
| An organic result Google gave no address for | a type of organic and url set to null | no |
| An ad, a People Also Ask entry or a related search | ok: true and a type of ad, people_also_ask or related_search | no |
| The sample row | _sample: true | no |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok being true with _sample absent. For the billed results alone, keep the organic
rows that have a url.
| Code | What it means |
|---|---|
NO_RESULTS | The page loaded and nothing usable was on it. A query with no matches lands here. |
NOT_SERVED | This search page was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED or JS_REQUIRED. |
RATE_LIMITED | Google answered with a rate limit. Wait and re-run. |
NETWORK | Google was unreachable or answered badly. A googleDomain that is not a real Google host also lands here rather than saying the value is wrong. |
TIME_LIMIT | The run got close to its time limit and stopped on its own. The results delivered before that are complete. Give the run more time, or ask for fewer pages, to get the rest. |
INCOMPLETE | Google did not return a later page (failedPage says which). The results of the pages before it are delivered and billed as usual; nothing is billed for the missing pages. |
A diagnostic never fails the run, except one: when the time limit stopped the run before any result came back, the
run ends as failed, with a TIME_LIMIT row saying so.
The Overview table hides answer, displayedUrl and the diagnostic fields, so a run that produced
only a diagnostic looks almost blank there. Switch the dataset to JSON to read it.
💡 What people use it for
- Tracking where a page ranks for a keyword, week by week, with
rankandpagealready split out. - Pulling the People Also Ask questions for a topic to see what the audience actually asks.
- Checking which advertisers sit above the organic results for a commercial term in one country.
- Running the same query across
google.com,google.co.ukandgoogle.deto compare what each country sees.
From a seed word to who ranks for it, in three runs:
- Run Keyword Autocomplete Scraper
on a seed with
expandQuestionson, and keep thesuggestionvalues you care about. - Put the best few into Google Trends Scraper's
searchTermswithcompareKeywordson, to see which one is growing. - Run the winner here as
queryto see who ranks for it today.
🚧 What it does not do
- Related searches collapse into one row. Measured on a page carrying nine related phrases: one
related_searchrow came out, and itsqueryheld the search that was typed, not the phrase. The phrase is only readable insideurl. TurnincludeRelatedSearchesoff if you do not need it. - With a small
maxResults, ads are taken first. Cap a run at 5 on an advert-heavy term and ads can use most of the budget. SwitchincludeAdsoff if you only want organic rows. - Four kinds of row, and no more. No local pack, no shopping carousel, no news box, no knowledge panel.
- Ads and People Also Ask are spotted from how Google marks them up, so a layout change on Google's side can leave some of them out until the reading catches up.
- One query per run. Feed a keyword list by scheduling or looping runs.
- Rows are a snapshot of that page at that moment. Rankings move daily.
- It is not an official Google tool. Dami's Studio is independent and is not affiliated with or endorsed by Google, or by any other company named on this page.
🧭 Which Google scraper do you need?
| If you want | Use |
|---|---|
| The web results page for a keyword: organic, ads, People Also Ask | This one |
| What a search box suggests as people type | Keyword Autocomplete Scraper |
| Interest in a keyword over time and by region | Google Trends Scraper |
| News articles with the publisher's real link | Google News Scraper |
| Image results and the pages they sit on | Google Images Scraper |
| The ads a brand runs on Google | Google Ads Transparency Scraper |
| The same job on Yandex, by region | Yandex Search Engine Scraper |
| Businesses and places | Google Maps Scraper |
❓ Questions people ask
Do I need a Google API key to scrape Google search results?
No. Nothing to apply for, no quota to watch.
Can I search more than one keyword at a time?
Not in one run. query takes a single search. Use a schedule or a loop for a list.
Why don't the rankings match what I see on Google?
Google tailors results to where you are, your language and your history. The run sees what a
logged-out visitor sees for the googleDomain, countryCode and language you set. To compare,
search in a private browser window with the same Google domain.
Why did I get fewer rows than maxResults?
Google decides how much it prints. A narrow query, or one with site: on a small domain, often runs
out before your limit does.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has
ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP
client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/google-search-results-scraper.
Either way the run happens on your Apify account at the same price.
Is scraping Google search results legal?
These are public search results. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the query and the run ID. The errorCode on the
diagnostic row usually names the problem on its own.