Google Search Scraper (SERP Results) avatar

Google Search Scraper (SERP Results)

Pricing

from $0.80 / 1,000 search results

Go to Apify Store
Google Search Scraper (SERP Results)

Google Search Scraper (SERP Results)

Scrape Google organic results: title, URL (exact page or site homepage, flagged by urlType), breadcrumb and snippet. Build the query from market, industry and location. Pay per result.

Pricing

from $0.80 / 1,000 search results

Rating

1.0

(2)

Developer

AI_Builder

AI_Builder

Maintained by Community

Actor stats

5

Bookmarked

200

Total users

1

Monthly active users

23 minutes ago

Last modified

Share

Google Search Scraper (SERP Results) extracts organic search results from Google Search: the result title, the result URL (the exact page, or the site's homepage when Google hides the link), Google's breadcrumb and the snippet text. It is a simple Google Search API alternative for lead generation: describe a market, an industry, a location and an exact phrase, and the Actor builds the query and returns the matching websites as rows you can export.

It does not visit the result websites and does not extract ads, maps, images, AI overviews or "People also ask" boxes.

What does Google Search Scraper do?

  • Builds the query <search query base> <domain> <location> "<information to retrieve>". Blank optional fields are left out.
  • Reads Google result pages one by one over plain HTTP through the Apify GOOGLE_SERP proxy, with no browser. Google shows about 10 results per page, and the Actor reads at most 30 pages, until it has Maximum Results.
  • Returns real websites only. Google /url and /goto redirect wrappers and google.com addresses never reach your dataset.
  • Tells you how precise each link is with the urlType field: exact for the result page itself, origin for the site's homepage when Google encrypts the link (see Exact links and site origins).
  • Skips URLs containing blog and results matching a few French keywords (utilisation, classement, séminaire), and drops duplicate URLs across pages.
  • Fails a run that finds nothing, so an empty or blocked search never looks like a success and never creates result charges.

Why use Google Search Scraper?

  • Find companies fast: build lists of agencies or businesses in a city or industry from one query.
  • Clean, honest output: every url is a real website, and urlType tells you whether it is a deep link or a homepage.
  • Light and fast: plain HTTP requests through Apify's Google SERP proxy, no headless browser.
  • Apify platform features: run it on a schedule, call it through the API, connect it to Make, Zapier or Google Sheets, and monitor every run.

Who is Google Search Scraper for?

  • Sales and growth teams building lists of companies in a city or niche.
  • Agencies and freelancers researching competitors for a client.
  • SEO and marketing teams checking which sites rank for a query.
  • Developers and AI agents that need Google organic results as structured rows.

Use cases for Google search results data

  • Find marketing agencies, consultancies or shops in a given city.
  • Collect company websites to pass to a contact finder.
  • Track which domains appear for your target keywords.

What data can Google Search Scraper extract?

FieldTypeDescription
titlestringResult title as shown on Google
urlstringExact result URL, or the site's homepage when Google encrypts the link (see urlType)
urlTypestringexact (the result page itself) or origin (only the site's homepage was available)
displayedUrlstringThe breadcrumb Google shows under the title, for example https://mapscraper.io › scrape › marketing-agencies-in-p.... It is not a bare hostname: it can contain › and be truncated by Google. When Google shows no breadcrumb, it is the hostname of url
descriptionstringSnippet text under the result
emphasizedKeywordsarrayTracked keywords (agence, marketing) found in the title or snippet
typestringAlways organic

Google now encrypts many result links, so the real address of the page can't be read from the result page. When that happens, the Actor takes the site from the breadcrumb Google shows under the title and returns its homepage (for example https://mapscraper.io/) with urlType: "origin". The visible part of the path stays in displayedUrl. When Google shows the plain link, you get the exact page with urlType: "exact". A result is dropped only when Google shows neither a link nor a site name.

This is a real limitation, so plan for a mix of both types:

  • The share of exact rows varies by query and by page. In our test runs it ranged from 0% to 63% (63% on a 30-result run, about 40% across all test runs).
  • Small runs can be 100% origin. Google's first page often encrypts every link, so a 10-result run may return only homepages. Larger runs read more pages and usually get more exact links.
  • Origin results are one row per site. Duplicates are removed on url, so several encrypted results from the same site collapse into one homepage row.
  • The run log reports the split, for example URL types: 19 exact, 11 origin (63% exact).

If you need deep links only, filter the dataset on urlType = exact. For company lists, origin rows are often all you need: they give you the company's website.

How to scrape Google search results

  1. Open the Actor and go to the Input tab.
  2. Enter a Search Query Base, for example marketing agency.
  3. Optionally add a Domain (industry), a Location and an exact phrase in Information to Retrieve.
  4. Set Maximum Results (up to 300).
  5. Click Start and download the results from the Output tab as JSON, CSV or Excel.

How much will it cost to scrape Google search results?

You pay per result, with no subscription and no rental. One result is one organic search result saved to the dataset. Failed pages, retries and empty runs never create result charges. A small standard Actor start event applies to every run. See the Pricing tab for current prices, including discounts on higher Apify plans.

Set a maximum cost per run and the Actor stops at that limit and keeps the results already saved. If the limit is too low for even one result, the run fails without charging any result.

Input

See the Input tab for all options. Example input:

{
"search_query_base": "marketing agency",
"domain": "IA",
"location": "Paris",
"info_to_retrieve": "email, website",
"max_results": 30,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"] }
}
  • Information to Retrieve is added in quotes, so Google only returns pages containing that exact phrase.
  • Maximum Results goes up to 300.
  • Proxy configuration defaults to the Apify GOOGLE_SERP proxy group, which is built for Google result pages and is the recommended setting. Other proxy groups are often rate-limited by Google with HTTP 429, and the Actor logs a warning when you pick one.

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The rows below come from a real run of the input above (build 0.8.1). They show one origin row and two exact rows.

[
{
"title": "Extract marketing agencies in Paris — business list with emails ...",
"url": "https://mapscraper.io/",
"displayedUrl": "https://mapscraper.io › scrape › marketing-agencies-in-p...",
"description": "Build a list of marketing agencies in Paris from Google Maps: phone, email, website, rating and 41 fields per row. No 120-result ceiling.",
"emphasizedKeywords": ["marketing", "marketing"],
"type": "organic",
"urlType": "origin"
},
{
"title": "IM ĀYLN: International Influencer Marketing Agency",
"url": "https://www.imayln.com/",
"displayedUrl": "www.imayln.com",
"description": "We connect influencer marketing with paid ads (Spark/whitelisting), email, website funnels, and retail moments. Our focus is to make creator content work ...",
"emphasizedKeywords": ["marketing", "marketing"],
"type": "organic",
"urlType": "exact"
},
{
"title": "The 100 Best Marketing Automation Agencies - 2026 Reviews - Sortlist",
"url": "https://www.sortlist.com/marketing-automation?page=13",
"displayedUrl": "www.sortlist.com › Marketing › Marketing Automation",
"description": "... email, website conversion, CRM visibility, HubSpot support, and sales and ... TopMedia is a performance marketing agency, providing full scale marketing support ...",
"emphasizedKeywords": ["marketing", "marketing"],
"type": "organic",
"urlType": "exact"
}
]

Where to find the output

The run's Output tab lists these outputs, by the title it shows:

  • Results: the default dataset, one row per organic result (Overview view).
  • Run state: the STATE key-value store record with result and page counters.
  • Debug page: the DEBUG_PAGE1_HTML key-value store record, saved only when no result could be parsed from Google page 1.

Key-value store records are not billed.

Tips for scraping Google

  • Results come from Google in English for the US; put the city in Location to narrow them.
  • Lower Maximum Results for quick checks, and raise it when you want more exact links: later pages often carry more plaintext links than page 1.
  • Make the query specific. Narrow queries return more company websites and fewer directory pages.
  • If a run fails with "No search results were scraped", Google blocked the requests or the query has no organic results. Keep the proxy on the default GOOGLE_SERP group and run it again.

Integrations: API, AI agents (MCP), Make, Zapier and n8n

  • Apify API: run searches and read results from Python, JavaScript or cURL. See the API tab.
  • AI agents (MCP): add quaking_pail/google-serp-scraper through the Apify MCP server so your agent can search Google and get structured rows.
  • No-code: push results to Google Sheets, Airtable or a CRM with Make, Zapier, n8n or webhooks.

FAQ, disclaimers and support

Our Actors are ethical and do not extract any private user data. Google Search Scraper only reads what Google shows in public search results: titles, links, breadcrumbs and snippets. A snippet can contain whatever the page shows publicly, such as a business email address or phone number. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Why did my run fail with no results?

The Actor fails a run that saves nothing, so you can tell a blocked or empty search from a successful one, and no result is charged. Check the log for 429 or CAPTCHA messages and make sure the proxy is the default GOOGLE_SERP group.

Why do some results only contain the homepage?

Google encrypts the link behind many results. The Actor cannot decode it, so it saves the site's homepage from the breadcrumb and marks the row urlType: "origin". Rows with urlType: "exact" hold the result page itself. See Exact links and site origins.

Why is displayedUrl not a plain domain?

displayedUrl is the breadcrumb Google shows under the title, such as www.sortlist.com › Marketing › Marketing Automation. Use url when you need a clean address.

How do I report a problem?

Open an issue in the Issues tab with the run ID. If the Actor saved you time, a rating on the Reviews tab helps other users find it.

Changelog

0.8 quality update (2026-10-25)

  • Output tab now lists the dataset and run records; README name matches the Store title. No change to input or output fields.

0.8

  • No browser: Google result pages are fetched over plain HTTP with Crawlee CheerioCrawler. Puppeteer and Chrome are gone, so runs are faster and use less memory.
  • The default proxy is now the Apify GOOGLE_SERP group (before, residential). This fixes the HTTP 429 blocks that made 0.7 runs fail.
  • url is always a real website, never a Google /url or /goto wrapper. Earlier versions often returned Google redirect links, and displayedUrl then showed www.google.com.
  • New field urlType (exact or origin). Google encrypts many result links, and those can't be decoded. For those rows, url is the site's homepage from the breadcrumb (origin). Only rows with a plain link get the exact page (exact). This is a real limitation: expect a mix of both. About 40% of rows were exact across our test runs, and small runs can be all origin.
  • displayedUrl now holds the breadcrumb Google shows (site and visible path) instead of only the hostname. It falls back to the hostname when Google shows no breadcrumb.
  • For origin rows, the blog filter also checks the breadcrumb path, because the real path is hidden.
  • All 6 earlier output fields keep the same names and types, and none were dropped. urlType is the only addition.
  • A run that saves no result now ends as FAILED instead of SUCCEEDED with an empty dataset. You are never charged for error rows.
  • Google ignores the num parameter, so each page holds about 10 results. The Actor reads pages one by one with start.