Google Maps Reviews Scraper - Places & AI Sentiment avatar

Google Maps Reviews Scraper - Places & AI Sentiment

Pricing

Pay per usage

Go to Apify Store
Google Maps Reviews Scraper - Places & AI Sentiment

Google Maps Reviews Scraper - Places & AI Sentiment

Scrape Google Maps reviews at $0.0003/review - 33% cheaper than alternatives. 3 modes: keyword search, direct URL, place details. AI sentiment + topic analysis via 5 LLM providers. Residential proxy included. n8n-ready.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Nick

Nick

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

15 hours ago

Last modified

Share

Part of the harvestlab MCP suite - 36 RAG-ready, AI-agent-payment-ready Apify actors covering ecommerce, social, travel, news, jobs, EU B2B, dev-tools, and government data. See the full suite

Stop paying $299/mo for reputation management platforms that lock you into dashboards you barely use. Get Google Maps reviews at $0.0003 each - 33% cheaper than the leading Apify competitor - with AI sentiment analysis, topic extraction, and owner-reply capture built in. No monthly minimum. Pay only for what you scrape.


Key Features

  • 3 scraping modes: keyword search to find places, direct place URL for targeted review extraction, and full place details with enriched metadata
  • AI sentiment analysis (optional): per-review sentiment scores, topic tags, and per-place aggregated insight summaries via 5 LLM providers
  • Full place data: name, rating, review count, address, phone, website, opening hours, price level, GPS coordinates, place ID
  • Rich review data: reviewer name, star rating, full text (with "More" expansion), date, owner reply text and date, Local Guide level, photo and like counts
  • Flexible sorting: newest, most relevant, highest rating, lowest rating - configurable per run
  • Residential proxy built in: pre-configured for Apify Residential proxy to bypass Google's datacenter IP blocks
  • Webhook-ready: connect n8n, Make, or Zapier to fire alerts when runs complete

Competitor Comparison

Why pay a monthly subscription for data you can pull on demand?

ToolPricingAI SentimentSearch ModeFull Place Detail
This actor$0.0003/reviewYesYesYes
Leading Apify competitor$0.00045/reviewNoYesPartial
ReviewTrackers~$49/mo (limited reviews)BasicNoNo
Podium$289/moNoNoNo
Birdeye$299/moAdd-on costNoNo
Reputation.com$500+/moAdd-on costNoNo
Yotpo$199/moLimitedNoNo
Google Maps Platform API$0.017/requestNoYesYes
DataForSEO$1.50/1,000 pagesNoYesPartial
Outscraper$0.004-$0.008/reviewNoYesPartial

The math: 10 places x 100 reviews = 1,000 reviews. This actor: $0.30. Podium: $289/mo for the same data locked in their dashboard.


Use Cases

Local SEO Agency - Replace $289/mo Podium Subscription

A local SEO agency managing 50 clients monitors each client's Google Maps reviews weekly. At 200 reviews per client per week: 50 x 200 = 10,000 reviews/week. Cost with this actor: $3.00/week vs $289/mo for Podium. Annual saving: $3,456.

The AI sentiment layer surfaces which clients are trending negative before ratings drop - enabling proactive outreach rather than reactive crisis management.

Competitive Intelligence - Find Where Competitors Fail

Pull 500 reviews from every nail salon in a target city. Feed them through AI topic extraction. Surface recurring complaints - "parking," "wait times," "rude staff" - with statistical frequency. Identify the service gaps your business can fill before spending on ads.

Run this monthly. Track competitor sentiment trends over time. When a previously 4.2-star competitor drops to 3.8, that is a window for a targeted campaign.

Reputation Monitoring - Early Warning Before Ratings Drop

Schedule weekly runs against your own Google Maps listing. Connect the webhookUrl output to a Slack notification via n8n. Get alerted the moment a 1-star review lands. The AI analysis flags which topic it belongs to (food quality, service, wait times) so the right team member gets the alert.

Set up a dashboard that tracks your 7-day rolling sentiment score alongside your weekly revenue. Correlate review sentiment with bookings to quantify the financial impact of reputation.

Lead Generation - Negative Reviews as Sales Signals

