Google Maps scraper API

A Google Maps scraper API turns a keyword and a location into structured business records — name, rating, review count, category, price level, address, phone, website, opening hours, service options, coordinates and Google's place ids.

You send what a person would type: what you are looking for and where. The collector paginates Google's local results, de-duplicates the merged pages and returns one row per business. Every row carries a data_id, which is the key the Place reviews collector takes — so "find the businesses, then read their reviews" is two calls rather than a project.

$0.001 per delivered place, up to 300 places per run. Nothing delivered means nothing charged.

How the Google Maps scraper API works

One POST with query and location. The collector searches Google's local results from an exit in the country you specify, pages through them until it reaches max_results or Google runs out, and merges the pages with de-duplication — Maps repeats businesses across pagination boundaries more than you would expect.

found_by records which query variant surfaced each place, which matters when you widen a search: it lets you see whether a result came from the exact term or from a looser match, instead of silently mixing them.

The two id fields serve different purposes and both are worth keeping. place_id is Google's canonical place identifier used across its own products; data_id is the hex identifier the Maps interface uses and is what the reviews collector needs. They are not interchangeable.

Inputs

Both query and location are required, and that pairing is the design: the collector is built around semantic input rather than URLs or ids you must find first. country and lang set the exit and locale — for local search these are not cosmetic, since Google's local ranking is computed from where the searcher appears to be. max_results caps delivery and cost.

What one place looks like

One row per business. phone and website are present when the business published them, which is most of the time for established businesses and often not for very small ones. hours is the opening schedule as published; service_options carries the attributes Google shows (delivery, takeaway, wheelchair access and similar). latitude and longitude make the output directly mappable. Note what is not here: email. Google does not publish business emails on a Maps listing, and no Maps scraper can return one — the local business leads collector gets them by visiting each business website afterwards.

What the Google Maps scraper API costs

$0.001 per delivered place ($1 per 1,000). Nothing delivered means nothing charged, and the $2 monthly free credit covers roughly 2,000 places here. Volume tiers take up to 30% off.

$0.001 per delivered place, $1 per 1,000. Building a directory of 50,000 businesses across a set of cities and categories is $50 at list price, once.

The cost pattern worth knowing: this collector is cheap because it reads a search surface. Enrichment is where cost lives — reviews at $0.0005 each, or full lead enrichment at $0.01 per business. Discover wide here, enrich narrow there.

Google Maps scraper API vs the Google Places API

The Places API is Google's own product and is the right choice for some jobs — particularly if you are building a consumer-facing map product and want to stay inside Google's terms without thinking about it. It requires a Google Cloud project with billing enabled, and it prices per request with the more useful field masks costing more, which makes bulk collection expensive in a way that is easy to underestimate until the first invoice.

The constraint that decides it for most data teams is not price, it is the caching and storage restrictions: Google's terms limit how long you may retain Places content and what you may do with it, and building a permanent business database from it is not what the licence contemplates. If your plan is "collect once, own the dataset", that plan and the Places API are in tension.

There is also an input difference. Places is id- and coordinate-oriented; this collector takes a keyword and a place name, which is how humans actually describe what they want.

Versus scraping Maps yourself

Google Maps is among the harder surfaces to scrape well, and the reasons are structural:

What people build with it

Local lead generation

Every business in a category and city with phone, website, rating and coordinates. For emails, chain it into the local business leads collector.

Competitive and market analysis

How many competitors operate in a catchment, how they rate, where they cluster geographically.

Building a business directory

Category by category, city by city, with coordinates that make the result mappable without geocoding.

Review monitoring at scale

Collect places here, then feed data_id to the reviews collector to track reputation across an entire category.

Limits, reliability and the legal bit

Up to 300 places per run with pagination and de-duplication handled internally. Wider coverage comes from more query-and-location pairs — the same category across neighbourhoods usually beats one broad city query, because Google's local results are themselves geographically bounded. Runs parallelise up to your plan's rate limit, 60 requests/minute on pay-as-you-go up to 1,200 on the top tier.

Legally: business listings are public data, and collecting public data is generally lawful in most jurisdictions, but Google's terms restrict automated access. Business phone numbers are usually commercial rather than personal data, though for sole traders the distinction blurs — and outreach to collected contacts is governed by marketing law (GDPR, CAN-SPAM, PECR) quite separately from how you obtained them. Not legal advice.

FAQ

Is there a free Google Maps scraper API?

There is a free allowance of $2 a month with no card, about 2,000 delivered places at $0.001 each — enough to build a real directory for a city before spending anything. Google's own Places API has a free credit tier but requires a billing account and restricts how long you may store the results.

How is this different from the Google Places API?

Input and licence. Places is id- and coordinate-oriented, needs a Cloud project with billing, prices per request with field masks, and restricts how long you may cache what it returns. This takes a keyword and a location, returns rows you keep, and bills per delivered place.

Can I get business emails from Google Maps?

Not from Maps — Google does not publish business emails on a listing, so no Maps scraper can return one. The local business leads collector does the second step: it takes the same keyword and location, then visits each business website to collect emails, phones and social profiles at $0.01 per delivered lead.

How much does it cost?

$0.001 per delivered place — $1 per 1,000 — with no subscription. Volume tiers take up to 30% off, and blocked pages and empty results are never billed.

How many places can one run return?

Up to 300, with pagination and de-duplication handled inside the run. For wider coverage, run the same keyword across several neighbourhoods rather than one broad city query — Google's local results are geographically bounded anyway.

What is data_id for?

It is the hex identifier the Maps interface uses, and it is what the Place reviews collector takes as input. place_id is Google's canonical place identifier used across its other products. They are different things and are not interchangeable, which is why both are returned.

Is scraping Google Maps legal?

Business listings are public data and collecting public data is generally lawful in most jurisdictions, but Google's terms restrict automated access and the analysis differs by country. What you do afterwards matters separately — cold outreach to collected contacts is governed by marketing law regardless of how the contact was obtained. Take proper advice.

Related scrapers

If you're an AI agent

Skip the marketing. QuantumProxies.io publishes a machine-readable site map, Markdown for every page, a free MCP server, and APIs billed from the same balance as your proxies.

Connect in one command: npx -y quantumproxies-mcp