Google Maps Reviews Scraper - Unlimited Reviews Per Place avatar

Google Maps Reviews Scraper - Unlimited Reviews Per Place

Pricing

from $0.30 / 1,000 reviews

Go to Apify Store
Google Maps Reviews Scraper - Unlimited Reviews Per Place

Google Maps Reviews Scraper - Unlimited Reviews Per Place

Scrape unlimited Google Maps reviews from place URLs or IDs. Get ratings, full text, owner replies, sub-ratings, photos and reviewer details.

Pricing

from $0.30 / 1,000 reviews

Rating

0.0

(0)

Developer

Zen Studio

Zen Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Share

Google Maps Reviews Scraper | Unlimited Reviews Per Place, Owner Replies (2026)

41 fields per review, including the owner's reply and the reviewer's own Food, Service and Atmosphere scores.

Google Maps reviews scraper: unlimited reviews per place with rating, review text, owner replies, reviewer sub-ratings and photos as structured JSON

Maps & Review Tools   •  Use one source or combine hotel reviews
 Google Reviews
➤ You are here
 Hotel Review Aggregator
Four sources, one dataset
 Apple Maps
Places, ratings and details
 Yandex Reviews
Reviews, replies and media

Copy to your AI assistant

zen-studio/google-maps-reviews-scraper on Apify. Scrapes every review of a Google Maps place, with owner responses and sub-ratings. Call ApifyClient("TOKEN").actor("zen-studio/google-maps-reviews-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Needs startUrls or placeIds; maxReviewsPerPlace=0 means the whole history. Full spec: GET https://api.apify.com/v2/acts/zen-studio~google-maps-reviews-scraper/builds/default (Bearer TOKEN) -> inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations

Key Features

  • No limit per place: set Reviews per place to 0 and the complete history comes back, however long it is. Rows stream out as they land, so a place with tens of thousands of reviews stays within 512 MB.
  • 41 fields per review: rating and its scale, full text, the owner's reply, per-question sub-ratings, translations, likes, photos and videos, Local Guide standing, and the place the review belongs to.
  • Filter at the source: keyword, date cutoff and sort are applied before delivery, so you are not billed for reviews you discard.
  • Partner reviews handled: Tripadvisor, Booking and Trip.com reviews arrive with their own rating scale, so an 8 out of 10 is never read as an 8 out of 5.
  • Free tier: 10 lifetime runs, 100 reviews per run, no credit card.

How to Scrape Google Maps Reviews

  1. Open Google Maps Reviews Scraper in the Apify Console and click Try for free.
  2. Paste your Google Maps place URLs into Start URLs, or place IDs into Place IDs.
  3. Set Reviews per place, or leave it at 0 to pull the complete history.
  4. Click Start, then download the reviews as JSON, CSV, Excel, XML or HTML.

Basic: the latest reviews for a place

{
"startUrls": [
{ "url": "https://www.google.com/maps/place/Hotel+Adlon+Kempinski+Berlin/@52.5161791,13.3805048,17z" }
],
"maxReviewsPerPlace": 100,
"reviewsSort": "newest"
}

Monitoring: only what changed since last week

{
"placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk"],
"newerThan": "7 days",
"maxReviewsPerPlace": 0
}

newerThan is measured from the moment the run starts, so a scheduled run keeps the same window instead of drifting behind a fixed date.

It compares each review's latest activity, not its original post date. A review edited this week comes back even if it was first posted years ago, which is what you want when watching for changes.

Complaints only

{
"placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk"],
"reviewsSort": "lowestRanking",
"maxReviewsPerPlace": 50
}

One topic across a portfolio

{
"placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk", "0x47a851db960e0eb1:0x6ce7f513876203dd"],
"reviewsKeyword": "parking",
"maxReviewsPerPlace": 0
}

Keyword matching works the way the search box on the Google Maps reviews panel does, so related wording is included, not just the exact word.

Input Parameters

