Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Google Reviews Monitor — Multi-Location Alerts & Reports icon

Google Reviews Monitor — Multi-Location Alerts & Reports

Watch Google reviews for every location on a schedule. Get only the new ones, rating-drop alerts in Slack and AI reply drafts. $1.00 per 1,000 reviews.

5 from 1 review on Apify 157 runs on Apify $0.015 per location checked ($15 / 1,000)
Run this in the cloudRun on Apify →

Maps & Local Lead Generation

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust locations, maxReviewsPerRun, onlyNewSinceLastRun (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.015 per location checked = $15 per 1,000

You are charged forWhenPrice
Location checkedUser checked a location$0.015
Report generatedA report was generated$0.05
AI summary generatedAI summary generated$0.01
Review processedA review was processed$0.001

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-09, and they are what you are actually charged.

Inputs

FieldWhat it doesType
locationsOne entry per Google Business location. clientName is your label (e.g. the client/branch name); googleMapsUrl is the public Google Maps URL of the business. Tip: open the place on Google Maps and copy the URL from the address bar.array
maxReviewsPerRunHow many of the newest reviews to load per location each run. Higher = more thorough but slower and more expensive (each extra page of reviews is another scroll over the proxy). 10 is plenty for a scheduled monitor that only needs the latest deltas; raise it for a first-run backfill.integer
onlyNewSinceLastRunCore monitor behavior: each scheduled run emits only NEW or CHANGED reviews (deltas), not a full re-dump. Persisted between runs via the Key-Value Store.boolean
alertOnNewReviewsInclude locations with any new review in the notification/report signal.boolean
alertOnNegativeReviewsFlag new reviews at or below the negative rating threshold.boolean
negativeRatingThresholdReviews with a star rating at or below this value are treated as negative.integer
trackOwnerRepliesDetect when the business owner replies to a review (review changes from unanswered to answered).boolean
detectRatingDropsCompare each location's overall star rating against the previous run and flag drops.boolean
generateAiSummaryProduce a short, action-ready briefing per location from the NEW reviews (e.g. '2 urgent reviews need replies; main complaint: wait times'). Uses an LLM if a key is configured, otherwise a free rule-based summary.boolean
generateReplyDraftsDraft a professional public reply for each urgent (negative + unanswered) review. Capped per run to control cost.boolean
aiModelModel used for AI summaries/reply drafts (only when an API key is configured). GPT models need an OpenAI key; Claude models need an Anthropic key.string
anthropicApiKeyOptional. Bring your own Anthropic key to enable AI summaries/reply drafts with Claude. If left blank, the actor uses the ANTHROPIC_API_KEY environment secret (if the owner set one), then OpenAI, then a free rule-based summary.string
openaiApiKeyOptional. Bring your own OpenAI key to use GPT models instead of Claude. Used only if no Anthropic key is configured.string
weeklyReportRender a single multi-location HTML report to the Key-Value Store and link it from each dataset record.boolean
webhookUrlOptional. Receive a compact summary when there are changes. Auto-formats for Slack and Discord incoming webhooks; otherwise sends a generic JSON payload (works with Zapier/Make/n8n and email-via-webhook).string

What you get

A structured dataset — each result includes fields like:

clientNameoverallRatingcountsratingChangeagencySummaryreportUrlsyncStatus

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

4 ready-to-run use cases

Monitor Google Reviews for One Restaurant, Daily

A morning check of one Maps page reporting what moved since yesterday: new and negative counts, the rating change, and a link to an HTML report.

Negative Google Reviews Alerts for Client Locations

One row per client location per run, carrying the fresh low-star reviews nobody has answered yet. Quiet locations come back with nothing flagged.

Reply to Google Reviews With AI-Drafted Responses

Every new low-star review the owner has not answered comes back with a draft reply to paste. You supply your own OpenAI or Anthropic key.

Export Google Reviews for One Business as a Report

Reads up to 200 of a place's newest reviews and returns a summary row - counts, rating, themes, the unanswered low-star ones - plus an HTML report.

Related tools in Maps & Local Lead Generation

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

2GIS Places Scraper iconMaps & Local Lead Generation

2GIS Places Scraper

Scrape 2GIS places: name, category, address, phone, email, website, rating and hours. Russia, the CIS, the UAE and Cyprus only. $0.50 per 1,000 places.

Ready to run — no setup

2GIS Reviews Scraper iconMaps & Local Lead Generation

2GIS Reviews Scraper

Scrape 2GIS reviews by place URL or city: rating, text, author, date, photos, owner replies. No API key. $0.50 per 1,000.

Ready to run — no setup

Yelp Scraper iconMaps & Local Lead Generation

Yelp Scraper

Scrape Yelp businesses and reviews through Yelp's official Fusion API. Get rating, review count, price, phone, address, GPS and text. Bring your own key.

Ready to run — no setup

Google Maps Reviews Scraper iconMaps & Local Lead Generation

Google Maps Reviews Scraper

Scrape Google Maps reviews: rating, full text, exact date, reviewer, owner reply and photos. Set a date cutoff. No API key. $0.27 per 1,000.

1 use cases

Yandex Maps Scraper iconMaps & Local Lead Generation

Yandex Maps Scraper

Scrape Yandex Maps business listings: name, address, coordinates, rating, reviews, phone, website and hours. No API key. $0.40 per 1,000 places.

1 use cases

Google Maps Scraper iconMaps & Local Lead Generation

Google Maps Scraper

Scrape Google Maps places and reviews. Business name, category, address, rating, GPS coordinates and place ID. $0.27 per 1,000 rows.

28 use cases

See all Maps & Local Lead Generation →

Google Reviews Monitor: watch every branch's Google reviews and get only what changed

Give it a labelled list of your Google Business locations and it checks each one on a schedule, remembers what it saw last time, and reports only the new and changed reviews. It flags low-star reviews, spots when your overall rating drops, and can draft a public reply for the urgent ones.

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, urgent reviews nested inside it
CeilingAround 300 reviews per location is the practical reach, whatever you ask for
Account neededNone to monitor. Your own model key only for the AI text
Price$0.015 per location checked, plus $0.001 per new or changed review

🔔 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.

Deltas, not re-dumps. Each run reports what appeared or changed since the previous run. State lives in a named key-value store, reviews-monitor-state, on your account, and the per-review change records go to a named dataset, reviews-monitor-history.

What counts as a change. A new review. An edited one. A review going from unanswered to answered. A fall in the location's overall star rating.

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 drafts come from new or changed reviews only, never from history.

📥 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,
  "onlyNewSinceLastRun": true,
  "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. See below.
generateAiSummaryonA short briefing per location, from the new reviews only.
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. A short ?q=place_id: link does not identify the branch well enough here: two locations in that form are tracked as though they were the same place, which gives wrong new-review counts on both.

trackOwnerReplies is read from the form and then not used. Reply detection happens anyway, so leaving it on costs nothing, but switching it off switches nothing off.

📤 What you get back

One row per location, per run.

FieldWhat it is
clientName, placeName, urlYour label, Google's name for the place, and the link you gave.
syncStatusok when the location was read, failed when it was not. error explains a failure.
isFirstRuntrue on the baseline run for that location, when there is nothing to compare against.
overallRating, totalReviewCountThe location's headline numbers this run.
countsnew, changed, negative, unanswered, newOwnerReplies and urgent.
ratingChangebefore, after, delta and dropped.
themesThe words coming up most in the new negative reviews.
urgentReviewsThe negative and unanswered ones in full: reviewId, rating, reviewerName, relativeDate, text, reason, and suggestedReply when drafts are on.
agencySummaryThe short briefing for that location.
hasSignaltrue when something happened worth telling someone about.
reportUrlLink to the rolled-up HTML report, when weeklyReport is on.

A real row from a recent run. This one is a location whose reviews feed would not load:

{
  "target": "gmaps:url:www.google.com/maps/place/",
  "clientName": "Example ... Googleplex",
  "syncStatus": "failed",
  "error": "Reviews feed did not load (possible anti-bot block or layout change).",
  "counts": { "new": 0, "changed": 0, "negative": 0, "unanswered": 0, "urgent": 0 },
  "ratingChange": { "before": null, "after": null, "delta": null, "dropped": false },
  "urgentReviews": [],
  "themes": [],
  "agencySummary": "Could not fetch this location (Reviews feed did not load ...).",
  "hasSignal": false,
  "reportUrl": "https://api.apify.com/v2/key-value-stores/gm788eATqwJOTwG8y/records/latest-report.html?signature=..."
}

🧾 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 loads the newest reviews to learn what is there, reports isFirstRun: true, sends no webhook, and processes every review it loaded. Keep maxReviewsPerRun small on that first run unless you want the backfill.

A failed location keeps its saved state, so the next run picks the same changes up.

▶️ How to run it

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. 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?

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

Flat on every Apify plan, no volume tiers.

The report charge fires once 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 AI text runs on your own Anthropic or OpenAI key, and that provider bills you for the tokens.

💡 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 half a star 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.

🚧 What it does not do

  • It is not one row per review. The run dataset gives a row per location. Full review data lives

in your named store and history dataset.

  • Google can refuse a location, and then you get a failed row instead of counts. It is not

charged as a check, and the next run tries again.

  • maxReviewsPerRun accepts up to 1,000, but scrolling stops well before that. Past roughly 300

you will not get more however high you set it.

  • Review dates are Google's relative wording, like 2 weeks ago. No exact timestamp exists in

that feed.

  • Deleted reviews are never reported. It sees what is there, not what left.
  • trackOwnerReplies does nothing. Replies are detected 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.

🧭 Which Google scraper do you need?

If you wantUse
A scheduled watch on your locations, with alertsThis one
Every review for one place, in one goGoogle Maps Reviews Scraper
Places from a search, with reviews optionalGoogle Maps Scraper
Reviews for an Android appGoogle Play Reviews Scraper
The web results page for a keywordGoogle Search Results Scraper

❓ Questions people ask

How do I get only new 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.

Do I need an AI key? Only for generateAiSummary and generateReplyDrafts. Monitoring, alerts and rating-drop detection work 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 an AI assistant run it? Yes, through Apify's MCP server: https://mcp.apify.com/?actors=dami_studio/google-reviews-monitor.

Is monitoring Google reviews legal? 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 scraping and the law 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.