Google Maps Scraper - Fast
Pricing
from $0.25 / 1,000 review scrapeds
Google Maps Scraper - Fast
Google Maps Reviews Finder
Extract public Google Maps reviews and place-level rating statistics from one or more direct place URLs. Get review text, star ratings, exact dates, reviewer profiles, review photos, owner responses, place identifiers, and the complete one-to-five-star distribution in structured data.
The Actor uses lightweight HTTPS requests and writes one dataset item per place,
with its reviews nested in the reviews array. Results are ready to use through
the Apify API or download from the dataset in JSON, CSV, Excel, XML, and other
supported formats.
For very large places, Apify's 9 MB maximum size for one dataset item would make one nested place record impossible to save. In that case, the Actor switches automatically to one dataset item per review. This is lossless: every review is returned with its place details, and no reviews are dropped because of the item size limit.
Why use this Actor?
- Review-level pricing: pay $0.25 per 1,000 delivered reviews.
- Exact review dates: receive ISO timestamps instead of only relative labels such as "2 months ago."
- Flexible sorting: collect the newest, most relevant, highest-rated, or lowest-rated reviews.
- Place statistics: retrieve the overall rating, total review count, and one-to-five-star distribution—even without downloading individual reviews.
- Rich public review data: include reviewer profiles, review photos, and business-owner responses when available.
- Multiple places per run: process a list of direct Google Maps place URLs with one Actor run.
- Automation ready: integrate through the Apify API, schedules, webhooks, Make, Zapier, or your preferred data pipeline.
Common use cases
- Monitor customer feedback and reputation
- Find recent negative reviews that need attention
- Compare ratings and review trends across business locations
- Analyze competitors and local markets
- Build review dashboards and reporting workflows
- Export public review data for research or sentiment analysis
Quick start
Provide at least one direct Google Maps place URL:
{"startUrls": [{"url": "https://maps.google.com/?cid=9386448008816829753"}],"maxReviews": 100,"reviewsSort": "newest","language": "en","scrapeReviewsPersonalData": true,"streamReviews": true,"proxyConfiguration": {"useApifyProxy": true}}
Click Start and open the run's Dataset tab when it finishes.
Input options
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | Direct Google Maps place URLs, CID URLs, or maps.app.goo.gl share links. |
maxReviews | integer | 100 | Maximum reviews returned per place. Use 0 for place statistics only. |
reviewsSort | string | newest | Review order: mostRelevant, newest, highestRanking, or lowestRanking. |
language | string | en | Google Maps interface language, such as en, de, es, or fr. Review text is not translated. |
maxCrawledPlaces | integer | 100 | Maximum number of supplied place URLs processed in the run. |
scrapeReviewsPersonalData | boolean | true | Include public reviewer names, profile IDs, profile links, and avatar URLs. |
streamReviews | boolean | true in the Console form | Show completed reviews in the Dataset while the run is still active. Output uses individual review rows while streaming. |
requestDelaySecs | integer | 1 | Delay between review-page requests. Increase it if requests are rate-limited. |
proxyConfiguration | object | Apify Proxy | Proxy settings used to improve reliability during review pagination. |
allowedCountries | array | empty | Optional country allowlist using ISO-2 codes or country names. |
This Actor accepts direct place URLs; it does not discover businesses from a
free-text search query. Add each desired place to startUrls.
You can request up to 100000 reviews per place. The Actor returns every review
that Google makes accessible for the selected sort order, subject to your run's
spending limit and Google's availability of the data.
Sort orders
newest— newest reviews firstmostRelevant— Google's relevance rankinghighestRanking— highest ratings firstlowestRanking— lowest ratings first
Use newest when collecting reviews incrementally. Ranked Google views can
return fewer accessible reviews for very large places.
Watch reviews appear during a run
Keep Show reviews while scraping enabled to see each completed review page appear in the Dataset while the Actor is running. The run status message updates with the number of reviews saved so far. The log also reports every page with the newly extracted review count and the running total. Streaming uses the individual-review format shown below, so each visible row is a complete review with its place context.
For API callers that require one final nested place object, send
"streamReviews": false. Large final results still switch automatically to
lossless individual review rows when required by Apify's item-size limit.
Retrieve place statistics only
Set maxReviews to 0 when you need place details and the rating distribution
without individual reviews:
{"startUrls": [{ "url": "https://maps.app.goo.gl/YOUR_PLACE_LINK" }],"maxReviews": 0}
Output
Each successfully resolved place creates one dataset item:
{"title": "Example Business","address": "Main Street 1, Berlin, Germany","categories": ["Restaurant"],"categoryName": "Restaurant","location": {"lat": 52.52,"lng": 13.405},"totalScore": 4.2,"reviewsCount": 153,"reviewsDistribution": {"oneStar": 8,"twoStar": 4,"threeStar": 9,"fourStar": 31,"fiveStar": 101},"placeId": "ChIJ...","cid": "1234567890","fid": "0x...:0x...","url": "https://www.google.com/maps/place/?q=place_id:ChIJ...","reviews": [{"reviewId": "ChZDSUhN...","name": "Jane Doe","reviewerId": "123...","reviewerUrl": "https://www.google.com/maps/contrib/123...","profilePhotoUrl": "https://lh3.googleusercontent.com/...","reviewUrl": "https://www.google.com/maps/reviews/...","stars": 5,"text": "Great service and a friendly team.","language": "en","publishedAtDate": "2026-08-01T12:00:00Z","publishedAt": "a week ago","likesCount": 0,"responseFromOwnerText": "Thank you for your feedback!","reviewImageUrls": []}]}
Large-result format
When the nested place item would exceed Apify's 9 MB item limit, the Actor
automatically writes individual review items instead. Each review keeps its
place context, so the result remains easy to group by placeId:
{"placeId": "ChIJ...","title": "Example Business","address": "Main Street 1, Berlin, Germany","placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ...","reviewId": "ChZDSUhN...","stars": 5,"text": "Great service and a friendly team.","publishedAtDate": "2026-08-01T12:00:00Z","reviewUrl": "https://www.google.com/maps/reviews/..."}
Use the Reviews dataset view to browse this format in Apify Console. API
clients can identify it by the top-level reviewId field; the normal nested
place format has a top-level reviews array instead.
Place fields
The output includes the place name, address, categories, coordinates, overall rating, total Google review count, star distribution, Google Place ID, CID, feature ID, canonical Google Maps URL, and collected reviews.
Review fields
Available review information includes the review ID, rating, text, detected
language, exact publication timestamp, relative publication label, direct review
URL, reviewer details, public profile photo, review photos, and owner-response
text. Some fields can be null or empty when Google does not provide them.
Pricing
The primary pricing event is Review scraped:
| Event | Price | When it is charged |
|---|---|---|
| Review scraped | $0.00025 per review | For every review successfully delivered in the output. |
| Place scraped | $0.001 per place | For every resolved place with details and aggregate statistics. |
| Actor start | $0.00005 per start | Apify's standard Actor-start event. |
Therefore:
- 100 delivered reviews cost $0.025 in review events.
- 1,000 delivered reviews cost $0.25 in review events.
- Place and Actor-start charges are added separately.
The run will not charge for more reviews than it actually delivers. Apify may also show platform-usage costs separately if usage pass-through is enabled for the Actor.
Use the Actor through the API
You can run the Actor from any application using your Apify API token. Replace
YOUR_USERNAME with the Actor owner's Apify username.
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("YOUR_USERNAME/google-maps-reviews-finder").call(run_input={"startUrls": [{"url": "https://maps.google.com/?cid=9386448008816829753"}],"maxReviews": 100,"reviewsSort": "newest","language": "en",})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Install the client with:
$pip install apify-client
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor('YOUR_USERNAME/google-maps-reviews-finder').call({startUrls: [{ url: 'https://maps.google.com/?cid=9386448008816829753' },],maxReviews: 100,reviewsSort: 'newest',language: 'en',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Install the client with:
$npm install apify-client
Reliability and limitations
- Google Maps can change its public interfaces, so the amount and availability of data may change over time.
- Review text remains in the language written by the reviewer; the
languageinput does not translate it. - Deleted, private, or otherwise unavailable reviews cannot be returned.
- Reviewer information is limited to data publicly displayed by Google Maps.
- Some Google sorting modes may expose fewer reviews than the place's displayed total review count.
- Unresolvable URLs do not create a dataset item. Other valid URLs in the same run continue processing.
- The Actor returns public review photos but does not currently collect general storefront or place-gallery photos.
For larger runs, keep Apify Proxy enabled and consider increasing
requestDelaySecs if Google begins rate-limiting requests.
Responsible use
This Actor collects information publicly available on Google Maps. You are responsible for using the data in accordance with applicable laws, privacy and data-protection requirements, and the terms that apply to your use case. Avoid using personal data for spam, harassment, discrimination, or unlawful profiling.
Support
If a place cannot be resolved or the returned review count looks incorrect, open an issue from the Actor's Issues tab. Include the run ID, input URL, expected result, and relevant log messages. Do not include your Apify API token or other credentials.
When reporting an issue, sharing the run ID is normally enough for diagnosis.