ParameterTypeDefaultDescription
startUrlsarray[]Google Maps place URLs, including shortened maps.app.goo.gl links. Max 500
placeIdsarrayone example placeChIJ... place IDs or 0x...:0x... feature IDs. Max 500
maxReviewsPerPlaceinteger100Stop after this many per place. 0 for the complete history
reviewsSortstringnewestnewest, mostRelevant, highestRanking, lowestRanking
newerThanstring""A date (2026-08-01) or a rolling period (7 days). Forces newest first
reviewsKeywordstring""Keep only reviews about a topic
reviewsOriginstringallall, or google for first-party reviews only
languagestringenDisplay language for place names, categories and relative dates
countryCodestringusTwo-letter country code used when loading each place

Feature IDs need no lookup, so they start fastest. The Google Maps Scraper emits them as hexId.

What Data Can You Extract from Google Maps Reviews?

Every row carries its place, so the dataset is usable on its own with no join.

  • Review: reviewId, rating, ratingScale, text, textTranslated, language, translatedLanguage, date, publishedAtMicros, editedAtMicros, isEdited, likes, source, sourceIcon, reviewUrl
  • Owner reply: ownerResponse with its own text, date and language
  • Attributes: attributes[], the sub-ratings and chip answers the reviewer filled in (Food, Service, Atmosphere, Rooms, Location, price per person, trip type, wait time, parking)
  • Media: photos[] plus media[] with type, caption, capture date, dimensions and coordinates
  • Author: author, authorId, authorProfile, authorPhoto, authorReviewCount, authorPhotoCount, isLocalGuide, localGuideLevel
  • Place: placeName, placeRating, reviewsCount, primaryCategory, categories, address, addressFormatted, countryCode, latitude, longitude, placeId, hexId, googleMapsUrl

Output Example

