Google Reviews Monitor — Multi-Location Alerts & Reports avatar

Google Reviews Monitor — Multi-Location Alerts & Reports

Pricing

from $15.00 / 1,000 location checkeds

Go to Apify Store
Google Reviews Monitor — Multi-Location Alerts & Reports

Google Reviews Monitor — Multi-Location Alerts & Reports

Monitor Google Maps reviews across all your client locations on a schedule. Only-new deltas, negative/unanswered alerts, rating-drop detection, AI summaries & reply drafts, Slack/webhook alerts, and a rolled-up HTML report. Built for marketing & SEO agencies — action-ready, not raw data.

Pricing

from $15.00 / 1,000 location checkeds

Rating

5.0

(1)

Developer

Imed

Imed

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Monitor Google Maps reviews across all your client locations on autopilot. Schedule it, and every run sends you only the new reviews, flags negative and unanswered ones, detects rating drops, drafts replies, and rolls everything into one agency-ready report. Built for marketing & SEO agencies and multi-location businesses who need to act on reviews — not drown in raw data.

Snapshot → diff → alert. This is a monitor, not a one-shot scraper. Point it at 1 or 100 Google Business locations, put it on a daily schedule, and get deltas + alerts.


Why this instead of a plain reviews scraper?

Most Google reviews actors hand you a giant JSON dump of every review, every run. An agency managing 30 client locations doesn't need that — they need to know what changed since yesterday and what needs a reply right now. This actor is built around that job:

  • 🆕 Only-new deltas — each scheduled run returns just the reviews that are new or changed since the last run (persisted between runs). No re-dumping history.
  • 🚨 Action-ready alerts — new negative reviews, unanswered reviews, and rating drops surfaced per location, so you reply before the client notices.
  • 🏢 True multi-location — one input, many locations, one rolled-up HTML report.
  • 🤖 AI summary + reply drafts — a one-line briefing per location ("2 urgent reviews need replies; main complaint: wait times") and optional draft replies for urgent reviews.
  • 🔔 Slack / Discord / webhook alerts — compact summaries pushed where your team works.
  • 💸 Pay per event — pay for what you check, not a flat monthly rental.

What it does

  1. Opens each Google Maps location in a real browser (Crawlee + Playwright) via Apify residential proxy.
  2. Loads the newest reviews, expands "See more", and extracts: rating, text, reviewer, relative date, owner response (yes/no + text), and photos.
  3. Compares against the previous run's snapshot and computes new / changed reviews.
  4. Classifies: negative (≤ your threshold), unanswered, urgent (negative and unanswered), recurring complaint themes, and overall rating drops.
  5. Emits an action-ready record per location to the dataset, optionally fires a webhook, and saves a rolled-up HTML report to the Key-Value Store.

Input

FieldTypeDefaultDescription
locationsarray— (required)One entry per location: { "clientName": "...", "googleMapsUrl": "https://www.google.com/maps/place/..." }
maxReviewsPerRuninteger50Newest reviews to load per location each run
onlyNewSinceLastRunbooleantrueEmit only new/changed reviews (the core monitor behavior)
alertOnNewReviewsbooleantrueInclude locations with new reviews in the alert signal
alertOnNegativeReviewsbooleantrueFlag new reviews ≤ threshold
negativeRatingThresholdinteger3Reviews at/below this rating are "negative"
trackOwnerRepliesbooleantrueDetect when the owner replies to a review
detectRatingDropsbooleantrueFlag overall rating drops vs last run
generateAiSummarybooleantrueOne AI/rule-based briefing per location (on new reviews only)
generateReplyDraftsbooleanfalseDraft replies for urgent reviews
aiModelstringgpt-4o-miniAI model (GPT or Claude) used when a key is configured
openaiApiKeystring (secret)Optional BYO OpenAI key (default provider); otherwise rule-based (free)
anthropicApiKeystring (secret)Optional BYO Anthropic/Claude key (used if no OpenAI key)
weeklyReportbooleantrueRender a rolled-up HTML report to the KV store
webhookUrlstring""Slack/Discord/generic webhook for alerts
proxyConfigurationobjectRESIDENTIALApify Proxy (residential strongly recommended)

Example input

