Google Maps Search Scraper avatar

Google Maps Search Scraper

Pricing

from $0.60 / 1,000 result chargeds

Go to Apify Store
Google Maps Search Scraper

Google Maps Search Scraper

Get place search results from Google Maps. Talks directly to Google Maps' internal mobile API, no login needed. Split from the mature, published google-maps-all-in-one-api for a focused, single-purpose workflow.

Pricing

from $0.60 / 1,000 result chargeds

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Categories

Share

What does Google Maps Search Scraper do?

Google Maps Search Scraper searches Google Maps for places near a location, and/or gets search-as-you-type autocomplete suggestions — pass in an array of search queries and/or an array of suggestion queries, and every result item is pushed to the dataset as its own row, tagged with which query it came from.

Why use Google Maps Search Scraper?

It talks directly to the same internal gRPC API the official Google Maps Android app uses (mobilemaps-pa-gz.googleapis.com), reverse-engineered by live capture against a real device — real protobuf request/response schemas, real headers, no API key of your own needed. No account, no browser automation, no scraping setup.

This is the search-and-autocomplete slice of Google Maps All-in-One API, split out as its own focused, batch-run Actor (input in, dataset out) instead of that Actor's always-on Standby REST API.

  • Real place data — name, coordinates, address, rating, review count, phone, website, hours, category, and more, straight from Google's servers
  • Autocomplete — the same search-as-you-type predictions the app shows while typing, with resolved place IDs and coordinates where available
  • Batch-friendly — run many searches and/or suggestion lookups in a single Actor run
  • Use cases: local business lead generation, market/competitor research, place-data enrichment, address/POI autocomplete for your own app

How it connects to the parent

This Actor ports the search() and suggest() logic (and the shared gRPC/protobuf plumbing) verbatim from Google Maps All-in-One API, which exposes those two endpoints plus place detail, reviews, directions, live traffic, reverse geocoding, photos, shareable links, EV reference data, and a business category catalog as an always-on REST API. If you need those other endpoints, or prefer calling a REST API on demand instead of running a batch Actor, use the parent.

Input

At least one of searches or suggestions must be a non-empty array.

searches[]

FieldTypeRequiredDescription
querystringyesSearch text, e.g. coffee, pizza restaurant.
latnumberyesLatitude to search near.
lngnumberyesLongitude to search near.
maxResultsintegernoMax results to return. Default 20.
radiusKmnumbernoSearch radius in kilometers. Default 50.
languagestringnoBCP-47 language code, e.g. en-US. Default en-US.
openNowbooleannoOnly places currently open (applied client-side, see Known limitations).
minRatingnumbernoOnly places with rating >= this value (applied client-side).
categorystringnoCase-insensitive substring match against place categories, e.g. coffee (client-side).

suggestions[]

FieldTypeRequiredDescription
querystringyesPartial text as the user would type it, e.g. White Hous.
latnumbernoBiases suggestions toward this location. Default 0.
lngnumbernoBiases suggestions toward this location. Default 0.
radiusKmnumbernoDeclared for parity with the upstream API; not currently wired into the request (mirrors the parent Actor).
languagestringnoBCP-47 language code, e.g. en-US. Default en-US.

Example:

{
"searches": [{ "query": "coffee", "lat": 38.8977, "lng": -77.0365, "maxResults": 5 }],
"suggestions": [{ "query": "White House", "lat": 38.9, "lng": -77.03 }]
}

Output

One dataset row per result item, tagged with queryType and the originating query.

Search result row:

{
"queryType": "search",
"query": "coffee",
"lat": 38.8977,
"lng": -77.0365,
"placeId": "0x89b7b7bcdecbb1df:0x715969d86d0b76bf",
"name": "Compass Coffee",
"fullAddress": "1535 7th St NW, Washington, DC 20001, United States",
"rating": 4.6,
"reviewCount": 812,
"categories": ["Coffee shop"]
}

Suggestion row:

{
"queryType": "suggestion",
"query": "White House",
"fullText": "White House, Pennsylvania Avenue Northwest, Washington, DC, USA",
"primaryText": "White House",
"placeId": "0x89b7b7bcdecbb1df:0x715969d86d0b76bf",
"lat": 38.8976763,
"lng": -77.0365298
}

Known limitations

  • searches results can be biased toward the US (Ashburn/Sterling, VA) regardless of the lat/lng you pass. Confirmed on the parent Actor via a live A/B test: the real Google Maps Android app, run from a phone physically in Jakarta, correctly returns Jakarta-area results for the same query — but the identical request sent from Apify's infrastructure returns US results instead. This reproduces across independently-built actors and execution models, so it isn't a bug in the request-building code — Google's backend appears to weight the caller's IP geolocation over the request's explicit coordinates for unauthenticated requests, and Apify's compute runs in AWS us-east-1 (Ashburn, VA).
  • openNow/minRating/category filters on searches are applied client-side, not passed through to Google's servers — there's no server-side filter parameter for these. Filtered requests fetch more raw results under the hood so filtering still returns close to maxResults, but a very narrow filter on a sparse area can come back with fewer results than requested.
  • Place detail, reviews, directions, live traffic, reverse geocoding, photos, shareable links, EV reference data, and the business category catalog are not exposed here — use Google Maps All-in-One API for those.

Pricing

Pay per event, via the result event — charged once per place result or suggestion pushed to the dataset, starting at $0.001 (FREE tier). See the Actor's Pricing tab for current rates.