{
"recordType": "review",
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2tkWFJWOXRVbkp5ZEVOb1JGcHFTR3h4TlhNMWRsRRAB",
"rating": 5,
"ratingScale": 5,
"date": "a week ago",
"publishedAtMicros": 1787263048020576,
"editedAtMicros": null,
"isEdited": false,
"text": "This one turned into a full Latin-food spread because nobody at the table could agree on one thing, which was honestl...",
"textTranslated": null,
"language": "en",
"translatedLanguage": null,
"likes": 0,
"source": "Google",
"sourceIcon": "https://www.gstatic.com/images/branding/product/1x/googleg_48dp.png",
"ownerResponse": {
"text": "Thank you so much for such a fun review! 🥂 Sounds like the perfect “order everything and share” kind of night: cevich...",
"date": "6 days ago",
"publishedAtMicros": 1787756409000000,
"language": "en"
},
"attributes": [
{
"key": "GUIDED_DINING_PRICE_RANGE",
"label": "Price per person",
"question": "How much did you spend per person?",
"rating": null,
"values": [
"$90–100"
]
},
{
"key": "GUIDED_DINING_FOOD_ASPECT",
"label": "Food",
"question": "Food",
"rating": 5,
"values": null
},
{
"key": "GUIDED_DINING_SERVICE_ASPECT",
"label": "Service",
"question": "Service",
"rating": 5,
"values": null
}
],
"media": [
{
"id": "CIABIhBcXh1w1Lv1bZjMlpky9qVP",
"caption": null,
"takenAt": "2026-08-20",
"date": "a week ago",
"latitude": 40.75683722983638,
"longitude": -73.99349376183964,
"type": "photo",
"url": "https://lh3.googleusercontent.com/grass-cs/ACvplmP6PRg9yN5VFq29XMKymDc2sNCu-94zbG5XarFLd003s0UM1zBi006x8derDy0MRN7roe...",
"width": 320,
"height": 320,
"durationMs": null
},
{
"id": "CIABIhC1Nwo3ebJZP-6_vrvcER16",
"caption": null,
"takenAt": "2026-08-20",
"date": "a week ago",
"latitude": 40.75683722983638,
"longitude": -73.99349376183964,
"type": "photo",
"url": "https://lh3.googleusercontent.com/grass-cs/ACvplmM1iJGmHnylX-vgKGy4nk7nibgEploD7eCalm0INy1yzGfShqfSVcBdVwaXmgOWCtE3gV...",
"width": 348,
"height": 348,
"durationMs": null
},
{
"id": "CIABIhC6VBo3VR3indeW-_uDqMwW",
"caption": null,
"takenAt": "2026-08-20",
"date": "a week ago",
"latitude": 40.75683722983638,
"longitude": -73.99349376183964,
"type": "photo",
"url": "https://lh3.googleusercontent.com/grass-cs/ACvplmPngX4DFyuMf3LNAdBrsEfOPjvVEn1p9Yj6RLKvHuTAyoQBg4scDeTb_tPnUfcpeyuEUi...",
"width": 1200,
"height": 756,
"durationMs": null
}
],
"photos": [
"https://lh3.googleusercontent.com/grass-cs/ACvplmP6PRg9yN5VFq29XMKymDc2sNCu-94zbG5XarFLd003s0UM1zBi006x8derDy0MRN7roe...",
"https://lh3.googleusercontent.com/grass-cs/ACvplmM1iJGmHnylX-vgKGy4nk7nibgEploD7eCalm0INy1yzGfShqfSVcBdVwaXmgOWCtE3gV...",
"https://lh3.googleusercontent.com/grass-cs/ACvplmPngX4DFyuMf3LNAdBrsEfOPjvVEn1p9Yj6RLKvHuTAyoQBg4scDeTb_tPnUfcpeyuEUi..."
],
"author": "Moali Timon",
"authorPhoto": "https://lh3.googleusercontent.com/a/ACg8ocJnOlG6L38fGzjtbFUdUY_aDWbVfSt73qw_y7IAan4hwrFNTg=s120-c-rp-mo-br100",
"authorProfile": "https://www.google.com/maps/contrib/115266825635927578667/reviews?hl=en",
"authorId": "115266825635927578667",
"authorReviewCount": 4,
"authorPhotoCount": 14,
"isLocalGuide": false,
"localGuideLevel": 3,
"reviewUrl": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2tkWFJWOXRVbkp5ZEVOb1JGcHFTR3h4...",
"placeId": "ChIJ__8ztFJYwokRm2x1-poe3ks",
"hexId": "0x89c25852b433ffff:0x4bde1e9afa756c9b",
"placeName": "Buena Vista Restaurant & Bar",
"googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ__8ztFJYwokRm2x1-poe3ks",
"address": "Buena Vista Restaurant & Bar, 536 9th Ave, New York, NY 10018",
"addressFormatted": "536 9th Ave, New York, NY 10018",
"latitude": 40.7568372,
"longitude": -73.9934938,
"placeRating": 4.7,
"reviewsCount": 1508,
"primaryCategory": {
"id": 8,
"slug": "restaurants"
},
"categories": [
"Latin American restaurant",
"Bar & grill",
"Cocktail bar"
],
"countryCode": "US"
}

Download the results as JSON, CSV, Excel, XML or HTML from the run's Storage tab, or pull them through the Apify API.

Advanced Usage

Ready-made configurations for review monitoring, reputation management, competitor tracking and sentiment analysis.

Track a portfolio daily

{
"placeIds": ["ChIJHQQciMZRqEcR2X4b8-vf5Bk", "0x47a851db960e0eb1:0x6ce7f513876203dd"],
"newerThan": "2 days",
"maxReviewsPerPlace": 0,
"reviewsOrigin": "google"
}

Pull a full history for analysis

{
"placeIds": ["0x47a851c6881c041d:0x19e4dfebf31b7ed9"],
"maxReviewsPerPlace": 0,
"reviewsSort": "newest"
}

Local-language reviews with local labels

