Google Maps Scraper
Pricing
$4.00 / 1,000 place returneds
Google Maps Scraper
Scrape Google Maps places by search query — name, category, address, rating, review count, phone, website, lat/lng and place ID. Runs a real browser to get past Google's protections, scrolls the full results feed, and never charges for blocked or empty searches.
Pricing
$4.00 / 1,000 place returneds
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Search Google Maps and get clean, structured places — name, category, address, rating, review count, phone, website, lat/lng, and the place ID — for any query, anywhere.
Google Maps is one of the hardest targets on the web: the data the page shows is built by client-side JS and the internal API rotates its format constantly, which is why so many Maps scrapers return empty or break within weeks. This actor runs a real browser, lets Maps render its own results, scrolls the entire results feed, and reads the places straight from the rendered cards (stable) instead of reverse-engineering Google's protobuf (fragile).
Input
| Field | Notes |
|---|---|
searchQueries | One or more searches, location included in the text — coffee in Brooklyn, dentists near Eiffel Tower. |
searchQuery | A single search, if you prefer one box. |
maxItems | Places per query (scrolls the feed to reach it). |
language | Maps UI language (en, de, fr…). |
countryCode | 2-letter country for the residential proxy — match it to where you're searching. |
Output
One row per place: name, category, address, rating, reviewCount, phone, website, lat, lng, placeId (hex ftid), cid (decimal), placeUrl, searchQuery. Blocked or empty searches return a single coded diagnostic row (BLOCKED / NO_RESULTS) and are not charged.
Fields that can be null: Google only shows some fields on the results card, so website, phone, rating, reviewCount, category and address are frequently null even on otherwise-complete rows — this is Google omitting them on the card, not a scrape failure. name, placeUrl and (when present in the link) lat/lng/placeId/cid are the most consistently populated. You are still charged for these rows because they are genuine place results.
Pricing
Pay-per-result: you are charged once per place row returned. Blocked, empty, and bad-input runs emit an ok:false diagnostic row and are never charged.
Notes & troubleshooting
A residential proxy is required — Google captchas datacenter IPs and your own server IP fast. The actor rotates the whole browser + IP automatically when it hits a captcha. Phone/website are filled when Google shows them on the card; deep per-place fields (full hours, all reviews) are a planned add-on.
- Got a
BLOCKEDdiagnostic row? You're almost certainly on a datacenter IP or your own IP. Turn on Apify Proxy with the RESIDENTIAL group (the default) and set Proxy country to match where you're searching. Datacenter proxies will keep getting captcha'd. - Lots of
nullwebsite/phone? That's expected — Google doesn't put those on every results card. See the field note above.