Google Maps Reviews Pro - Sentiment, Topics, Competitor Delta avatar

Google Maps Reviews Pro - Sentiment, Topics, Competitor Delta

Pricing

from $10.00 / 1,000 business summaries

Go to Apify Store
Google Maps Reviews Pro - Sentiment, Topics, Competitor Delta

Google Maps Reviews Pro - Sentiment, Topics, Competitor Delta

Google Maps reviews with built-in intelligence: per-review sentiment, topic clustering (food/service/wait/cleanliness/value), responder tracking, time-series trend, competitor delta, LLM-ready output. Multi-business batch input. For reputation managers, local SEO, chains.

Pricing

from $10.00 / 1,000 business summaries

Rating

0.0

(0)

Developer

Seibs.co

Seibs.co

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Google Maps Reviews Pro

Multi-business Google Maps reviews scraper with built-in sentiment, topic clustering, responder tracking, time-series trend, and competitor delta analysis.

What does Google Maps Reviews Pro do?

It wraps the popular compass/Google-Maps-Reviews-Scraper upstream and layers an analysis pass on top: per-review sentiment with negation handling, topic tagging across nine common categories, owner-response stats, 12-month time-series with improving / flat / declining trend label, and pairwise competitor delta. Optional LLM-ready markdown summaries drop straight into agent prompts.

AI / RAG / Agent

Built for AI reputation-management agents and local-SEO bots. Set output_format=llm_ready to get a pre-summarized Markdown block per business (rating trend, top complaints, top praise, response gap, competitor delta) that a model can ingest in a single prompt. Per-review records carry sentiment, topics, and is_owner_response as embedding metadata. Compatible with LangChain, LlamaIndex, Pinecone, Weaviate, Chroma, and any MCP-aware agent runtime.