{
"placeIds": ["0x47a851c6881c041d:0x19e4dfebf31b7ed9"],
"maxReviewsPerPlace": 200,
"language": "de",
"countryCode": "de"
}

How much does it cost to scrape Google Maps reviews?

$0.399 per 1,000 reviews on the Free and Bronze plans, falling automatically to $0.349 on Silver and $0.299 on Gold and above. A $0.05 start fee applies once per run.

ReviewsTotal cost
100$0.09
1,000$0.46

Reviews are charged as they are delivered, so a run that returns 40 reviews is charged for 40. Filtering by keyword, date or sort happens before delivery, so narrowing your input is the direct way to lower cost.

Free tier: 10 lifetime runs, 100 reviews per run, no credit card.

Keeping it running

Reviews arrive continuously, so this Actor earns its place on a schedule rather than as a one-off.

Suggested cadence. Daily with newerThan: "2 days" for active monitoring, or weekly with newerThan: "8 days" for reporting. The small overlap covers a missed run.

Where the rows go. The dataset connects to Google Sheets, Make, Zapier, Slack and plain webhooks from the Actor's Integrations tab. A webhook on run completion is the usual way to push new reviews straight into a helpdesk or an alerting channel.

How to run the scraper and put it on a schedule (official Apify videos):

FAQ

What is Google Maps, and what counts as a review here?

Google Maps is Google's mapping and local-business service, where visitors rate places from one to five stars and leave written reviews. This Actor returns those reviews for places you already have, one row each, including the reviews Google syndicates from partner sites such as Tripadvisor and Booking.

Does Google have an official reviews API, and why use this instead?

The Google Places API returns at most five reviews per place, with no owner replies, no reviewer sub-ratings and no partner reviews. This Actor returns the complete history with all 41 fields, and needs no Google Cloud project, billing account or API key.

How many reviews can I extract per place?

There is no cap. Set Reviews per place to 0 and the complete history comes back; places with tens of thousands of reviews stream through in bounded batches.

How do I find the places to feed in?

Paste Google Maps URLs, or use Google Maps Scraper to find places by search term and location and feed its placeId or hexId values straight in here.

Can I search for places from this Actor?

No, this one starts from places you already have. Google Maps Scraper does the discovery, and Google Maps Directions & Routes API covers travel times between them.

How do I export the data?

JSON, CSV, Excel, XML or HTML from the run's Storage tab, or through the Apify API. JSON preserves the nested ownerResponse, attributes and media fields exactly; CSV flattens them.

The Actor collects only publicly visible information. Reviews contain personal data such as author names and profile links, so you are the controller under GDPR, CCPA and equivalent laws, and you need a lawful basis to process them. Using the output is your responsibility, and so is compliance with Google's terms.

Why is a partner review's rating not out of 5?

Syndicated reviews keep their source's scale. ratingScale tells you what the number is out of, so always read rating together with ratingScale.

What are attributes on a review?

The structured answers reviewers give alongside the stars: Food, Service and Atmosphere scores for restaurants, Rooms and Location for hotels, plus chips such as trip type, price per person, wait time and parking. Each entry carries the question Google asked, so an unfamiliar key still explains itself.

Does it return reviews in one language?

Reviews come back in the language they were written in. Where Google offers a translation it is included as textTranslated, with both language codes.

What happens if a place cannot be loaded?

It is skipped and reported in the run log, and the rest of the run continues. If a place's history comes back only partially, the run says so explicitly rather than presenting it as complete.

What is the free tier?

10 lifetime runs, 100 reviews per run, no credit card.

More Zen Studio scrapers for maps & local data

Support

  • Bugs: Issues tab
  • Features: Issues tab

Extracts publicly available data. Users must comply with Google's terms and data protection regulations (GDPR, CCPA).


Google Maps reviews scraper: unlimited reviews per place with ratings, review text, owner responses, reviewer sub-ratings, photos and videos, exported to CSV, JSON or Excel.