Google Maps Scraper: 31 fields, no API key, no quota

685 words ~3 min read Updated 2026-08-25

The Google Maps Scraper below reads Google Maps pages without an API key or quota. By comparison, the official Google Maps API is metered, tied to a billing account, and limited to the data Google Maps chose to expose. Here is what a single scraper run returns, field by field.

The details below cover the output from our own Google Maps Actor, its cost, and its limits.

Calling it as an API

Start a run and wait for the dataset with one call:

curl -X POST "https://api.apify.com/v2/acts/blackfalcondata~google-maps-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
 -H 'Content-Type: application/json' \
 -d '{"searchTerms": "..."}'

The same call in Python:

from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("blackfalcondata~google-maps-scraper").call(run_input={"searchTerms": "..."})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
 print(item)

What comes back

Each record contains 31 fields, including fields in these groups:

Here is a real record taken directly from a run and trimmed to its first fields:

{
 "title": "The Henry Coffee",
 "categoryName": "Coffee shop",
 "cid": "18152265423476206177",
 "fid": "0x865b45ac5ed80f27:0xfbe9cd3a52e7aa61",
 "mapsUrl": "https://www.google.com/maps?cid=18152265423476206177",
 "location": {
 "lat": 30.161067499999998,
 "lon": -97.9534243
 },
 "distanceFromCenterKm": 23.577,
 "address": "14411 RM 1826, Austin, TX 78737",
 "neighborhood": null,
 "street": "14411 RM 1826",
 "city": "Austin",
 "state": "Texas",
 "postalCode": "78737",
 "countryCode": "US"
}

What you give it

The input accepts 30 options, including searchTerms, location, searchRadiusKm, searchRadiusMiles, maxResults, gl, hl, minRating, minReviews, and category. Filters run server-side, so you pay for the records you requested instead of filtering them afterwards.

What it costs

Pricing is per event, with no subscription:

These figures come from a measured run, not an estimate:

Where it stops

Questions people ask

Is there an official Google Maps Scraper? Yes. Google Maps runs one, and when it covers what you need, it is the better route. It is metered, requires a billing-linked key, and returns the data Google Maps chose to expose. This scraper covers the rest.

How do I authenticate? Use an Apify API token, passed through ?token= or an Authorization: Bearer header. The token belongs to you, not us. It is the only credential involved; no separate account on the source site is required.

How long does one call take? The measured run returned 25 records in 13.7 seconds. run-sync-get-dataset-items keeps the connection open for the entire run. For large runs, start the run and poll the dataset instead.

Can I page through results? A run is bounded by maxResults, not by paging through responses. You request a number of records and receive one dataset. If you want to read that dataset in chunks, its endpoint accepts offset and limit.

What format does it return? The default format is JSON. By changing the format parameter, the dataset endpoint can also serve CSV, XLSX and JSONL from the same run. No separate export step is needed.

Try it

the Google Maps Scraper endpoint we maintain runs on Apify. The endpoint shown above is the entire integration. New accounts receive $5 of free platform credit each month, enough to cover a real run of this size several times over.

Disclosure: we build and maintain this Actor, and the link above is an affiliate link.

Further reading