Google Reviews Monitor - Multi Location Review Alerts avatar

Google Reviews Monitor - Multi Location Review Alerts

Pricing

from $14.40 / 1,000 locations

Go to Apify Store
Google Reviews Monitor - Multi Location Review Alerts

Google Reviews Monitor - Multi Location Review Alerts

Watch the Google reviews of every location you look after and get only what changed: new and edited reviews, owner replies and rating drops, one row per location per run. Alerts go to Slack, Discord or any webhook. $0.015 per location checked, plus $1.00 per 1,000 new or changed reviews.

Pricing

from $14.40 / 1,000 locations

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Watch the Google reviews of every location you look after and get only what changed: new reviews, edited ones, fresh owner replies and a falling star rating, checked on a schedule and flagged when a low-star review sits unanswered. It can also draft a public reply for the urgent ones, on your own AI key.

Get the shape clear before you wire anything up. The dataset holds one row per location, not one row per review. That row carries the counts, the rating change, the themes and the urgent reviews in full. Every review it has ever seen goes to a named store and a named dataset on your own account, not into the run's dataset.

InputYour Google Business locations, each with a label and its Maps link
OutputOne row per location per run, with the urgent reviews nested inside it
CeilingUp to 1,000 of the newest reviews per location per run
Account neededNone to monitor. Your own Anthropic or OpenAI key only for the AI text
Price$1.00 per 1,000 new or changed reviews, plus $0.015 per location checked, $0.01 per AI summary or reply draft and $0.05 per HTML report on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,000 reviews, or about 330 location checks

🔍 What Google Reviews Monitor does

Each branch is its own Google Business profile, and a bad week at one of them is easy to miss when you have twenty. So this checks them all and tells you what moved.

Changes, not re-dumps. The first run for a location learns what is there. Every run after that reports only what appeared or changed: a new review, an edited one, a review going from unanswered to answered, a fall in the overall rating. State lives in a named key-value store, reviews-monitor-state, on your account, and the change records go to a named dataset, reviews-monitor-history.

Alerts. Put a Slack or Discord incoming webhook in webhookUrl and you get a short summary when something moved. Anything else gets plain JSON, which is what Zapier, Make and n8n want.

The AI part is optional and runs on your key. Summaries and reply drafts come from new or changed reviews only, never from history. Without a key you still get a plain summary, free.

📋 What data you get from each Google Business location

What you getField
Your label, Google's name for the place, and the link you gaveclientName, placeName, url
Whether the location could be read, and why notsyncStatus, error
Whether this was the baseline runisFirstRun
The headline numbers this runoverallRating, totalReviewCount
New, changed, negative, unanswered, newly answered and urgent, as countscounts
The rating before and after, and whether it fellratingChange
The words coming up most in new negative reviewsthemes
The negative, unanswered reviews in full, with a draft reply when drafts are onurgentReviews
A short briefing for the locationagencySummary
Whether anything happened worth telling someone abouthasSignal
A link to the rolled-up HTML reportreportUrl

▶️ How to scrape Google reviews for several locations

  1. Open Google Reviews Monitor and click Try for free.
  2. Open each branch on Google Maps, copy the address-bar link, and add it to Client locations to monitor with your own label. Replace the example.
  3. Leave Max reviews to load per location at 10, or raise it once for a backfill.
  4. Paste a Slack or Discord webhook into Webhook URL if you want alerts, then click Start.
  5. Once the first run looks right, put it on a schedule from the Schedules tab.

💰 How much does it cost to scrape and monitor Google reviews?

WhatPrice
A new or changed review processed$0.001
A location checked$0.015
An AI summary or reply draft generated$0.01
The rolled-up HTML report$0.05 per run

These are Free plan prices. Paid plans pay a little less on every line. On the free plan, the $5 Apify gives you each month covers about 5,000 processed reviews, or about 330 location checks.

The report charge fires on every run while weeklyReport is on, including a quiet run and a run where no location could be read. Switch it off if you do not read the HTML report, especially on a frequent schedule.

A location that could not be read is not charged as a check. The first run processes every review it loads, so keep maxReviewsPerRun small then unless you want the backfill. The AI text runs on your own Anthropic or OpenAI key, and that provider bills you for the tokens.

📥 What you give it

{
"locations": [
{
"clientName": "Acme Coffee, Downtown",
"googleMapsUrl": "https://www.google.com/maps/place/Acme+Coffee/@40.7185,-73.9571,17z/data=!4m7..."
}
],
"maxReviewsPerRun": 10,
"negativeRatingThreshold": 3,
"webhookUrl": ""
}
FieldDefaultWhat it is
locationsrequiredOne entry per location: clientName is your own label, googleMapsUrl is the public Maps link.
maxReviewsPerRun10Newest reviews to load per location each run. 10 suits a scheduled monitor.
onlyNewSinceLastRunonCurrently has no effect. Every run after the first reports only what is new or changed, on or off.
alertOnNewReviewsonCount a location as worth alerting on when it has any new review.
alertOnNegativeReviewsonFlag new reviews at or below the threshold.
negativeRatingThreshold3Stars at or below this count as negative.
detectRatingDropsonCompare the overall rating against last run and flag a fall.
trackOwnerRepliesonCurrently has no effect. Reply detection happens anyway.
generateAiSummaryonA short briefing per location, from the new reviews only. Plain and free without a key.
generateReplyDraftsoffDraft a public reply for each urgent review. Capped per run.
aiModelgpt-4o-miniGPT models need an OpenAI key, Claude models an Anthropic key.
anthropicApiKeynoneYour own Anthropic key. Stored as a secret.
openaiApiKeynoneYour own OpenAI key. Stored as a secret.
weeklyReportonRender one rolled-up HTML report and link it from every row. Read the cost note.
webhookUrlemptySlack, Discord or any endpoint that takes JSON.
proxyConfigurationleave it aloneOptional. Your own servers are used exactly as given.

