Google Maps Reviews Scraper avatar

Google Maps Reviews Scraper

Pricing

from $0.30 / 1,000 review scrapeds

Go to Apify Store
Google Maps Reviews Scraper

Google Maps Reviews Scraper

Scrape Google Maps reviews by URL, data ID, Place ID, CID, or business name. Get rating, text, date, owner response, photos, and privacy-safe reviewer hashes. MCP/API-ready.

Pricing

from $0.30 / 1,000 review scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

21

Total users

3

Monthly active users

2 days ago

Last modified

Share

Google Maps Reviews Scraper — $0.30 per 1K Reviews

Google Maps Reviews Scraper is an Apify Actor for extracting reviews from a single Google Maps place target at a time. It accepts a Google Maps place URL, Place ID, Google Maps data ID or CID, or a business name plus location. Each dataset record represents one review and can include the rating, review text, publish date, owner response, photos, place metadata, and a privacy-safe reviewer hash. The Actor is available through Apify API and through Apify MCP.

Best fit and connected workflows

This Actor fits workflows that need review data for a specific place, such as reputation monitoring, sentiment analysis, and competitive review research. It is a focused review-extraction workflow, which makes it a clean fit when you already have a place URL, Place ID, CID, data ID, or a precise business name with a location hint.

When your workflow starts with business discovery or contact enrichment, a separate step can handle that before or after review scraping. For business contact data, use khadinakbar/google-maps-leads-scraper. This Actor stays centered on review records, review text, owner replies, and the place-level context around those reviews.

Practical scenario

Maya manages a neighborhood cafe and wants to review the newest customer feedback from Google Maps. She starts with the cafe's place URL, sets maxReviews to a moderate number, and chooses reviewsSort: "newest". The returned records include rating, text, publishedAtText, ownerResponse, reviewUrl, and sentimentHint. Maya uses sentimentHint to separate the newest positive and negative feedback, opens the reviewUrl for one recent review, and then prepares a response plan for the owner.

Input fields

FieldTypePurpose
startUrlsarrayGoogle Maps URLs for a single place, including place URLs, search URLs, CID URLs, and shortened Maps links.
placeIdsarrayGoogle Place IDs resolved to a place page and its reviews.
dataIdsarrayGoogle Maps internal 0x...:0x... data IDs and CIDs.
searchQuerystringBusiness name used with location to resolve one place.
locationstringCity, region, or country used to disambiguate searchQuery.
maxReviewsintegerMaximum reviews to scrape per place.
reviewsSortstringReview order: newest, mostRelevant, highestRanking, or lowestRanking.
reviewSearchQuerystringOptional keyword filter inside reviews, such as parking.
languagestringGoogle Maps UI language and review translation context.
countryCodestringTwo-letter Google region hint, such as US or GB.
includePersonalDatabooleanReturns reviewer name, profile URL, and photo URL when enabled.
proxyConfigurationobjectProxy settings for Google Maps requests.

Focused JSON input example

{
"startUrls": [
{
"url": "https://www.google.com/maps/place/?q=place_id:ChIJLU7jZClu5kcR4PcOOO_ouTY"
}
],
"maxReviews": 50,
"reviewsSort": "newest",
"reviewSearchQuery": "parking",
"language": "en",
"countryCode": "US",
"includePersonalData": false
}

Output fields

Each dataset item is one review.

FieldTypePurpose
reviewIdstringStable Google review identifier.
placeNamestringGoogle Maps business name.
placeUrlstringCanonical Google Maps place URL.
placeDataIdstring or nullGoogle Maps internal data ID.
placeAddressstring or nullPostal address shown on the place panel.
placeRatingnumber or nullPlace-level average rating.
placeReviewCountinteger or nullTotal review count reported by Google.
reviewerNamestring or nullReviewer display name when personal data is enabled.
reviewerUrlstring or nullReviewer profile URL when personal data is enabled.
reviewerPhotoUrlstring or nullReviewer profile photo URL when personal data is enabled.
reviewerHashstring or nullStable privacy-safe reviewer hash.
reviewerReviewCountinteger or nullLifetime review count if Google reports it.
ratinginteger or nullReview rating from 1 to 5.
textstring or nullReview body text.
languagestring or nullDetected review language code.
publishedAtTextstring or nullRelative date label as Google renders it.
publishedAtstring or nullApproximate ISO-8601 timestamp derived from the relative date.
ownerResponsestring or nullOwner reply text if present.
ownerResponseAtstring or nullApproximate timestamp for the owner reply.
likesCountinteger or nullNumber of likes if surfaced by Google.
photosarrayPhoto URLs attached to the review.
sentimentHintstringRating-based bucket: positive, neutral, or negative.
reviewUrlstring or nullPermalink to the review on Google Maps.
scrapedAtstringISO-8601 UTC timestamp when the record was scraped.
extractionSourcestring or nullInternal extraction route, either listugcposts or boq.

Illustrative output record

