Free Google Search Results Scraper - SERP API by Country
Pricing
$0.35 / 1,000 results
Free Google Search Results Scraper - SERP API by Country
Ultra-fast Google Search scraper. Extract comprehensive SERP data including rank, title, snippet, URL, domain and favicon. Free Apify plans get 10 results per run to try it on, paid plans run uncapped.
Pricing
$0.35 / 1,000 results
Rating
4.5
(4)
Developer
SR
Maintained by CommunityActor stats
12
Bookmarked
965
Total users
133
Monthly active users
8 days ago
Last modified
Categories
Share
Google's organic search results as clean JSON rows: rank, title, destination URL, domain, snippet, breadcrumb, source name and publish date, for any keyword and any of 176 countries.
Free Apify plans get 10 results per run, so you can try it before paying. Paid plans run uncapped at $0.35 per 1,000 results.
What you get
| Field | Description |
|---|---|
rank | Position in the organic results, 1..N per keyword |
title | Result title |
url | Destination URL, with any redirect wrapper resolved to the real link |
domain | Host of that URL, without www. |
snippet | The description Google shows, with the site name and date split off |
displayed_url | The breadcrumb Google renders, e.g. https://example.com › docs › page |
source | Site name Google prints ahead of the breadcrumb, e.g. Serious Eats |
date | Publish date, when Google shows one |
favicon | Favicon URL for the domain |
deeplink | Same value as url, kept for existing integrations |
keyword | The keyword that returned this row |
Discussion and video results (Reddit, YouTube) come back too. They have no
breadcrumb, so displayed_url is empty and source carries the forum or
channel instead.
Input
| Field | Type | Required | Description | Default |
|---|---|---|---|---|
queries | array | yes | 1-100 keywords, each scraped separately | - |
country | string | no | Which country's Google to search, as a two-letter code | us |
cr | string | no | Prefer one country's sites, written countryDE (best effort) | empty |
maxResults | integer | no | Results per keyword, 1-100 | 10 |
country localises the ranking and the results. 68 of its 176 values are
served by that country's own index, which is what makes the results local:
ask for nl and you get ah.nl, plus.nl and aldi.nl; ask for de and you get
rewe.de and edeka.de. The remaining 108 have no local index of their own and
fall back to the global one, whose results read as US. countryLocalised in
the OUTPUT record says which of the two you got, so a country without local
coverage is visible rather than silent. uk is accepted and reported as gb.
cr is a best-effort hint on top: prefer pages attributed to that country. A
value in any other shape is ignored rather than silently narrowing the search
to nothing.
{"queries": ["best espresso machine", "koffiemachine kopen"],"country": "nl","maxResults": 20}
Output
[{"rank": 1,"domain": "coffeegeek.com","url": "https://coffeegeek.com/opinions/state-of-coffee/the-best-espresso-machine/","title": "The Best Espresso Machine","snippet": "The Breville Bambino Plus: PID stable temperature controls ...","displayed_url": "https://coffeegeek.com › opinions › state-of-coffee › th...","source": "CoffeeGeek","date": "7 Apr 2024","favicon": "https://www.google.com/s2/favicons?domain=coffeegeek.com&sz=64","deeplink": "https://coffeegeek.com/opinions/state-of-coffee/the-best-espresso-machine/","keyword": "best espresso machine"}]
The run also writes two key-value records: OUTPUT with the counts and the
country actually used, and errors with one entry per keyword that could not
be read.
When a keyword returns fewer rows than you asked for
A request is sometimes answered with a page that carries no results at all. That is not the same as "this keyword has no results", so the run never reports it as an empty answer:
- a keyword whose pages all came back empty gets a
not_servedentry inerrors, and a run where that happened to every keyword fails rather than handing back an empty dataset that looks like a real verdict; - a keyword that got some of its pages gets a
partialentry saying how many, so a short row count is never mistaken for a short results list.
OUTPUT carries pagesRequested and pagesServed for the whole run.
Pricing
$0.35 per 1,000 results, charged per row delivered. Free Apify plans receive 10 results per run at no cost, shared across the keywords in that run: five keywords get two results each. Run one keyword at a time to see all ten.
Limits
- 100 keywords per run, 100 results per keyword.
- Runs are bounded by the Actor timeout. Keywords that do not finish inside it
are reported in
errorsrather than dropped silently. - Ads, shopping units, People Also Ask and knowledge panels are not returned. This Actor returns organic web results.
