Google Maps Reviews Scraper with Owner Replies & AI Insights avatar

Google Maps Reviews Scraper with Owner Replies & AI Insights

Pricing

from $0.30 / 1,000 review scrapeds

Go to Apify Store
Google Maps Reviews Scraper with Owner Replies & AI Insights

Google Maps Reviews Scraper with Owner Replies & AI Insights

Extract Google Maps reviews with owner replies, translations, photos and reviewer profiles from any place URL, Place ID or search. Optional AI summaries and per-review sentiment. Pay per result.

Pricing

from $0.30 / 1,000 review scrapeds

Rating

0.0

(0)

Developer

Maxence Bernerd

Maxence Bernerd

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Google Maps Reviews Scraper extracts every public review of any place on Google Maps — star rating, full text, Google's translation, date, photos, reviewer profile and the owner's reply — from a place URL, a Place ID or a plain search such as dentist in Lyon. Optional AI insights add a per-place reputation summary (sentiment, top praises and complaints, 12-month trend) and a per-review classification, generated by Claude. Pay only for what you get: a few cents per thousand reviews, no subscription.

What data does Google Maps Reviews Scraper extract?

One dataset row per review, with the place attached to every row so exports stay flat:

FieldDescription
placeId, placeName, placeUrlGoogle Place ID, name and canonical Maps URL of the place
placeRating, placeReviewCountOverall star rating and total number of reviews of the place
reviewId, reviewUrlStable review identifier and direct link to the review
ratingStars given by the reviewer (1–5)
text, textTranslated, originalLanguageReview text as written, Google's translation into your language (when the review is in another language), and the detected language
publishedAt, publishedAtTextExact publication timestamp (ISO 8601) and Google's relative label ("3 months ago")
likesCountNumber of "helpful" likes
reviewerName, reviewerUrl, reviewerReviewCount, isLocalGuidePublic reviewer profile (URL, review count and Local Guide status only with includeReviewerProfile)
ownerReplyText, ownerReplyTextTranslated, ownerReplyAtThe business owner's public response, its translation and date
imageUrlsPhotos attached to the review (full-size URLs)
aiSentiment, aiMainTheme, aiMentionsOptional AI classification (see below)
scrapedAtWhen the row was collected

When AI insights are enabled, one extra row per place with rowType: "place-summary" carries the reputation summary.

No e-mail addresses, phone numbers or any non-public data are collected.

How to scrape Google Maps reviews

  1. Open the Actor and paste one or more place URLs (any Google Maps link: full URL, maps.app.goo.gl short link, ?cid= link or place_id: link). You can also give Place IDs or search queries (italian restaurant + location Paris).
  2. Set Max reviews per place (default 100, 0 for all) and the sort order. To fetch only recent reviews, keep newest and set Only reviews newer than to a date or a period such as 30 days.
  3. Optionally enable AI insights (one summary per place) and/or AI classification (sentiment and themes on every review).
  4. Click Start. Reviews appear in the Output tab while the run progresses; download them as JSON, CSV, Excel or XML, or read them through the API.

The Actor handles Google's cookie consent, pagination, retries and session rotation on its own. Residential proxies (Apify Proxy) are on by default because Google blocks datacenter IPs.

Input examples

Scrape 200 most recent reviews of two places given by URL and Place ID:

{
"placeUrls": ["https://www.google.com/maps/place/Le+Comptoir+du+Relais/@48.8519,2.3386,17z"],
"placeIds": ["ChIJh-zejGjr9EcRjofGropl2Tk"],
"maxReviewsPerPlace": 200,
"sortBy": "newest"
}

Monitor the reviews of the last 30 days for every dentist found for a search, with AI classification:

{
"searchQueries": ["dentist"],
"location": "Lyon, France",
"maxPlacesPerQuery": 20,
"sortBy": "newest",
"reviewsNewerThan": "30 days",
"enableReviewClassification": true
}

Reputation audit of one business: all reviews, owner replies, reviewer profiles and an AI summary:

