Free Google Search Results Scraper - SERP API by Country avatar

Free Google Search Results Scraper - SERP API by Country

Pricing

$0.35 / 1,000 results

Go to Apify Store
Free Google Search Results Scraper - SERP API by Country

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

SR

Maintained by Community

Actor stats

12

Bookmarked

965

Total users

133

Monthly active users

8 days ago

Last modified

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

FieldDescription
rankPosition in the organic results, 1..N per keyword
titleResult title
urlDestination URL, with any redirect wrapper resolved to the real link
domainHost of that URL, without www.
snippetThe description Google shows, with the site name and date split off
displayed_urlThe breadcrumb Google renders, e.g. https://example.com › docs › page
sourceSite name Google prints ahead of the breadcrumb, e.g. Serious Eats
datePublish date, when Google shows one
faviconFavicon URL for the domain
deeplinkSame value as url, kept for existing integrations
keywordThe 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

FieldTypeRequiredDescriptionDefault
queriesarrayyes1-100 keywords, each scraped separately-
countrystringnoWhich country's Google to search, as a two-letter codeus
crstringnoPrefer one country's sites, written countryDE (best effort)empty
maxResultsintegernoResults per keyword, 1-10010

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_served entry in errors, 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 partial entry 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 errors rather than dropped silently.
  • Ads, shopping units, People Also Ask and knowledge panels are not returned. This Actor returns organic web results.