Research feedback for selected business locations.
Google Maps Reviews Scraper
Collect Google Maps reviews with ratings, text, publication dates and place references.
What you can do
Compare review themes and ratings.
Export reviews for your own reporting tools.
Set your sources
Open the scraper and enter your own URLs, search terms and limits.
Review & run
Check the cost estimate and confirm the task. Follow its progress in your account.
Use your data
Explore saved results and export CSV, JSON or XLSX. Downloads of saved results are free.
Sample data & output fields
These example values demonstrate the data shape; they are not a live scraper result. Available fields depend on the source, selected options and upstream data.
[
{
"reviewId": "example-001",
"rating": 4.5,
"text": "Illustrative content for this example.",
"publishedAt": "Example published at",
"placeName": "Example place name"
}
]| Field | Type | Description |
|---|---|---|
reviewId | string | Google review id |
rating | number | Stars given, 1 to 5 |
text | string | Review text as written (N/A for star-only reviews) |
publishedAt | string | Exact publish or last-edit time, ISO 8601 |
placeName | string | Place name |
Example input
This is the configured parser input. Replace the example sources with your own and review all limits before running.
{
"startUrls": [
{
"url": "https://www.google.com/maps/place/Katz%27s+Delicatessen/data=!4m2!3m1!1s0x89c2598f7ff4aa09:0x313547e757cb8cea"
}
],
"maxItems": 10,
"maxPlacesPerSearch": 5,
"sort": "newest",
"onlyWithText": false,
"onlyWithOwnerResponse": false,
"language": "en",
"concurrency": 3,
"proxyConfiguration": {
"useApifyProxy": false
},
"maxReviewsPerPlace": 100
}Explore input fields
| Field | Type | Notes |
|---|---|---|
startUrls | array | Place links copied from Google Maps (the long /maps/place/... URL, a maps.app.goo.gl share link, a ?cid= link, or a /maps/search/... link). |
maxItems | integer | Maximum total reviews saved across all places, up to 1,000,000. Also use the per-place limit to control the scope. |
maxPlacesPerSearch | integer | How many places each search term (or /maps/search/ URL) contributes. Google returns about 20 places per page. |
sort | string | Google's review order. "Only reviews newer than" always uses newest first. |
onlyWithText | boolean | Skip star-only reviews. |
onlyWithOwnerResponse | boolean | Keep only reviews that carry a response from the business. |
language | string | Reviews written in another language come with Google's translation into this one in textTranslated. The original text is always kept. |
concurrency | integer | How many places are read at the same time. |
proxyConfiguration | object | Off by default: Google answers these requests directly. If Google starts refusing, the run switches to Apify Proxy on its own. |
maxReviewsPerPlace | integer | Stop each place after this many reviews. Leave empty for every review Google shows. |
Run through the API
Create an API key in your account, send the input to the queued endpoint and use the returned task ID to retrieve results. Sending a live request uses credits.
curl --request POST 'https://extracto.cloud/api/v1/parsers/google-maps-reviews-scraper/queue' \
--header 'X-API-KEY: ext_your_api_key' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-binary @- <<'JSON'
{
"input": {
"startUrls": [
{
"url": "https://www.google.com/maps/place/Katz%27s+Delicatessen/data=!4m2!3m1!1s0x89c2598f7ff4aa09:0x313547e757cb8cea"
}
],
"maxItems": 10,
"maxPlacesPerSearch": 5,
"sort": "newest",
"onlyWithText": false,
"onlyWithOwnerResponse": false,
"language": "en",
"concurrency": 3,
"proxyConfiguration": {
"useApifyProxy": false
},
"maxReviewsPerPlace": 100
}
}
JSONYour next dataset starts here.
Choose your sources, review the price and run Google Maps Reviews Scraper.