{
"placeIds": ["ChIJh-zejGjr9EcRjofGropl2Tk"],
"maxReviewsPerPlace": 0,
"includeReviewerProfile": true,
"enableAiInsights": true
}

Output example

{
"rowType": "review",
"placeId": "ChIJh-zejGjr9EcRjofGropl2Tk",
"placeName": "Centre Dentaire Lyon République",
"placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJh-zejGjr9EcRjofGropl2Tk",
"placeRating": 4.6,
"placeReviewCount": 1157,
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT2toNmMwSkdjV2xpZEVwQlNYZHpSV3RDVHpBeWVFRRAB",
"reviewUrl": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlR...",
"rating": 5,
"text": "Tout le personnel est top. Nous sommes toujours bien reçus, à l'écoute.",
"textTranslated": "All the staff are great. We are always well received and listened to.",
"originalLanguage": "fr",
"publishedAt": "2026-07-09T16:05:04.958Z",
"publishedAtText": "2 months ago",
"likesCount": 0,
"reviewerName": "Soso",
"reviewerUrl": "https://www.google.com/maps/contrib/113693588107109307242",
"reviewerReviewCount": 7,
"isLocalGuide": false,
"ownerReplyText": "Bonjour, nous vous remercions pour votre superbe retour 5 étoiles...",
"ownerReplyTextTranslated": "Hello, thank you for your wonderful 5-star review...",
"ownerReplyAt": "2026-07-10T16:10:07.000Z",
"imageUrls": [],
"aiSentiment": "positive",
"aiMainTheme": "staff professionalism",
"aiMentions": { "price": false, "service": true, "cleanliness": false, "waitingTime": false, "staff": true },
"scrapedAt": "2026-09-29T12:11:29.000Z"
}

How much does it cost to scrape Google Maps reviews?

Pricing is pay-per-event: you are charged only for results actually stored in your dataset. Platform usage (compute, proxies) is included.

EventPriceWhen it is charged
Actor start$0.00005once per run
place-scraped$0.01per place whose reviews were stored
review-scraped$0.0003 ($0.30 per 1,000)per review row
place-summary$0.03per AI summary produced (only with enableAiInsights)
review-classified$0.001per review classified (only with enableReviewClassification)

Examples (100 reviews per place):

ReviewsPlacesScraping onlyWith AI classificationWith AI summaries
1,00010$0.40$1.40$0.70
10,000100$4.00$14.00$7.00
100,0001,000$40.00$140.00$70.00

Failed places, empty places and failed AI calls are never charged. Set Maximum cost per run in the run options to cap spending: the Actor stops cleanly when the cap is reached and says so in the log.

AI insights

Enable Generate AI summary per place to get one place-summary row per place:

{
"rowType": "place-summary",
"placeName": "Le comptoir du Relais",
"reviewsAnalyzed": 80,
"overallSentiment": "mixed",
"sentimentScore": 0.32,
"positiveThemes": [
{ "theme": "Classic French dishes (tartare, onion soup)", "mentions": 21, "quote": "Best steak tartare I've had in Paris" }
],
"negativeThemes": [
{ "theme": "Inconsistent, sometimes dismissive service", "mentions": 14, "quote": "The waiter ignored us for 20 minutes" }
],
"representativeQuotes": ["..."],
"trend12Months": [{ "month": "2026-09", "averageRating": 4.3, "reviewCount": 12 }],
"trendSummary": "Ratings dipped to 3.4★ in January 2026 amid complaints about the new ownership, then recovered to 4.2–4.3★ from March onwards.",
"summary": "Food quality remains the main strength... Management should prioritize consistent service...",
"model": "claude-haiku-4-5"
}

Enable Classify each review with AI to add three fields to every review: aiSentiment (positive, neutral, negative), aiMainTheme (a short label such as waiting time or food quality) and aiMentions (whether the review talks about price, service, cleanliness, waiting time or staff). Reviews are processed in batches, in their original language.

