Google Maps Scraper Pro – Reviews, Photos & Place Details
Pricing
from $1.20 / 1,000 scraped places
Google Maps Scraper Pro – Reviews, Photos & Place Details
Google Maps places with rating, review count, hours, categories, phone, website, GPS and cid/kgmid IDs. Add-ons billed only when used: detail page (star distribution, review topics, plus code), reviews (about 5 per place), photos, website e-mails. Standard input field names. $3.20 per 1,000 places.
Pricing
from $1.20 / 1,000 scraped places
Rating
0.0
(0)
Developer
Badr Bouargan
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Features
Share

What it does. Google Maps Scraper Pro extracts the full Google Maps record of each place — name, address, phone, website, rating, review count and star distribution, review topics, opening hours, categories, coordinates, plus code, placeId / cid / fid / kgmid — and, as add-ons, the place's reviews, photos, detail page and the e-mails and social profiles found on its website. No API key.
The problem it solves. The search list of Google Maps only gives the basics; reviews, photos and the detailed record sit on each place's own page. Pro opens that page only when you ask for it and bills it only when it is delivered, so you get rich data without paying for what you do not use.
Who it is for. Market and location analysts, local SEO and reputation agencies, hospitality and retail teams watching competitors, data teams who need stable Google identifiers, and developers who already use the standard Google Maps scraper input (searchStringsArray, locationQuery, maxCrawledPlacesPerSearch…) and want it to run unchanged.
What you get. title, categoryName, address, city, postalCode, countryCode, location, plusCode, phone, website, totalScore, reviewsCount, reviewsDistribution, reviewsTags, openingHours, additionalInfo, placeId, cid, kgmid, imageUrl (Google's main photo of the place, included with every search result, null when it has none) — and with add-ons reviews (text, stars, date, reviewer, owner response), images, email, social links. Output example below.
How to start.
- Open the Actor on the Store: apify.com/badr_xba/google-maps-scraper-pro — or try the ready-made task from the Actor page.
- Type a search term (
restaurant) and a location (New York, USA); set Number of reviews or Number of images if you want them. - Press Start and download JSON, CSV or Excel — reviews also come one per row in the Reviews view.
Why choose it.
- Standard input field names: an input written for the most popular Google Maps scraper of the Store runs here as it is; options that are not available are ignored and never billed.
- Modular pay-per-event: $3.20 per 1,000 places, and each add-on (details, reviews, images, contacts, filters) is billed only when you turn it on and only for what is delivered.
- Per-place price 20% below the Store's leading Google Maps scraper on the Free, Starter, Scale and Business plans ($3.20 vs $4.00 per 1,000 on Free, as listed on both pricing tabs on 2026-11-07; add-ons are priced separately).
- Past Google's limit: cities and regions are split into smaller squares; custom GeoJSON areas accepted; duplicates delivered once.
- Honest limits: about 5 reviews per place (what Google sends with the place) — see limits.
How much it costs. $3.20 per 1,000 places on the Free plan ($2.40 Starter, $1.60 Scale, $1.20 Business). Example: 1,000 restaurants with 5 reviews each ≈ $3.20 + $1.60 (place details) + $2.00 (5,000 reviews) = $6.80 on the Free plan. Full pricing.
Which of the three Google Maps Actors should I pick?
| You need | Pick |
|---|---|
| Lead lists with e-mails, worldwide, one flat price per place (e-mails and filters included) | Google Maps Leads Scraper |
| Reviews, photos, star distribution, Google identifiers, GeoJSON areas, standard input names | This Actor — Google Maps Scraper Pro |
| French businesses: one option sweeps 226 French cities, results in French | Google Maps Scraper France |
What can it do?
- 🎯 Generate leads: business names, phones, websites, emails and social profiles
- 📊 Track competitors: ratings, reviews count, reviews distribution and review topics
- 🗺️ Analyse markets: every pizzeria of a city, every dentist of a region, places with no website
- 🔗 Scrape any input: search term + location, Google Maps URLs, place IDs, custom GeoJSON areas
- ⭐ Reviews and images of each place (add-ons)
- 📤 Export to JSON, CSV, Excel, XML or HTML, or use the API, webhooks, Make, Zapier, n8n and the Apify MCP server
What data does it extract?
| 🔗 Title, category, all categories | 📍 Address, street, city, state, postal code, country | 🌍 Coordinates, plus code |
| ☎️ Phone (formatted and international) | 🌐 Website | ⭐ Rating (totalScore) and reviews count |
| 📊 Reviews distribution (1–5 stars) | 🏷️ Review topics (reviewsTags) | 🕒 Opening hours, open at scrape time |
| 🔒 Temporarily / permanently closed | ➕ Additional info (services, accessibility, payments…) | 📝 Description and owner description |
| 🆔 placeId, cid, fid, kgmid | 🖼️ Main image and images | 💬 Reviews: text, stars, date, reviewer, owner response, photos |
| 📧 Emails from the website | 👥 Facebook, Instagram, LinkedIn, X, YouTube, TikTok | 🛵 Order online link |
How to use it in 3 steps
- Type one or more search terms (restaurant, dentist, hotel…) — or directly
dentist in Chicago, a Google Maps link or a place ID. - Type a location (New York, USA) — or use country / city / postal code, GPS coordinates or a custom GeoJSON area.
- Click Start, then download your data (set the number of places and the add-ons first if you want).
Tip: use distinct search terms (restaurant, bar, cafe) rather than synonyms (restaurant, restaurants): synonyms only make the run longer.
Every input you can paste
The input is tidied silently — extra spaces, duplicates, bullets, a list pasted on one line — so you can paste straight from a spreadsheet.
| You paste | What happens |
|---|---|
restaurant + location New York, USA | Restaurants in New York |
dentist in Chicago, plombier à Lyon | The location is read from the search term |
restaurant, bar, cafe on one line | Three search terms |
https://www.google.com/maps/search/pizza/@40.75,-73.98,14z | "pizza" in the area shown on the map |
https://www.google.com/maps/search/pizza (no coordinates) | "pizza" in your Location |
Place link …/maps/place/…, ?cid=…, maps.app.goo.gl/…, ?q=place_id:… | That place with its details, one row |
ChIJ… or place_id:ChIJ… | That place with its details, one row |
Location 40.7128, -74.0060 or 10001, USA | Searched around that point / postal code |
Entries that cannot be used (non-Google link, expired short link, unknown location, malformed place ID) are skipped with a warning and listed in FAILED_INPUTS — never billed, and they never make the run fail. An empty input runs the demo search (20 restaurants in New York) instead of failing.
Input example
{"searchStringsArray": ["restaurant"],"locationQuery": "New York, USA","maxCrawledPlacesPerSearch": 50,"language": "en","placeMinimumStars": "four","website": "withWebsite","scrapeContacts": true,"maxReviews": 5}
The input uses the same field names as the most popular Google Maps scraper of the Store, so an existing input works as it is.
Output example

Screenshots from a real platform run.
{"searchString": "pizza","rank": 2,"title": "SIMÒ PIZZA - MIDTOWN","imageUrl": "https://lh3.googleusercontent.com/grass-cs/AABkmL…=w408-h306-k-no","categoryName": "Pizza restaurant","address": "…, New York, NY 10018","city": "New York","postalCode": "10018","countryCode": "US","phone": "(646) 000-0000","website": "https://simopizza.com/","totalScore": 4.7,"reviewsCount": 610,"reviewsDistribution": { "oneStar": 12, "twoStar": 6, "threeStar": 14, "fourStar": 60, "fiveStar": 518 },"plusCode": "Q26C+7F New York","placeId": "ChIJ…","cid": "9027705500530585310","kgmid": "/g/11v3yv8j5s","email": "info@simopizza.com","openingHours": [{ "day": "Monday", "hours": "11 AM–11 PM" }],"reviews": [{ "stars": 5, "text": "…", "publishAt": "3 months ago", "isLocalGuide": true }]}
Views: Overview, Contacts (leads) and Reviews (one review per row, also via &view=reviews in the API). Every run writes RUN_SUMMARY (places, add-ons billed, searches) and FAILED_INPUTS (inputs that gave nothing — never billed — each with a stable errorCode: INVALID_INPUT, INVALID_URL, SHORT_LINK_EXPIRED, NO_SEARCH_TERM, INVALID_PLACE_ID, INVALID_AREA, NO_AREA, AREA_NOT_FOUND, GEOCODING_FAILED, PLACE_NOT_FOUND, BLOCKED, PARTIAL_BLOCKED, UNEXPECTED_ERROR).
Visual report
Every run also saves a visual report: one HTML page that shows your places as business cards instead of rows.
- Business cards: name, category, star rating and review count, address, phone, website, e-mail and social profiles (when website contacts are on and the site publishes them), opening state with the full weekly hours, rank on Google Maps and a link to the place on Google Maps. Photos: the place's main photo (
imageUrl, sent with every search result) is shown on its card; with Maximum images on, click it to browse the place photos in full size (arrows, ← → Esc, swipe on mobile). Places without a photo on Google show a designed category tile, never a stock image. With place details, the card also shows the review distribution (5★ to 1★) and the price level. - Key figures and charts: places, average rating, reviews, share with phone, website and e-mail; rating distribution, top categories and top cities. They follow your filters; click a bar to filter.
- Search, filters and sorting: search names, categories, addresses and phones; filter by category, city, minimum rating, has website / phone / e-mail, open at scrape time, price level and search term; sort by Google rank, rating, reviews or name. Card or table view.
- Export: download the filtered places as JSON or CSV, or the full dataset as JSON, CSV or Excel.
- Searches or areas that failed are listed at the top, grouped by error code (they are not billed).
- Live progress: while the run is going, the page shows the searches done out of the total and the places saved so far, and refreshes itself every 30 s.
- Data-quality panel: how complete the key fields are (name, phone, website, e-mail, address, category, rating, reviews, opening hours) and the share of places with a photo. It measures completeness, not accuracy.
- At most 3 photos per place in the page (the main photo first); the dataset keeps every image you asked for with Maximum images.
How to open it: in the run, go to the Output tab and choose Visual report (or open the REPORT record of the key-value store).
Photos are shown straight from Google in your browser; nothing is re-hosted. The report holds the first 2,000 places of a run; the full dataset is one click away. Saving the report is never billed and can never make a run fail.
Pricing
Pay per event. Platform usage is included. Add-ons are billed only when you turn them on, and only for what is actually delivered.
| Event | Free | Starter | Scale | Business |
|---|---|---|---|---|
| Scraped place | $3.20 / 1,000 | $2.40 / 1,000 | $1.60 / 1,000 | $1.20 / 1,000 |
| Add-on: Filter applied (per place, any filter) | $0.80 / 1,000 | $0.80 / 1,000 | $0.60 / 1,000 | $0.424 / 1,000 |
| Add-on: Place details (per detailed place) | $1.60 / 1,000 | $1.60 / 1,000 | $1.20 / 1,000 | $0.84 / 1,000 |
| Add-on: Company contacts (per website read) | $1.60 / 1,000 | $1.60 / 1,000 | $1.20 / 1,000 | $0.84 / 1,000 |
| Add-on: Review scraped | $0.40 / 1,000 | $0.40 / 1,000 | $0.296 / 1,000 | $0.208 / 1,000 |
| Add-on: Image scraped | $0.40 / 1,000 | $0.40 / 1,000 | $0.296 / 1,000 | $0.208 / 1,000 |
| Actor start | $0.00005 | $0.00005 | $0.00005 | $0.00005 |
Examples on the Free plan:
- 1,000 places, no add-on: $3.20.
- 1,000 restaurants with emails = $3.20 + up to $1.60 (contacts, billed only per website actually read) ≈ $4.80 at most. For e-mail lead lists only, Google Maps Leads Scraper includes contacts in $3.50 per 1,000.
- 1,000 places with 5 reviews each = $3.20 + $1.60 (place details, needed for reviews) + $2.00 (5,000 reviews) = $6.80.
Using any filter (categories, minimum stars, website, exact name, closed places) adds the filter add-on per delivered place. Cap any run with the number of places or a maximum cost per run.
Good to know (limits)
- Reviews: Google sends the most relevant reviews with each place — usually about 5 per place, which is the maximum here. For all reviews of a place, a dedicated reviews scraper is needed.
- Images: a few images per place (those Google sends with the place).
- Not available (accepted in the input, ignored, never billed): business leads enrichment, email verification, social media profile enrichment, AI competitor analysis, popular times, questions & answers, table reservation providers, places inside malls, web results, "scrape all places" without a search term.
- One area per search: a location must be given with search terms (or a custom area / search URL).
- Counts are a snapshot at the time of the run and can be lower than what you see when signed in to Google.
FAQ
How does it work? It reads the same public data your browser loads when you search Google Maps, splits large areas into smaller squares, and opens the place detail only when you ask for details, reviews or images.
Do I need a proxy? No. The Actor reads Google directly and switches to Apify datacenter addresses only when Google slows it down.
Can I scrape a whole country? Yes: set the country (or a large region) as the location; the area is split automatically. Large areas take longer — start with a city to check the results.
Is it legal? It scrapes only publicly available data, as any visitor sees it without signing in. You are responsible for complying with the site's terms and with data-protection law. Reviews and contacts can include personal data protected by the GDPR: collect them only for a legitimate reason, and turn off Include reviewers' data if you do not need it.
Pro or the Leads Scraper? Pick Pro for reviews, photos, place details, Google identifiers or the standard input names. Pick Google Maps Leads Scraper when you only need lead lists with e-mails: contacts and filters are included in its place price.
Can I get all reviews of a place? No — about 5 per place, the ones Google sends with the place. A dedicated reviews scraper is needed for full review histories.
Can I get one specific business? Yes: paste its Google Maps link (place link, ?cid= or maps.app.goo.gl) or place ID into Search term(s) or Google Maps URLs. One row, with its details.
Something does not work? Open an issue on the Issues tab with your run ID.
Troubleshooting
| Symptom | Fix |
|---|---|
| Fewer places than expected | Leave Number of places empty (all) and start with a city rather than a country |
Location not found on OpenStreetMap in FAILED_INPUTS | Write city, region, country or use GPS coordinates |
Google refused the requests | Run again, or set Proxy to the RESIDENTIAL group. Refused searches are not billed |
A link is listed in FAILED_INPUTS | Expired short link or non-Google link: open it in a browser and paste the full Google Maps address |
| Only ~5 reviews per place | That is what Google sends with a place (see limits above) |
| Warning about unknown or unavailable input fields | Options from another Actor: they are ignored and never billed |
Use it via API
Replace YOUR_API_TOKEN with your token from Apify Console → Settings → API & Integrations.
Python (pip install apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("badr_xba/google-maps-scraper-pro").call(run_input={"searchStringsArray": ["restaurant"],"locationQuery": "New York, USA","maxCrawledPlacesPerSearch": 50,"scrapeContacts": True,})for place in client.dataset(run["defaultDatasetId"]).iterate_items():print(place["title"], place["phone"], place.get("email"))
JavaScript (npm install apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('badr_xba/google-maps-scraper-pro').call({startUrls: [{ url: 'https://www.google.com/maps/search/pizza/@40.75,-73.98,14z' }],maxCrawledPlacesPerSearch: 20,maxReviews: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((p) => [p.title, p.totalScore, (p.reviews || []).length]));
cURL (waits for the run and returns the places)
curl -X POST "https://api.apify.com/v2/acts/badr_xba~google-maps-scraper-pro/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchStringsArray": ["dentist in Chicago"], "maxCrawledPlacesPerSearch": 20}'
Integrations
- Make, Zapier and n8n: start a run and send the places to any of their apps.
- Google Sheets, CRM (HubSpot, Salesforce, Pipedrive…): from the Integrations tab, or through Make, Zapier, n8n or the API.
- Webhooks: notify your service or Slack when a run finishes; read
RUN_SUMMARYfor the numbers. - AI agents (MCP): add the Actor to Claude, Cursor or any MCP client through the Apify MCP server —
https://mcp.apify.com/?actors=badr_xba/google-maps-scraper-pro. - Schedules: re-run weekly to follow ratings, review counts and new reviews of competitors.
Support
Found a bug or need a field? Open an issue on the Actor's Issues tab with your run ID; every report is read.
Feedback and reviews
If this Actor saved you time, a short review on its Store page helps other users find it. If something did not work as expected, please open an issue on the Issues tab with your run ID: we read every issue.
Legal
This Actor collects only publicly available data that anyone sees on Google Maps without signing in, and contact details businesses publish on their own websites. Automated access may conflict with Google's Terms of Service. Reviewer names, review texts, e-mails and phone numbers can be personal data: you are responsible for having a lawful basis under the GDPR (EU/UK) and similar laws, and for how you use them.