Businesses with declining ratings are exactly the customers who need reputation management, review generation software, or agency services. Scrape 4.0-3.5 star businesses in your vertical. Extract their phone numbers and websites. Score leads by review volume and sentiment trajectory.

A reputation management agency running this monthly on "restaurants [city]" can build a pipeline of warm leads who have documented, public evidence of the problem your product solves.

Market Research - Validate Before You Invest

Before entering a new city or launching a product category, scrape the top 20 businesses in your target niche. AI analysis surfaces what customers consistently love and hate. Combined with rating distribution, this gives you the clearest possible signal of unmet demand - before you spend on lease deposits or inventory.

Use the lowest_rating sort to systematically surface the most critical feedback. These reviews contain the most specific, actionable insight about what the market is missing.

Training Data - Sentiment and NER Datasets

Google Maps reviews are one of the richest public datasets of real-world consumer sentiment. Researchers and ML engineers use them for sentiment classification training, named-entity recognition (business names, locations, products), aspect-based sentiment analysis (reviews mention specific features), and service quality benchmarking studies.

Scrape by category (hotels, hospitals, schools, transport hubs) to build domain-specific training corpora. The AI analysis layer pre-annotates sentiment - giving you silver-labeled data for fine-tuning smaller models.

Hospitality and Travel - Benchmark Before Pricing

Hotels, restaurants, and attractions live and die by Google reviews. Before a pricing or renovation decision, scrape the competitive set. Map star ratings against price levels. Identify which amenities drive 5-star reviews in your comp set and which trigger complaints.

The owner reply data reveals how actively competitors manage their reputation. Low owner responsiveness combined with declining ratings is a competitive moat opportunity.

Real Estate - Neighbourhood Intelligence

Real estate professionals use Google Maps reviews to research neighbourhoods at scale. Scrape reviews of local schools, hospitals, restaurants, gyms, and transport hubs within a defined area. Run AI sentiment to generate a neighbourhood quality score. Build this into property valuation models or buyer briefing packs.


Input Parameters

Mode and Targets

ParameterTypeDefaultDescriptionExample
modestringsearchsearch - find places by keyword then extract reviews. reviews - scrape reviews from provided place URLs directly."search"
searchQuerystring-Keyword + location for search mode. Alias: q."coffee shops Berlin"
startUrlsarray-Google Maps place URLs for reviews mode.[{"url": "https://www.google.com/maps/place/..."}]

Scraping Options

ParameterTypeDefaultDescriptionExample
maxPlacesinteger10Max places to scrape in search mode (max: 50). Alias: maxResults.20
maxReviewsPerPlaceinteger50Max reviews per place (max: 500).200
sortReviewsBystringnewestReview order: newest, relevant, highest_rating, lowest_rating."lowest_rating"
languagestringenLanguage code for reviews."de"

AI Analysis (optional)