Summaries are computed from up to 80 reviews per place (most recent first, negatives always represented). The 12-month trend is computed from the scraped dates and ratings, not by the model.

Use cases

  • Reputation audit — pull every review and owner reply of a business, spot unanswered negative reviews, measure response time.
  • Competitive benchmark — scrape the reviews of every competitor in a search area and compare themes, ratings and trends with the AI summary.
  • Multi-location monitoring — schedule a weekly run with reviewsNewerThan: "7 days" over all your locations and push new reviews to Slack, Google Sheets or your CRM.
  • Data for AI agents and LLM apps — clean JSON with stable IDs, translations and sentiment, ready for RAG pipelines or agents through the Apify MCP server.
  • Market research — analyze what customers say about a category of businesses in a city.

Using the Actor from code

Run it and read the results with the Apify API:

curl -X POST "https://api.apify.com/v2/acts/maxencebernerd~google-maps-reviews-ai-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"placeIds": ["ChIJh-zejGjr9EcRjofGropl2Tk"], "maxReviewsPerPlace": 50}'

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('maxencebernerd/google-maps-reviews-ai-scraper').call({
searchQueries: ['bakery'],
location: 'Bordeaux',
maxPlacesPerQuery: 5,
maxReviewsPerPlace: 100,
enableAiInsights: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((row) => row.rowType === 'place-summary'));

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("maxencebernerd/google-maps-reviews-ai-scraper").call(run_input={
"placeUrls": ["https://maps.app.goo.gl/example"],
"maxReviewsPerPlace": 200,
"sortBy": "lowest",
"enableReviewClassification": True,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["rating"], row["aiSentiment"], row["text"][:80])

MCP: use it from Claude, Cursor or any AI agent

The Actor is exposed through the Apify MCP server. Add it to your MCP client (example for Claude Desktop):

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=maxencebernerd/google-maps-reviews-ai-scraper",
"headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
}
}
}

Then ask your agent: "Get the 50 latest reviews of Le Comptoir du Relais in Paris and summarize the complaints." The agent calls the Actor, waits for the dataset and reads the rows.

Integrations

Every run can trigger Zapier, Make, n8n, Slack, Google Sheets, Google Drive, Airbyte, webhooks or any other Apify integration. The dataset is also readable through the LangChain and LlamaIndex Apify loaders for RAG use cases. Schedule the Actor from the Schedules tab for continuous review monitoring.

FAQ

Is it legal to scrape Google Maps reviews? The Actor only collects data that is publicly visible to anyone without logging in. Reviews are public statements and reviewer names are public profiles; no contact details are collected. You remain responsible for how you use the data, notably under GDPR when storing personal data such as reviewer names — the includeReviewerProfile option is off by default for that reason. Read Apify's legal guide to web scraping.

How fresh is the data? Every run fetches live data from Google Maps at the time it runs. Use sortBy: "newest" with reviewsNewerThan and a schedule to keep a dataset up to date at minimal cost.

Can I get all reviews of a place with tens of thousands of reviews? Yes, set maxReviewsPerPlace to 0. Google serves reviews in pages of 10, so plan roughly one minute per 500 reviews. For very large places, scraping in several runs by rating (sortBy: "lowest" / "highest") is often more useful than one huge run.

Why are some reviews missing? Google hides reviews it flags as spam and does not serve reviews without text on some sort orders. The count reported in placeReviewCount is Google's own figure, which includes reviews that are not displayed.

Does it work in my language? Yes. language controls the interface and translation language (textTranslated is filled whenever the review language differs from it); reviews are collected in every language.

What if Google blocks the run? The Actor detects Google's degraded pages, rotates proxy sessions and retries each place up to three times. Residential proxies in a European country give the most stable sessions; a failed place is logged, listed in the FAILED-SOURCES record of the key-value store and never charged.

Can I request a feature or report a problem? Use the Issues tab of the Actor. Custom extractions and integrations are available on request.