Google Maps Reviews Scraper - Most Comprehensive avatar

Google Maps Reviews Scraper - Most Comprehensive

Pricing

from $0.04 / 1,000 reviews

Go to Apify Store
Google Maps Reviews Scraper - Most Comprehensive

Google Maps Reviews Scraper - Most Comprehensive

🔥 ~$0.04/1K reviews 🔥 The most comprehensive Google Maps review scraper. Extract reviews with ratings, text, translations, photos, author details, owner responses, structured dining/hotel/attraction data, and 65+ place fields. Supports keyword filtering, sorting.

Pricing

from $0.04 / 1,000 reviews

Rating

4.9

(11)

Developer

Kai

Kai

Maintained by Community

Actor stats

28

Bookmarked

883

Total users

253

Monthly active users

10 hours

Issues response

5 hours ago

Last modified

Share

Google Maps Reviews Scraper

Collect Google Maps reviews from canonical place or search URLs and from Place IDs. Each review can include its rating, text, language, dates, author, photos, owner response, structured details, and place reference.

What each run saves

StorageRecordUse it for
Default DatasetOne item per saved reviewReview text, rating, language, dates, author data, media, structured details, and owner responses
Default key-value storeOne place-* record per resolved placeFull place identity, address, contact data, ratings, hours, amenities, popular times, and related places

Each review repeats only a small place reference. Use the place-* record when you need the full business or location context. You can mix supported Maps URLs and bare Place IDs in one run.

Something not working? Please report it. We monitor the Actor, but Google occasionally changes its Maps API or page structure and some cases slip past us. These fixes are usually quick, please report helps us restore it fast.

Quick start

Enter one or more bare Place IDs or supported Google Maps URLs:

{
"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"]
}

The default run saves up to 20 reviews per place and sorts them by newest activity. You can mix supported URLs and Place IDs in one run.

More or all available reviews

Set a larger per-place limit:

{
"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],
"maxReviews": 100
}

Set maxReviews to 0 to collect all reviews available to the run. The Actor follows the continuation feed until it ends or repeats.

Monitor several places

The limit and sort order apply to each place. Dataset rows from different places can be mixed.