{
"locations": [
{ "clientName": "Dental Group A — Downtown", "googleMapsUrl": "https://www.google.com/maps/place/..." },
{ "clientName": "Dental Group A — Westside", "googleMapsUrl": "https://www.google.com/maps/place/..." }
],
"maxReviewsPerRun": 50,
"onlyNewSinceLastRun": true,
"alertOnNegativeReviews": true,
"negativeRatingThreshold": 3,
"generateAiSummary": true,
"weeklyReport": true,
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

How to get a location URL: open the business on Google Maps and copy the URL from your browser's address bar (it looks like https://www.google.com/maps/place/Name/@lat,lng,17z/data=...).


Output

One action-ready record per location in the dataset:

{
"clientName": "Dental Group A — Downtown",
"overallRating": 4.3,
"isFirstRun": false,
"counts": { "new": 2, "changed": 0, "negative": 2, "unanswered": 2, "newOwnerReplies": 0, "urgent": 2 },
"ratingChange": { "before": 4.7, "after": 4.3, "delta": -0.4, "dropped": true },
"themes": ["wait", "billing", "staff"],
"urgentReviews": [
{
"reviewId": "abc123",
"rating": 1,
"reviewerName": "Sam",
"relativeDate": "2 hours ago",
"text": "Terrible wait, over an hour past my appointment...",
"reason": "negative & unanswered",
"suggestedReply": "Hi Sam, thank you for sharing your experience and we're sorry it fell short..."
}
],
"agencySummary": "2 new reviews (avg 1.5★). 2 urgent need replies. themes: wait, billing.",
"reportUrl": "https://api.apify.com/v2/key-value-stores/.../records/latest-report.html",
"syncStatus": "ok"
}

The first run establishes a baseline (no alerts) so you don't get spammed with the full history; from the second run on you get pure deltas.


Scheduling (this is the point)

  1. Run the actor once to establish the baseline.
  2. Open the actor → SchedulesCreate schedule → run daily (cron 0 8 * * * for 8am). Attach this actor + your saved input.
  3. Add a webhookUrl so your team gets a Slack/Discord ping only when something changes.

A monitor only compounds value when it runs on a schedule — that's where the alerts come from.


Use cases for agencies

  • Reputation management retainers — prove value weekly with a per-client report.
  • Reply-SLA enforcement — never miss a negative or unanswered review across 50 locations.
  • Churn prevention — catch a rating drop the day it happens, not at the QBR.
  • Franchise / multi-branch oversight — one dashboard for every location's reviews.
  • White-label — pipe the webhook/report into your own client dashboard.

Pricing (pay per event)

You only pay for the work each run does:

EventPriceWhen
Actor start$0.005once per run
Location checked$0.01per location successfully checked
Review processed$0.001per new/changed review (never re-charged for history)
AI generation$0.01per AI summary / reply draft (only on new reviews)
Report generated$0.05per rolled-up report

A typical daily run for one location with a few new reviews costs only a few cents. See MONETIZATION.md for the full cost math.


How it compares

Most Google reviews actors are extractors; this is a monitor. The three things they all leave for you to build yourself:

Typical reviews scraperGoogle Reviews Monitor
Each scheduled run returns…the full review history (re-scraped & re-billed)only new/changed reviews since last run
New negative / unanswered / rating-drop alertsDIY in n8n/Makebuilt-in, routed to Slack/Discord/webhook
OutputJSON/CSV dumpaction-ready record + AI reply drafts + client-ready HTML report
Multi-locationa flat URL arrayper-location records + one rolled-up report
Billingper review scraped (history included)pay-per-event on deltas — cents/day for many locations

Apify's own guide lists negative-review and rating-drop alerts as things you must build yourself. This actor ships them natively. (See DISTRIBUTION_KIT.md for the full competitor breakdown and sources.)

FAQ

Does this use the official Google Business Profile API? No — the GBP API only works on locations you own and requires per-user Google approval, so it can't power a tool you run for other people's locations. This actor reads public Google Maps reviews with a real browser + residential proxy.

Will it get blocked? Use the default RESIDENTIAL proxy. The actor also rotates sessions/fingerprints and retries. One location failing never stops the others (it's marked failed and the run continues).

Do I need an AI API key? No. Without one you still get a useful rule-based summary for free. Add an Anthropic (Claude) or OpenAI key — or have the actor owner set the ANTHROPIC_API_KEY (or OPENAI_API_KEY) secret — to get LLM-quality summaries and reply drafts. Default model is the cheapest Claude (claude-haiku-4-5).

How many locations can I monitor? As many as you want — add them all to locations. Each is checked independently.

How is "new" determined? By a stable review id + a fingerprint of meaningful fields (rating, text, owner reply). State persists between runs in a named Key-Value Store, so scheduled runs return true deltas.

What about deleted/old reviews scrolling off the page? The monitor does not raise false "removed" alerts when an old review simply falls past the maxReviewsPerRun window.


Notes & limitations

  • Google Maps markup changes often; the actor uses resilient selectors with fallbacks and forces English (hl=en) for predictable parsing.
  • Some reviews are rating-only (no text) — that's normal and handled.
  • Reply drafts are suggestions; review them before posting.

Built on the Apify SDK with a reusable, source-agnostic monitoring engine. See AGENTS.md for architecture.