Google Reviews Analyzer
Pricing
Pay per usage
Google Reviews Analyzer
Scrape Google Maps reviews with sentiment analysis and word frequency. Filter by language, sort order.
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Fulcria Labs
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
An Apify actor that scrapes Google Maps reviews for any business and provides structured data with sentiment analysis and word frequency insights.
Features
- Flexible input: Accepts a Google Maps place URL or a business name + city
- Review extraction: Scrapes reviewer name, star rating, date, review text, and owner responses
- Sentiment categorization: Classifies each review as positive (4-5 stars), neutral (3 stars), or negative (1-2 stars)
- Word frequency analysis: Identifies the most common words/themes across reviews, broken down by sentiment
- Summary statistics: Generates aggregate stats including rating distribution, response rate, and average review length
- Configurable: Set max reviews, sort order, language filter, and proxy settings
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
placeUrl | string | Google Maps place URL | |
businessName | string | Business name to search (alternative to URL) | |
location | string | City/location to narrow search | |
maxReviews | integer | 100 | Maximum reviews to scrape (1-5000) |
sortOrder | string | newest | Sort: newest, highest, lowest, relevant |
language | string | ISO 639-1 language code (e.g., en, es) | |
includeOwnerResponse | boolean | true | Include business owner responses |
generateSummary | boolean | true | Generate summary statistics |
proxyConfiguration | object | Apify proxy | Proxy settings |
Output Format
Individual Review Records
Each review is pushed to the dataset as a separate record:
{"business_name": "Example Restaurant","review_id": "abc123","reviewer_name": "John D.","rating": 5,"date": "2 months ago","text": "Amazing food and great atmosphere. The pasta was incredible.","sentiment": "positive","owner_response": "Thank you for your kind words!","owner_response_date": "1 month ago","reviewer_info": "Local Guide - 42 reviews","review_number": 1}
Summary Statistics
When generateSummary is enabled, a summary record is also generated:
{"_type": "summary","business_name": "Example Restaurant","total_reviews_scraped": 100,"average_rating_scraped": 4.3,"rating_distribution": {"1_star": 3,"2_star": 5,"3_star": 10,"4_star": 32,"5_star": 50},"sentiment_distribution": {"positive": 82,"neutral": 10,"negative": 8},"owner_response_rate_percent": 45.0,"top_words": [{"word": "food", "total_count": 45, "in_positive": 38, "in_neutral": 5, "in_negative": 2},{"word": "service", "total_count": 30, "in_positive": 20, "in_neutral": 3, "in_negative": 7}]}
The full summary is also stored in the key-value store under the SUMMARY key,
and the complete output (business info + all reviews + summary) under the OUTPUT key.
Usage Examples
Using a Google Maps URL
{"placeUrl": "https://www.google.com/maps/place/Statue+of+Liberty","maxReviews": 50,"sortOrder": "newest"}
Using business name + location
{"businessName": "Central Park","location": "New York","maxReviews": 200,"sortOrder": "lowest","language": "en"}
How It Works
- Place resolution: If a business name is provided instead of a URL, the actor searches Google Maps and follows redirects to find the place page.
- Page fetching: Loads the Google Maps place page with browser-like headers.
- HTML parsing: Extracts review data from DOM elements (
data-review-idattributes, aria labels, class-based selectors). - Script data extraction: Falls back to parsing embedded JavaScript data arrays when DOM parsing yields no results.
- Search fallback: As a final fallback, searches Google for the business reviews and extracts from knowledge panel results.
- Analysis: Categorizes sentiment by rating, runs word frequency analysis, and computes summary statistics.
Proxy Recommendations
Google Maps aggressively rate-limits automated requests. Using Apify proxy (residential or SERP) is strongly recommended for reliable results. Configure the proxyConfiguration input to use proxies.
Limitations
- Google Maps dynamically loads reviews via JavaScript, so the number of reviews extractable from static HTML is limited. The actor uses multiple extraction strategies to maximize coverage.
- Review dates are relative (e.g., "2 months ago") as displayed by Google Maps, not absolute dates.
- Very new or very small businesses may have few or no reviews to scrape.
Development
# Install dependenciespip install -r requirements.txt# Run locally with Apify CLIapify run --input '{"placeUrl": "https://www.google.com/maps/place/..."}'