from apify_client import ApifyClient
from langchain.schema import Document
from langchain_community.vectorstores import Weaviate
from langchain_openai import OpenAIEmbeddings
client = ApifyClient("APIFY_TOKEN")
run = client.actor("you/google-maps-reviews-pro").call(run_input={
"placeIds": ["ChIJN1t_tDeuEmsRUsoyG83frY4", "ChIJrTLr-GyuEmsRBfy61i59si0"],
"maxReviews": 200,
"output_format": "llm_ready",
"includeCompetitorDelta": True,
})
docs = [
Document(
page_content=item["llm_summary"],
metadata={
"place_id": item["place_id"],
"name": item["name"],
"rating": item["rating"],
"trend": item["trend_label"],
"top_complaints": item["top_complaint_topics"],
},
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items()
]
Weaviate.from_documents(docs, OpenAIEmbeddings(), index_name="ReputationRAG")

Features

  • Per-review sentiment (positive / neutral / negative) with sentiment_score in [-1, 1] - lexicon-based, no API key, no per-call cost.
  • Topic clustering - food_quality, service, wait_time, cleanliness, value_pricing, ambience, staff_friendliness, parking, accessibility, aggregated into topic_distribution and ranked into top_complaint_topics / top_praise_topics.
  • Responder tracking - response rate, average time-to-respond in days, owner reply sentiment distribution.
  • Time-series breakdown - last 12 months of review counts + average rating, with derived recent_trend.
  • Competitor delta mode - given 2-5 businesses, returns pairwise rating delta, review-count delta, common complaints, unique complaints per side.
  • LLM-ready output - set output_format=llm_ready and every record gets a llm_summary_md markdown block.
  • Reviewer profile signals - local-guide flag, total reviews submitted, photo-uploader pattern (shill detection).

Use cases

  • Chain reputation managers monitoring 20-500 locations who currently glue together a raw review scrape + sentiment notebook + dashboard.
  • Local SEO agencies running monthly client reports - drop the LLM markdown straight into the report template.
  • Restaurant groups / multi-location service businesses with response-rate / time-to-respond / recent-trend KPIs.
  • Competitive intel teams - competitor_delta answers "what do customers complain about us vs the competition?"
  • AI product builders feeding local-business data into LLM workflows who need pre-summarized markdown, not raw JSON.

FAQ

Q: Is this legal? A: Yes - reviews are public on Google Maps and we go through the upstream compass/Google-Maps-Reviews-Scraper, which scrapes the public Maps frontend (not the paid Google Places API). Use the data per Google's Terms of Service and applicable law.

Q: Why might a run fail? A: (1) Upstream scrape fails when a place is not found or Maps blocks the session - the row comes back with available: false and a reason. (2) Malformed reviews crash the analysis pass - same handling. (3) Pushing max_reviews_per_business above 500 on many businesses at once triggers rate limits - lower concurrency or split the run.

Q: How fresh is the data? A: Live at crawl time. Reviews are read directly from the public Maps page during the run. review_sort: newest returns most recent first - typically within minutes of being posted.

Q: Can I schedule this daily or weekly? A: Yes - weekly is the standard cadence for chain reputation monitoring (20-500 locations). Daily for crisis-watch on a single high-volume business. Use Apify Schedules; combine with recent_trend to alert on declining flips.

Q: How do I push results into a CRM or BI tool? A: Two paths. (1) output_format: csv_friendly flattens reviews for direct import into BI dashboards (Looker, Power BI, Sheets). (2) output_format: llm_ready drops llm_summary_md straight into agent prompts or a client report template. Zapier/Make/n8n forward business-summary records to HubSpot, Salesforce, or a Slack channel on negative-trend alerts.

Q: How is this different from compass/google-maps-reviews? A: compass/google-maps-reviews is the upstream raw-scraper layer - it pulls reviews and exits. This actor wraps that scrape and layers an intelligence pass on top: per-review sentiment with negation handling, 9-topic clustering with aggregated top_complaint_topics / top_praise_topics, owner-responder metrics (response rate, time-to-respond, reply sentiment), 12-month time-series with improving / flat / declining trend label, pairwise competitor delta, and LLM-ready markdown summaries. You are paying for the analysis layer, not the scrape - if all you need is raw reviews, use the upstream directly.

Q: How accurate is the sentiment classifier? A: ~85% on English consumer reviews against human labels in spot-check sets; lexicon-based with 2-token negation lookback. Non-English (es, fr, de) runs ~70-75%.

Q: How does PPE pricing actually work here? A: $0.010 per business_summary, $0.001 per review_record, $0.020 per competitor_delta_record, $0.005 per llm_summary. A 100-review business in JSON mode is about $0.11; a 5-business competitor delta with 100 reviews each is about $0.65.

  • Pair with ANY lead-finder actor (home-services-lead-finder, houzz-contractor-leads, contract-heavy-smb-lead-finder, shopify-store-discovery, etc.) - those build the lead list, this actor monitors each lead's reputation as a companion intelligence layer.
  • ../b2b-sales-triggers/ - layer company-level intent (hiring, funding, exec changes) on top of review-driven reputation context.
  • ../reddit-topic-watcher/ - extend reputation monitoring beyond Google Maps to Reddit complaint and praise threads.

Integrations

  • Zapier - push to HubSpot/Salesforce/Pipedrive/Apollo/Klaviyo
  • Make.com - workflow automation
  • n8n - self-hosted automation
  • Apify webhooks - POST to your endpoint
  • API + dataset export (JSON/CSV/Excel/XML)
  • MCP / AI agents - call from Claude/GPT/LangChain

Modes

ModeWhat it doesInputs
batch_analysisIndependent analysis of N businesses (up to 50).List of URLs / place IDs / names.
competitor_deltaPairwise comparison of 2-5 businesses.2-5 inputs.
single_business_deepMax depth on one business; bumps max_reviews to 500+ and forces reviewer profiles on.First input only.

Input

See .actor/INPUT_SCHEMA.json. Sample:

{
"mode": "batch_analysis",
"business_inputs": [
"https://maps.google.com/?cid=12345...",
"ChIJN1t_tDeuEmsRUsoyG83frY4",
"Joe's Pizza, Bleecker St, NYC"
],
"max_reviews_per_business": 100,
"review_sort": "newest",
"include_sentiment_analysis": true,
"include_topic_clustering": true,
"include_time_series": true,
"output_format": "json",
"concurrency": 4
}

Output

Sample output: ./.actor/sample-output.json — copy-paste-ready preview of real-looking records.

First record inline:

{
"record_type": "business_summary",
"place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
"business_name": "Smiles Dental of Austin",
"address": "4218 Bull Creek Rd, Austin, TX 78731",
"category": "Dentist",
"total_review_count": 412,
"current_rating": 4.7,
"scraped_at": "2026-05-13T18:14:22Z",
"mode": "single_business_deep",
"available": true,
"reason": null,
"sentiment_distribution": {
"positive_count": 318,
"neutral_count": 51,
"negative_count": 43,
"positive_pct": 77.2,
"negative_pct": 10.4
},
"topic_distribution": {
"wait_times": {
"count": 87,
"avg_rating": 3.4
},
"front_desk": {
"count": 142,
"avg_rating": 4.8
},
"billing": {
"count": 39,
"avg_rating": 2.9
},
"cleanliness": {
"count": 121,
"avg_rating": 4.9
},
"pain_management": {
"count": 64,
"avg_rating": 4.6
},
"kid_friendly": {
"count": 58,
"avg_rating": 4.8
}
},
"responder_metrics": {
"responses_count": 287,
"response_rate": 0.696,
"avg_response_time_days": 2.4,
"owner_sentiment_distribution": {
"positive_count": 241,
"neutral_count": 38,
"negative_count": 8
}
},
"time_series": [
{
"month": "2026-04",
"review_count": 18,
"avg_rating": 4.8
},
{
"month": "2026-03",
"review_count": 22,
"avg_rating": 4.6
},
{
"month": "2026-02",
"review_count": 15,
"avg_rating": 4.5
},
{
"month": "2026-01",
"review_count": 19,
"avg_rating": 4.7
},
{
"month": "2025-12",
"review_count": 14,
"avg_rating": 4.4
}
],
"top_complaint_topics": [
"billing",
"wait_times"
],
"top_praise_topics": [
"cleanliness",
"front_desk",
"kid_friendly"
],
"recent_trend": "improving",
"llm_summary_md": "## Smiles Dental of Austin \u2014 Review Summary\n\n**4.7 stars / 412 reviews / 77% positive**\n\nPraised for cleanliness, friendly front desk, and kid-friendly atmosphere. The most consistent complaint is around billing \u2014 39 reviews mention surprise charges or insurance disputes, and the topic averages only 2.9 stars. Wait times are a secondary friction point.\n\nTrend is improving over the last 30 days vs the trailing 90.",
"reviews": [
{
"review_id": "r-882041",
"reviewer_name": "Hannah K.",
"reviewer_is_local_guide": true,
"reviewer_review_count": 84,
"rating": 5.0,
"text": "Dr. Patel and the hygienists are amazing with my anxious 6-year-old. Best dental experience our family has had.",
"date": "2026-05-08",
"helpful_count": 4,
"review_topics": [
"kid_friendly",
"pain_management"
],
"sentiment": "positive",
"sentiment_score": 0.82,
"owner_response_text": "Thank you Hannah! We love seeing your family.",
"owner_response_date": "2026-05-09",
"owner_response_sentiment": "positive",
"language": "en",
"contains_photo": false,
"contains_emoji": false
},
{
"review_id": "r-880014",
"reviewer_name": "Greg M.",
"reviewer_is_local_guide": false,
"reviewer_review_count": 12,
"rating": 2.0,
"text": "Got hit with a $340 bill they said insurance would cover. Front desk has no answers. Won't be back.",
"date": "2026-05-02",
"helpful_count": 2,
"review_topics": [
"billing"
],
"sentiment": "negative",
"sentiment_score": -0.71,
"owner_response_text": "Greg, we apologize for the confusion. Our office manager will reach out today to review your statement.",
"owner_response_date": "2026-05-02",
"owner_response_sentiment": "neutral",
"language": "en",
"contains_photo": false,
"contains_emoji": false
},
{
"review_id": "r-877221",
"reviewer_name": "Priya N.",
"reviewer_is_local_guide": false,
"reviewer_review_count": 31,
"rating": 4.0,
"text": "Quality of care is excellent. The 35-min wait past my appointment time was frustrating though.",
"date": "2026-04-19",
"helpful_count": 1,
"review_topics": [
"wait_times",
"cleanliness"
],
"sentiment": "neutral",
"sentiment_score": 0.18,
"owner_response_text": null,
"owner_response_date": null,
"owner_response_sentiment": null,
"language": "en",
"contains_photo": false,
"contains_emoji": false
}
],
"comparison_pairs": null
}

One record per business with the analysis layer attached. Sample:

{
"record_type": "business_summary",
"business_name": "Joe's Pizza",
"current_rating": 4.6,
"total_review_count": 8421,
"sentiment_distribution": {"positive_pct": 0.78, "negative_pct": 0.09},
"top_praise_topics": ["food_quality", "value_pricing"],
"top_complaint_topics": ["wait_time"],
"responder_metrics": {"response_rate": 0.42, "avg_response_time_days": 1.8},
"recent_trend": "improving",
"reviews": [
{"rating": 5, "text": "Best slice in NY", "sentiment": "positive", "review_topics": ["food_quality"]}
],
"available": true,
"scraped_at": "2026-05-14T12:00:00Z"
}

Pricing

Pay-per-event:

EventPriceWhen charged
business_summary$0.010Once per business successfully analyzed.
review_record$0.001Once per individual review extracted.
competitor_delta_record$0.020Once per pairwise comparison.
llm_summary$0.005Once per business when output_format=llm_ready.

Typical 100-review business in JSON mode: $0.11. 5-business competitor_delta with 100 reviews each: $0.65.

FAQ

Q: Does this cost extra Google Places API credits? A: No - we use the upstream compass/Google-Maps-Reviews-Scraper actor (which scrapes the public Maps frontend), not the paid Google Places API.

Q: How accurate is the sentiment classifier? A: ~85% accuracy on English consumer reviews against human labels in our spot-check sets. Lexicon-based with negation lookback (not great flips). Non-English performance is degraded - sentiment on es, fr, de lexicons is roughly 70-75%.

Q: Why are some businesses returning available=false? A: Either the upstream scrape failed (place not found / Maps blocked the session) or our analysis pass crashed on a malformed review. The reason field tells you which.

Q: Can I get one row per review for a CSV export? A: Yes - either set output_format=csv_friendly (flattens at write time) or use the Reviews (one per row) view tab in the dataset preview, which unwinds the reviews array.

Support

Open an issue on the actor's GitHub or contact via Apify Store. Include the run ID and input config.

Changelog

See ./CHANGELOG.md.