ParameterTypeDefaultDescription
enableAiAnalysisbooleanfalseRun AI sentiment and topic analysis on reviews. Charged $0.005 per place analysed.
llmProviderstringopenrouterAI provider: openrouter, anthropic, google, openai, ollama.
llmModelstring-Override the default model. Leave empty for recommended default per provider.
openrouterApiKeystring-Set here or via OPENROUTER_API_KEY env var. Get at openrouter.ai/keys
anthropicApiKeystring-Set here or via ANTHROPIC_API_KEY env var.
googleApiKeystring-Set here or via GOOGLE_API_KEY env var.
openaiApiKeystring-Set here or via OPENAI_API_KEY env var.
ollamaBaseUrlstring-Ollama server URL (default: http://localhost:11434). Self-hosted, no API key.

Proxy

ParameterTypeDescription
proxyConfigurationobjectResidential proxies strongly recommended. Defaults to Apify Residential.

Output Schema

Three item types are pushed to the dataset.

Place item (type: "place")

{
"type": "place",
"url": "https://www.google.com/maps/place/...",
"placeId": "ChIJ1234abcd5678",
"name": "Cafe Einstein Stammhaus",
"category": "Cafe",
"rating": 4.2,
"reviewCount": 1847,
"address": "Kurfurstenstrasse 58, 10785 Berlin, Germany",
"phone": "+49 30 2639192",
"website": "https://www.cafeeinstein.com",
"priceLevel": "$$",
"openingHours": ["Monday: 7:00 AM - 10:00 PM", "Tuesday: 7:00 AM - 10:00 PM"],
"coordinates": {"lat": 52.5074, "lng": 13.3553},
"scrapedAt": "2026-04-27T14:22:00Z"
}

Review item (type: "review")

{
"type": "review",
"url": "https://www.google.com/maps/place/...",
"placeName": "Cafe Einstein Stammhaus",
"reviewId": "ChIJabc123...",
"reviewer": "Maria S.",
"reviewerLocalGuideLevel": 5,
"reviewerReviewCount": 142,
"rating": 5,
"reviewText": "Wonderful old-Vienna atmosphere. The apfelstrudel is the best in Berlin. Staff are friendly and attentive.",
"reviewDate": "2026-03-15",
"photosCount": 3,
"likesCount": 12,
"ownerReply": "Thank you so much, Maria! We look forward to welcoming you again.",
"ownerReplyDate": "2026-03-16",
"aiSentiment": "positive",
"aiSentimentScore": 0.94,
"aiTopics": ["atmosphere", "food quality", "service"],
"llmProvider": "openrouter",
"llmModel": "google/gemini-2.0-flash-001",
"scrapedAt": "2026-04-27T14:22:05Z"
}

AI analysis item (type: "ai_analysis")

Emitted once per place when enableAiAnalysis: true, after all reviews for that place are scraped:

{
"type": "ai_analysis",
"url": "https://www.google.com/maps/place/...",
"placeName": "Cafe Einstein Stammhaus",
"reviewsAnalysed": 50,
"analysis": {
"overall_sentiment": "positive",
"average_sentiment_score": 0.81,
"sentiment_distribution": {"positive": 74, "neutral": 18, "negative": 8},
"top_positive_topics": ["atmosphere", "food quality", "location"],
"top_negative_topics": ["wait times", "pricing"],
"key_themes": ["historic ambiance", "traditional pastries", "weekend crowding"],
"owner_responsiveness": "high",
"key_insights": [
"Highly regarded for historic ambiance and traditional Viennese pastries",
"Weekend wait times are the primary friction point for otherwise loyal customers",
"Price point slightly above Berlin average but accepted by most regulars"
],
"competitive_strengths": ["unique historic setting", "consistent food quality"],
"improvement_areas": ["weekend reservation system", "table turnover speed"]
},
"scrapedAt": "2026-04-27T14:22:10Z"
}

Pricing

This actor uses pay-per-event pricing - you pay only for what you scrape.

EventPriceTrigger
place-scraped$0.0002Each place with name, rating, address extracted
review-scraped$0.0003Each review extracted (text, rating, owner reply)
ai-analysis-completed$0.005Per place when AI analysis is run

Cost examples:

  • 5 places x 100 reviews: 5 place events ($0.001) + 500 review events ($0.15) = $0.151
  • 20 places x 50 reviews: 20 place events ($0.004) + 1,000 review events ($0.30) = $0.304
  • 20 places x 50 reviews + AI analysis: $0.304 + 20 x $0.005 = $0.404
  • Full category sweep - 50 places x 200 reviews: 50 place events ($0.010) + 10,000 review events ($3.00) = $3.01

No monthly minimum. No seat licenses. No dashboard fees.


AI Sentiment Analysis

When enableAiAnalysis is enabled, the actor processes reviews through your chosen LLM to extract:

  • Per-review: sentiment label (positive/neutral/negative), numerical score (0.0-1.0), topic tags
  • Per-place aggregate: sentiment distribution, top positive and negative themes, owner responsiveness score, competitive strengths, improvement areas, and a human-readable insight summary

Supported AI Providers

ProviderDefault ModelSetup
OpenRouter (recommended)google/gemini-2.0-flash-001Set openrouterApiKey or OPENROUTER_API_KEY env var. Access to 300+ models including GPT-4o, Claude, Gemini.
Anthropicclaude-sonnet-4-20250514Set anthropicApiKey or ANTHROPIC_API_KEY env var. Highest accuracy on nuanced reviews.
Google AIgemini-2.0-flashSet googleApiKey or GOOGLE_API_KEY env var. Fast and cost-efficient.
OpenAIgpt-4o-miniSet openaiApiKey or OPENAI_API_KEY env var.
Ollamallama3.1Set ollamaBaseUrl (default: http://localhost:11434). Self-hosted, no API key required.

Cost tip: OpenRouter with Gemini Flash processes thousands of review batches per dollar. For production pipelines where accuracy matters most, use Anthropic Claude.


Technical Details

Playwright Architecture

Google Maps is a fully JavaScript-rendered SPA. The actor uses Playwright (headless Chromium) to interact with the live page - scrolling the results list, clicking review tabs, expanding truncated review text, and capturing dynamically loaded content. This approach handles the JavaScript rendering that simple HTTP scrapers cannot.

Key implementation details:

  • Consent banner handling: Automatically dismisses the EU GDPR consent overlay when present - no manual intervention needed for EU IP ranges
  • Dynamic selectors: Uses multiple fallback selectors (ARIA labels, data-* attributes, role attributes) because Google Maps CSS class names change frequently without notice
  • Review scrolling: Scrolls the reviews panel progressively until maxReviewsPerPlace reviews are captured or the end of the list is reached
  • "More" button expansion: Automatically clicks the "More" link to expand truncated review texts before capturing
  • Sort support: Navigates to the correct sort order before scraping so you get the newest (or lowest-rated) reviews first
  • Deduplication: Uses review IDs and text hashing to prevent duplicate reviews across scroll rounds

Rate Limiting and Proxy

The actor uses max_concurrency=1 to avoid triggering Google's per-IP rate limits. Concurrent requests from the same IP are reliably blocked. With residential proxy rotation enabled, the actor receives a fresh IP per page navigation, largely mitigating this constraint.

Success rate: With residential proxies enabled, typical success rates are 95%+. Without proxies or with datacenter IPs, expect CAPTCHAs and consent-page redirects.

Review Date Handling

Google Maps displays relative dates ("2 months ago", "a year ago") rather than exact timestamps. The actor converts these to approximate ISO 8601 dates based on the scrape timestamp. Exact publication dates are not available via the public web interface. Use the reviewDate field as an approximation with +/- 15 days accuracy for recent reviews.

Language Filtering

The language parameter sets the hl= query parameter on Google Maps requests, prompting Google to return reviews in that language where available. It does not filter out reviews in other languages - use the language field on output items to filter downstream if strict language filtering is required.


Limitations

  • Maximum 500 reviews per place: The Google Maps web interface does not paginate beyond approximately 500 reviews per sort order. To get broader coverage, run the actor multiple times with different sortReviewsBy values (newest, lowest_rating) and deduplicate by reviewId.
  • Review dates are approximate: Google shows relative dates, not exact timestamps. Dates are approximated from the scrape time.
  • Search results capped at ~20 organic results: Google Maps search returns approximately 20 place cards per query. The maxPlaces cap applies on top of this.
  • Residential proxy required: Datacenter IPs are blocked by Google. Plan proxy costs accordingly - Apify Residential proxy is billed per GB transferred.
  • Dynamic selectors: Google Maps updates its frontend regularly. If you encounter empty results or partial data, check for an updated actor version.

Example Runs

Search mode - find cafes in Amsterdam and scrape reviews

{
"mode": "search",
"searchQuery": "coffee shops Amsterdam",
"maxPlaces": 5,
"maxReviewsPerPlace": 100,
"sortReviewsBy": "newest",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Expected output: 5 place items + up to 500 review items.

Reviews mode - scrape a specific restaurant with AI analysis

{
"mode": "reviews",
"startUrls": [
{ "url": "https://www.google.com/maps/place/Noma/@55.6882607,12.5994....." }
],
"maxReviewsPerPlace": 200,
"sortReviewsBy": "relevant",
"enableAiAnalysis": true,
"llmProvider": "openrouter",
"openrouterApiKey": "sk-or-...",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Expected output: 1 place item + up to 200 review items + 1 AI analysis item.

Competitive analysis - scrape lowest-rated reviews to find complaints

{
"mode": "search",
"q": "pizza restaurants New York",
"maxResults": 20,
"maxReviewsPerPlace": 50,
"sortReviewsBy": "lowest_rating",
"enableAiAnalysis": true,
"llmProvider": "openrouter",
"openrouterApiKey": "sk-or-...",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Note: q is an alias for searchQuery, maxResults is an alias for maxPlaces - both work identically.

CLI usage (Apify CLI)

apify call YOUR_ACTOR_ID -i '{
"mode": "search",
"q": "hotels Barcelona",
"maxResults": 10,
"maxReviewsPerPlace": 50
}'

Scheduling and Webhooks

Schedule weekly review-pulse runs in Apify Console under Schedules to track rating trends over time. Connect a webhookUrl in n8n or Make to fire an alert into Slack, PagerDuty, or your CRM the moment a run finishes.

For reputation monitoring workflows, set up a run that fires when ratings drop below a threshold. The ai_analysis items carry the pre-aggregated sentiment summary with numerical scores - easy to threshold in a downstream webhook handler without further processing.


Pair with Other Actors

This actor slots naturally into multi-source reputation and intelligence pipelines:

  • Trustpilot Scraper - cross-platform review pair: run both on the same business to compare Google Maps sentiment vs. Trustpilot ratings and surface where scores diverge - often the earliest signal of a PR crisis
  • google-maps-eu-scraper - EU counterpart: when you need place discovery across multiple European cities without US-biased results, use the EU actor's OpenStreetMap backend and then enrich with this actor's review pipeline
  • Contact Extractor - local lead enrichment: extract the owner/manager email from the business website field and combine with AI sentiment scores for outreach prioritisation (contact the 4-star business losing ground, not the stable 5-star)
  • News Monitor - reputation context: pair review sentiment with Google News coverage on the same business name to distinguish organic reputation shifts from media-driven spikes

Use with AI Agents

This actor is x402-ready - pay-per-event pricing is compatible with HTTP 402 micropayment flows for autonomous AI agents that self-fund API calls.

The output items are structured for RAG pipelines. The ai_analysis items (one per place) are ideal as document chunks - they carry the pre-aggregated summary with sentiment scores, themes, and insights in a single JSON object that can be embedded and retrieved without further preprocessing.

from apify_client import ApifyClient
from langchain.tools import Tool
client = ApifyClient("YOUR_APIFY_TOKEN")
def get_google_maps_reviews(args: dict) -> list[dict]:
run = client.actor("harvestlab/google-maps-reviews-scraper").call(run_input={
"mode": "search",
"searchQuery": args["query"],
"maxPlaces": args.get("maxPlaces", 5),
"maxReviewsPerPlace": args.get("maxReviews", 50),
"enableAiAnalysis": True,
"llmProvider": "openrouter",
"openrouterApiKey": args.get("openrouterApiKey"),
})
return list(client.dataset(run["defaultDatasetId"]).iterate_items())
maps_review_tool = Tool(
name="google_maps_reviews",
description="Get Google Maps reviews and AI sentiment for places matching a keyword + location query.",
func=get_google_maps_reviews,
)

For a LangGraph reputation-monitoring agent, the actor slots in as a fetch_reviews_node that fires on a schedule, feeds sentiment deltas to a summarize_node, and posts alerts to Slack or email when ratings drop below a threshold.


This actor scrapes publicly available data from Google Maps. Users are responsible for:

  • Complying with Google's Terms of Service (google.com/intl/en/policies/terms/)
  • Complying with applicable data protection laws (GDPR, CCPA, etc.) when processing personal data (reviewer names, review text)
  • Ensuring their use case is lawful in their jurisdiction

GDPR notice: Reviewer names and review texts may constitute personal data under GDPR. If you operate in the EU/EEA, ensure you have a lawful basis for processing this data and handle it accordingly (data minimisation, retention limits, right to erasure requests).

This actor is intended for legitimate research, business intelligence, and competitive analysis. Users bear sole responsibility for how they use the data collected.


Support

If you encounter issues or have feature requests, open an issue on the actor page or contact us via Apify support.

Common issues:

  • Empty results: enable residential proxy, verify proxyConfiguration is set correctly
  • CAPTCHA redirect: try a different proxy group or verify residential proxy is active
  • Missing reviews: Google may show fewer reviews than reviewCount indicates for some sort orders; this is a Google-side limitation
  • AI analysis fails: verify your API key is set correctly in both the input field and the corresponding environment variable
  • Partial place data: Google Maps updates its HTML structure regularly; check for a newer actor version if fields are missing