Google Maps Scraper - Places, Phone, Website & Reviews
Pricing
Pay per event
Google Maps Scraper - Places, Phone, Website & Reviews
Scrape Google Maps places by search term and location: name, star rating, review count, category, address, opening hours, and optionally phone and website. Uses a real browser because Maps renders results client-side. Export CSV/JSON/Excel. No API key.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Flash Scrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Google Maps Places — Ratings, Reviews & Contacts
Scrape Google Maps by search term and location. Give it dentist + Austin, TX and get back each place's name, star rating, review count, category, street address, opening hours — and optionally phone number and website, which is what turns a directory into a contactable lead list.
No API key. No Google Cloud billing account.
Why this uses a browser
Google Maps serves no place data at all to an ordinary HTTP request. Measured: the search page returns ~200 kb containing zero business names, zero phones and zero addresses, because results render client-side. So this Actor drives a real anti-detect browser instead. That is slower and heavier than a plain HTTP scraper, and priced accordingly — but it is the only way to get this data without a paid Places API key.
What you get per place
| Field | Notes |
|---|---|
name | Business name |
category | Google's own category, e.g. Plumber, Dentist |
rating | 0–5 stars |
reviews_count | Total review count |
address | Street address as shown |
hours_summary | e.g. Open · Closes 8 PM, Closed · Opens 8 AM Mon |
is_open_now | Boolean, derived from the hours line |
phone | Requires fetchContactDetails |
website | Requires fetchContactDetails — Google redirect stripped |
plus_code, price_level | When shown |
place_id, maps_url | Stable identifiers for de-duplicating across runs |
search_term, search_location, scraped_at | Provenance |
Verified on a live run: plumber in Denver, CO returned 6/6 populated for name, category, address, rating, review count, phone, website, hours and place_id — with counts like 17,657 and 9,042.
Input
| Field | Type | Notes |
|---|---|---|
searchTerms | array | e.g. ["dentist", "orthodontist"] — each searched separately |
location | string | e.g. "Austin, TX". Combined as <term> in <location> |
maxPlaces | integer | Hard cap per run |
scrollDepth | integer | How many times to scroll the feed — this is what controls volume |
fetchContactDetails | boolean | Adds phone + website; one extra page load per place, charged separately |
minRating, minReviews | — | 0 = no filter |
onlyWithWebsite | boolean | Needs fetchContactDetails on |
proxyConfiguration | object | Recommended; the datacenter group is enough |
{"searchTerms": ["plumber"],"location": "Denver, CO","maxPlaces": 60,"scrollDepth": 8,"fetchContactDetails": true,"minReviews": 20}
Honest limits
- Volume comes from scrolling, not pagination. A fresh search shows ~7 places; scrolling grows it to ~25–30 per term. Raising
scrollDepthbeyond the point where no new places appear does nothing — the Actor detects that and stops early. To go wider, add more search terms or narrower locations, not a biggerscrollDepth. reviews_countis often missing from the results list. Many cards expose only4.8 starswith no count anywhere in the markup. The Actor recovers it from the place panel, so turn onfetchContactDetailsif you need review counts reliably. Without it, expect gaps.phoneandwebsiteare never in the results list — they exist only on the place panel, hence the separate flag and charge.- Rated ≠ reviewed. A place can show a rating on very few reviews; filter with
minReviews, notminRatingalone, to find genuinely established businesses. - This is a browser Actor. It needs ~4 GB memory (already set as the default) and is markedly slower per result than an HTTP scraper. A 1 GB run is killed by the browser's own memory use.
- If Google serves a consent or bot-check page, the Actor stops and reports how many places went unscraped rather than returning a short list that looks complete. You are only charged for places that returned data.
Use cases
- Local lead generation — filter by category, rating and review count, then pull phone and website for outreach.
- Competitor mapping — every rival in a metro with their ratings and review volume side by side.
- Franchise and territory research — run one term across several cities to compare density and quality.
- Review-volume benchmarking —
reviews_countseparates established players from new entrants far better than rating alone.
Pricing
Pay per result: per place delivered, plus a smaller contact-detail charge only for places whose panel was opened for phone and website. Places removed by your filters are not charged.
FAQ
Do I need a Google API key? No. The official Places API requires a billing account; this does not.
Why is reviews_count empty on some rows? Google omits it from the results list for many places. Enable fetchContactDetails and it is read from the place panel instead.
Can I get individual review text? Not in this Actor — it returns the rating and the count, not review bodies.
Why is it slower than your other scrapers? It runs a real browser, because Maps has no server-rendered data to parse.