Copy the Maps link out of your browser's address bar, the long /maps/place/... one. The form's example uses a short ?q=place_id: link, and that form does not identify the branch well enough: two locations written that way are tracked as though they were the same place, which gives wrong new-review counts on both.

📤 What you get back

A real row from a scheduled run on 26 September 2026, with the review texts and the report link cut short and one of the three urgent reviews left out:

{
"clientName": "Example. Googleplex",
"placeName": "Googleplex",
"url": "https://www.google.com/maps/place/?q=place_id:ChIJj61dQgK6j4AR4GeTYWZsKWw",
"isFirstRun": false,
"overallRating": 4.1,
"totalReviewCount": 9653,
"counts": { "new": 4, "changed": 0, "negative": 3, "unanswered": 4, "newOwnerReplies": 0, "urgent": 3 },
"ratingChange": { "before": 4.1, "after": 4.1, "delta": 0, "dropped": false },
"themes": ["google", "course", "one", "complete"],
"urgentReviews": [
{
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT213eldUQkROREZHZWpoNFdUTnRVV3RHYVhWUmRVRRAB",
"rating": 1,
"reviewerName": "Reviewer",
"relativeDate": "a month ago",
"text": "ONE OF MY ON GOING EMAIL BATTLES WITH GOOGLE WHILE TRYING TO COMPLETE ONE OF THEIR AI CERTIFICATIONS...",
"reason": "negative & unanswered"
},
{
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT25RNFUxQTNSRkp0TjI5RU9WWTVhVkZ0TVdsTlVuYxAB",
"rating": 1,
"reviewerName": "Reviewer",
"relativeDate": "a month ago",
"text": "Example review text.",
"reason": "negative & unanswered"
}
],
"agencySummary": "4 new reviews (avg 2.5*). 3 urgent need replies. themes: google, course, one, complete.",
"aiGenerations": 0,
"hasSignal": true,
"target": "gmaps:url:www.google.com/maps/place/",
"syncStatus": "ok",
"reportUrl": "https://api.apify.com/v2/key-value-stores/qpMTl0FkluYVVBYZs/records/latest-report.html?signature=..."
}
FieldHow to read it
counts.urgentNegative and unanswered. These are the ones in urgentReviews.
ratingChange.droppedtrue when the overall rating fell since the last run.
agencySummaryThe plain summary here, since this run had no AI key. With a key it reads like a short briefing.
targetThe key the location's history is stored under. A ?q=place_id: link always gives this same key, which is why the warning above matters.
relativeDateGoogle's own wording. No exact timestamp exists in that feed.

🧾 Reading the output

RowHow to spot itCharged as a location check
A location that was readsyncStatus: "ok"yes
A location that could not be readsyncStatus: "failed" with an errorno

Filter your alerting on hasSignal. A quiet run writes a row per location with hasSignal: false and empty counts, which is normal and not a fault.

The first run for a location is a baseline: it reports isFirstRun: true and sends no webhook. A failed location keeps its saved state, so the next run picks the same changes up.

💡 What people use it for

  • An agency watching every client's branches and getting one Slack message a morning.
  • A franchise spotting the one site whose rating slipped this week.
  • A support team pulling urgentReviews straight into a queue, with a draft reply attached.
  • Keeping a record of what changed, by reading the named history dataset rather than the run.

From a brand name to a morning alert, in three steps:

  1. Run Google Maps Scraper on a search like Acme Coffee in Chicago, IL and copy the name and placeUrl of each branch.
  2. Add each one to locations here, the name as clientName and the link as googleMapsUrl.
  3. Paste a Slack webhook into webhookUrl and schedule the run for every morning.

🚧 What it does not do

  • Some locations will not load on a given run, and then you get a failed row instead of counts. It is not charged as a check, and the next run tries again.
  • At most 1,000 reviews per location per run, the newest first. Older history past that is not read.
  • Review dates are Google's relative wording, like 2 weeks ago.
  • Deleted reviews are never reported. It sees what is there, not what left.
  • onlyNewSinceLastRun and trackOwnerReplies do nothing. Changes and replies are reported either way.
  • The saved state never prunes, so the named store grows the longer you run it.
  • A ?q=place_id: link cannot tell two locations apart. Use the full address-bar link.
  • It is not an official Google tool. Dami's Studio is independent and is not affiliated with or endorsed by Google, or by any other company named on this page.

🧭 Which Google Maps scraper do you need?

If you wantUse
Places from a search, with reviews optionalGoogle Maps Scraper
Reviews for a place you can link or name, with exact datesGoogle Maps Reviews Scraper
The photos and videos on a placeGoogle Maps Place Photos Scraper
Only what changed in your own locations' reviews, on a scheduleThis one
Businesses in Russia and the CIS, from Yandex MapsYandex Maps Scraper

❓ Questions people ask

How do I get only new Google reviews instead of the whole history?

Every run does that. The first run is the baseline; after that you get changes only.

Can it post to Slack?

Yes. Put a Slack incoming webhook in webhookUrl and the payload is formatted for it. Discord works the same way, and anything else gets plain JSON. Nothing is sent on a quiet run or on the first one.

Do I need an AI key?

Only for AI-written summaries and reply drafts. Everything else works without one.

Where are the individual reviews?

In urgentReviews on the row, and in the named reviews-monitor-history dataset on your account for everything else.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/google-reviews-monitor. Either way the run happens on your Apify account at the same price.

These are public reviews, and they carry personal data that GDPR and similar laws cover, so have a reason for keeping it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the Maps link of the location that misbehaved. The error text on a failed row usually names the problem on its own.