{
"urls": ["ChIJN1t_tDeuEmsRUsoyG83frY4", "ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],
"maxReviews": 100,
"sort": "newest"
}

Sort modes

ValueResult order
relevantMost relevant first
newestLatest review activity first. An edit time is used when present, otherwise the publication time.
highestHighest rating first
lowestLowest rating first

newest is the default. Date filters always use the publication timestamp, regardless of the selected sort mode.

Keyword and localisation

{
"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],
"searchQuery": "service",
"sort": "relevant",
"language": "ja",
"region": "JP"
}

Filter by date range

{
"urls": ["ChIJs0ZTJXyPGGAR3nco_Lv_q1Q"],
"reviewsNewerThan": "2026-01-01",
"reviewsOlderThan": "2026-06-30",
"sort": "newest",
"maxReviews": 0
}

Date values use standard date-time parsing. A date-only boundary resolves to 00:00:00.000Z; date-times can include Z or a UTC offset. The Actor preserves the supplied order when both boundaries are present, so an inverted range normally produces no matching reviews.

Input

urls is the only required field. Give one or more canonical google.com/maps/place or google.com/maps/search URLs, equivalent maps.google.com URLs, URLs with place_id=... or q=place_id:..., or bare Place IDs. Short share links are not accepted. Unsupported entries are skipped. The run must have at least one usable entry.

The complete examples below show filters, localisation, and several supported target forms.

Input reference

ParameterTypeDefaultEffect
urlsstring[]requiredGoogle Maps targets. The Actor keeps the input order and accepts a mix of supported forms.
maxReviewsinteger, 0 or more20Maximum saved reviews for each place. 0 removes the per-place limit.
sortrelevant, newest, highest, or lowestnewestSelects the Google review feed. Use newest when completeness is more important than ranking.
searchQuerystringnoneKeeps reviews that match a keyword or phrase.
reviewsNewerThandate stringnoneKeeps reviews on or after the parsed boundary.
reviewsOlderThandate stringnoneKeeps reviews on or before the parsed boundary.
languagestringenRequested Google language code.
regionstringUSRequested country or region code.
proxyConfigurationobject{"useApifyProxy":true}Optional connection settings for the run.

A date such as 2026-07-01 resolves to 2026-07-01T00:00:00.000Z. If the newer boundary is after the older boundary, the Actor normally returns no matching reviews. It does not reverse the values.

language and region accept values outside the examples; the Actor does not restrict them to a built-in list. Unknown top-level fields are ignored.

Output

The Actor writes two output types:

  • The default Dataset contains one review record for each saved review.
  • The default key-value store contains one place-* record for each resolved place. The key is normally place-{placeId}. The record includes the run's dynamic ratingBreakdown map.

Long arrays below keep one item. Square brackets mark values removed from the documentation, not values returned by the Actor. The selected examples are not saved Dataset or key-value-store records.

Review field groups

GroupRoot fields
Placeplace
Identity and datesreviewId, url, publishedAt, lastEditedAt, relativeDate
Text, language, and ratingtext, textTranslated, language, originalLanguage, translatedLanguage, originalLanguageName, translatedLanguageName, rating, reviewOrigin
Visit and review detailsvisitedIn, visitedYear, visitedMonth, details
Author and mediaauthor, photos
Response and run dataownerResponse, engagement, meta

Review field types

JSON typeRoot fields
object or nullplace, ownerResponse
stringreviewId
string or nullurl, publishedAt, lastEditedAt, relativeDate, text, textTranslated, language, originalLanguage, translatedLanguage, reviewOrigin, originalLanguageName, translatedLanguageName, visitedIn
numberrating
number or nullvisitedYear, visitedMonth
objectauthor, details, engagement, meta
object[]photos
ObjectField types
placename: string; placeId, address, googleMapsUri: string or null
authorname, id: string; url, avatarUrl, profileUrl, badgeLabel: string or null; reviewCount, photoCount, localGuideLevel, contributionCount: number or null; isLocalGuide, hasLocalGuideBadge, hasGuideProfile: boolean
photos[]id, aiDescription, uploadedAt: string or null; url: string; width, height, latitude, longitude: number or null
ownerResponsetext, textTranslated, language, originalLanguage, translatedLanguage, publishedAt, lastEditedAt, relativeDate: string or null
engagementlikes: number
metascrapedAt: string

details is an open map. Google can add keys, and each value can be a string, number, or string array.

Selected review fields

This redacted field example from The Ritz London contains an author, one review photo, hotel detail keys, and an owner response. It is not a saved Dataset item.

In this record, textTranslated, originalLanguage, translatedLanguage, originalLanguageName, translatedLanguageName, ownerResponse.textTranslated, ownerResponse.originalLanguage, ownerResponse.translatedLanguage, and ownerResponse.lastEditedAt are null.

Place field groups

GroupRoot fields
Identityname, hexId, placeId, cid, knowledgeGraphId, businessType, businessStatus, isClaimed, isChain
Address and positionaddress, shortAddress, addressComponents, area, neighborhood, plusCode, latitude, longitude, entranceLatitude, entranceLongitude, timezone, countryCode, containingPlaceId, relatedPlaces, subDestinations
Contact and linksphone, phoneIntl, website, websiteDomain, googleMapsUri, reviewsLink, menuLink, reservationLinks
Description and typedescription, subtitle, ownerDescription, thirdPartyDescription, categories, placeTypes, placeAttributes, localName, localLanguage
Owner and mediaownerName, ownerId, ownerAvatarUrl, profileImageUrl, photoTier, photos, coverPhotoUrl, streetViewUrl, streetViewPanoId, featuredReviews
Rating and pricerating, totalReviewCount, priceRange, priceLabel, reviewsSummary, reviewHighlights, reviewsPerRating, reviewTopics, ratingBreakdown, hotelStars
Hours and amenitiesbusinessHours, hoursStatus, popularTimes, typicalTimeSpent, amenities

Place field types

JSON typeRoot fields
stringname, hexId
string or nullplaceId, address, shortAddress, phone, phoneIntl, website, websiteDomain, description, timezone, countryCode, googleMapsUri, reviewsLink, menuLink, subtitle, ownerDescription, ownerName, ownerAvatarUrl, thirdPartyDescription, businessType, businessStatus, hoursStatus, ownerId, profileImageUrl, localName, localLanguage, knowledgeGraphId, area, neighborhood, plusCode, priceRange, priceLabel, reviewsSummary, coverPhotoUrl, streetViewUrl, streetViewPanoId, typicalTimeSpent, cid, containingPlaceId
number or nullrating, totalReviewCount, latitude, longitude, photoTier, hotelStars, entranceLatitude, entranceLongitude
booleanisClaimed
boolean or nullisChain
string[]categories, reservationLinks, reviewHighlights, placeAttributes, placeTypes, relatedPlaces
number[] or nullreviewsPerRating
objectaddressComponents, ratingBreakdown
object[]reviewTopics, photos, featuredReviews, amenities, subDestinations
object[] or nullbusinessHours
JSON value[] or nullpopularTimes
ObjectField types
addressComponentsneighborhood, street, city, postalCode, state, countryCode, floor: string or null
businessHours[]day, hours: string
reviewTopics[]keyword: string; mentionCount: number
photos[]url: string; width, height: number; caption: string or null
featuredReviews[]authorName, text: string; authorAvatarUrl, publishedDate: string or null; rating: number
amenities[]category, name: string; available: boolean
subDestinations[]name: string; dataId, knowledgeGraphId: string or null; categories: string[]; latitude, longitude, rating, reviewCount: number or null
ratingBreakdownobject with keys 1 through 5 and numeric counts

Selected place fields

This redacted field example uses values from the Eiffel Tower place-* record. It is not the saved key-value-store record.

The Eiffel Tower record includes the businessHours[] child shape. These smaller examples show optional fields that are empty in that record:

[
{
"name": "Sensō-ji",
"addressComponents": {
"neighborhood": "2 Chome Asakusa",
"state": "Tokyo"
},
"reviewHighlights": ["[review text removed]"],
"placeTypes": ["buddhist_temple"]
},
{
"name": "The Capital Grille",
"phone": "(212) 548-8338",
"phoneIntl": "+12125488338",
"reservationLinks": ["[reservation URL removed]"],
"reviewsSummary": "Diners like this restaurant's delicious steaks, including the bone-in filet and dry-aged options, along with popular sides like creamed spinach and truffle mac and cheese. They also highlight the elegant and upscale atmosphere, which is suitable for business meals and special occasions. Guests mention the staff provides attentive, professional, and friendly service, making for a memorable dining experience."
},
{
"name": "The Ritz London",
"hotelStars": 5
},
{
"name": "Times Square",
"neighborhood": "Manhattan",
"containingPlaceId": "0x89c258f52ad45a79:0x8131f549e8af76f4"
},
{
"name": "Starbucks Coffee Company",
"isChain": true,
"ratingBreakdown": {
"1": 1,
"2": 1,
"3": 1,
"4": 2,
"5": 5
}
}
]

In this place record, addressComponents.floor, menuLink, ownerName, ownerAvatarUrl, thirdPartyDescription, priceRange, priceLabel, reviewsPerRating, reviewTopics, photos, coverPhotoUrl, streetViewUrl, streetViewPanoId, featuredReviews, placeAttributes, popularTimes, and typicalTimeSpent are null or empty.

ratingBreakdown is a map whose keys can be 1 through 5. Child keys in popularTimes can change.

Use hasLocalGuideBadge for the author badge. hasGuideProfile has the same value and remains available for older integrations.

Review and place availability

Open the full place data

Open the default key-value store and select place-{placeId}, or place-{hexId} when no Place ID is available. Each review row repeats only name, placeId, address, and googleMapsUri.

Request localised reviews

Set language and region to request localised results. Original and translated text and language metadata are included when available.

When review and place records differ

A place can have no available reviews, or no review can match your keyword and date filters. When place metadata is available, the Actor still saves its place-* record.

A review can use place: null when the review is available but its full place record is not. One unavailable target does not remove rows already saved for other targets. The Actor continues with later targets and can finish the run successfully. An invalid input, a startup error, or an error while saving review or place data stops the run.

Input and filtering constraints

  • maxReviews applies to each place, not to the full input.
  • Short share links such as maps.app.goo.gl are not accepted. Use the expanded URL or a Place ID.
  • Date filters use the review publication time. Reviews without one are excluded.
  • Invalid date text causes the run to stop before collection.
  • Optional fields and available reviews can differ by language, region, place, and time.
  • ratingBreakdown describes reviews saved in this run. It is not the place's lifetime rating distribution.