{
"reviewId": "ChZDSUhNMG9nS0VJQ0FnSURwLVlPajJBRRAB",
"placeName": "Joe's Pizza",
"placeUrl": "https://www.google.com/maps/place/...",
"placeDataId": "0x89c259a9b3117469:0xd134e199a405a163",
"placeAddress": "7 Carmine St, New York, NY 10014",
"placeRating": 4.6,
"placeReviewCount": 12847,
"reviewerHash": "b7c2f4e0c9d1...",
"rating": 5,
"text": "The classic slice was excellent.",
"language": "en",
"publishedAtText": "a month ago",
"publishedAt": "2026-03-25T13:24:00.000Z",
"ownerResponse": "Thanks for visiting!",
"ownerResponseAt": "2026-03-26T10:11:00.000Z",
"likesCount": 3,
"photos": [
"https://lh3.googleusercontent.com/..."
],
"sentimentHint": "positive",
"reviewUrl": "https://www.google.com/maps/...review...",
"scrapedAt": "2026-03-27T08:00:00.000Z",
"extractionSource": "listugcposts"
}

How it works

The Actor resolves each input into a Google Maps place target and then extracts reviews through browser-free Google Maps review RPC paths. The implementation uses Chrome TLS impersonation, BOQ fallback, data ID resolution, soft validation, and safe dataset pushes. The dataset stores one record per review, and the run summary is written to the OUTPUT key.

Pricing

This Actor uses Pay per event plus Apify platform usage. The primary event is Review scraped, and there is also an Actor Start event. Review scraping is billed per review scraped, while the Apify platform usage covers the run itself and the resources you allocate for execution.

For planning, imagine scraping one hundred reviews. That execution produces one hundred review events, plus the start event that applies when the Actor begins. Open the live Pricing tab on Apify for the current event breakdown and the exact pricing shown for this Actor.

Use with AI agents (MCP)

This Actor is available through Apify MCP as an Apify Actor tool for review extraction. The exact Actor identity is khadinakbar/google-maps-reviews-scraper.

Tool description: provide a Google Maps place target and receive structured review records with rating, text, owner response, photos, review metadata, and privacy-safe reviewer hashing. It is built for one place at a time, which makes it useful when an agent needs review data for a specific business and wants one record per review.

Extract reviews for this Google Maps place URL. Return the newesta bounded number of reviews, include the review text, rating, owner response, review URL, and a privacy-safe reviewer hash. Keep reviewer personal data disabled unless I explicitly request it.

Output interpretation:

  • sentimentHint is a rating-derived bucket, not a model-generated sentiment score.
  • publishedAtText is Google's relative date label.
  • publishedAt is an approximate ISO-8601 timestamp derived from that label.
  • reviewerHash remains available when reviewer personal data is hidden.
  • reviewUrl points to the specific review on Google Maps.
  • extractionSource shows the internal review path used for the record.

Provenance and scope:

  • Each record comes from one Google Maps place.
  • The Actor is designed for review extraction, not business contact data.
  • For business lead or contact enrichment, route that step to khadinakbar/google-maps-leads-scraper.

Pagination and cost guidance:

  • maxReviews controls how many reviews are requested per place.
  • Billing follows the number of scraped review events.
  • Use a lower maxReviews for testing and increase it only when you need a deeper review sample.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/google-maps-reviews-scraper').call({
startUrls: [
{
url: 'https://www.google.com/maps/place/?q=place_id:ChIJLU7jZClu5kcR4PcOOO_ouTY',
},
],
maxReviews: 25,
reviewsSort: 'newest',
includePersonalData: false,
});
const dataset = await client.dataset(run.defaultDatasetId).listItems({ clean: true });
console.log(dataset.items);

Best results and outcome guidance

For review monitoring, start with reviewsSort: "newest" so the returned sample reflects the latest feedback first. Use a direct Google Maps place URL, Place ID, or data ID when you already know the target place. Use reviewSearchQuery when you want reviews mentioning a specific topic such as a service issue or product feature. Keep includePersonalData disabled when you only need a privacy-safe review stream, and enable it only when your use case and legal basis require reviewer profile fields.

Continue the workflow

  • Then use Google Maps Business Profile Rank Checker to extend Google Maps Reviews Scraper — $0.30 per 1K Reviews research with a complementary monitor contract.
  • Then use Houzz Pros Scraper to extend Google Maps Reviews Scraper — $0.30 per 1K Reviews with a neighboring local-business research source when the brief calls for Houzz data.

Design note

I found that reviewId is always returned regardless of the includePersonalData setting, while reviewer name, profile URL, and profile photo URL are nulled when personal data is disabled.

FAQ

Can I start from a Google Maps URL, a Place ID, or a CID?
Yes. The Actor accepts Google Maps URLs, Place IDs, and Google Maps data IDs or CIDs. It also supports a business name plus location.

When should I use searchQuery instead of startUrls?
Use searchQuery when you know the business name and want the Actor to resolve the place with a location hint. Use startUrls when you already have the exact Maps URL.

How do I focus on a specific review topic?
Set reviewSearchQuery to a keyword such as parking or refund to narrow extraction toward matching reviews.

What if I need reviewer personal fields?
Set includePersonalData to true when your use case has a legitimate basis for those fields. The dataset will then include reviewer name, profile URL, and profile photo URL when available.

Which output field identifies the extraction route?
Use extractionSource, which can be listugcposts or boq.

Responsible use

Use this Actor only for publicly available Google Maps reviews and for lawful purposes. Review the applicable Google Maps terms and your privacy obligations before using reviewer data. When working with personal data, keep the data handling scope aligned with your documented purpose and legal basis.