Review Analyzer API — Sentiment, Topics & Complaints
Pricing
from $1.00 / 1,000 review analyzeds
Review Analyzer API — Sentiment, Topics & Complaints
Analyze customer reviews in bulk: sentiment, topics praised or criticized, complaint severity and unanswered complaints, with a summary per business. Works on any Google Maps, Trustpilot or Tripadvisor reviews dataset. Pay per review.
Pricing
from $1.00 / 1,000 review analyzeds
Rating
0.0
(0)
Developer
Sherwood
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Review Analyzer API — sentiment, topics and unanswered complaints, pay per review
Give it the reviews of one business or of a thousand, as a list or as the dataset of any reviews scraper (Google Maps, Trustpilot, Tripadvisor...), and get for each business a summary built from every review: what customers praise, what they criticize, how serious the complaints are, which complaints never got a reply, and what changed over the last 90 days. $0.001 per review analyzed, reviews without text are free.
Built for automation and AI agents: nothing is required, the default input analyzes five sample reviews on its own, field names of the common scrapers are detected automatically, and the output is one plain dataset item per business.
What you get
One item per business, with its analyzed reviews inside:
{"placeName": "Hotel Example","businessType": "hotel","reviewsAnalyzed": 15,"averageRating": 2.3,"positive": 2, "mixed": 0, "negative": 13,"negativeShare": 0.87,"recentNegativeShare": 0.9,"olderNegativeShare": 0.6,"ownerReplyRate": 0.0,"unansweredComplaints": 12,"strengths": [{"theme": "location", "mentions": 1}],"weaknesses": [{"theme": "staff", "mentions": 10}, {"theme": "cleanliness", "mentions": 7}, {"theme": "room", "mentions": 7}],"alerts": [{"date": "2026-10-03", "rating": 1, "severity": 3.0, "excerpt": "The dirtiest hotel...", "url": "https://..."}],"summary": "Strengths: location (1). Weaknesses: staff (10), cleanliness (7), room (7). 13 negative and 0 mixed out of 15 reviews. 12 complaints without a reply. 5 serious alerts.","reviews": [{"reviewDate": "2026-10-03", "reviewRating": 1, "sentiment": "negative", "severityLabel": "serious","criticized": ["cleanliness", "staff"], "praised": [], "ownerReplied": false, "needsReply": 0.97,"recommendation": "discourages", "reviewUrl": "https://..."}]}
The Reviews view of the dataset (or items?unwind=reviews in the API) gives one row per review, ready for a spreadsheet.
What each review is checked for
- Sentiment: positive, mixed or negative. The rating alone is not enough: a 4-star review with a complaint is mixed.
- Themes, each as not mentioned, praised or criticized, so one review can praise the food and criticize the waiting time. The themes depend on the business type, detected from its category:
- restaurant: food, service, waiting time, price, atmosphere, cleanliness;
- hotel: room, cleanliness, staff, location, noise, breakfast, value;
- health: reception, waiting time, listening, care quality, fees, appointments;
- trades: punctuality, work quality, price and quote, honesty, communication;
- beauty, professional services, retail and a generic set.
Or give your own with
themes("parking: parking space and access").
- Severity of the main complaint: none, annoyance, problem, or serious (hygiene, safety, health, scam, discrimination). Serious ones come back as
alerts. - Needs a reply: a complaint, an incident or a question. Combined with the owner's reply, it gives
unansweredComplaints. - Recommendation: recommends, neutral or discourages.
Reviewer names and photos are never read or copied.
Use cases
- Reputation management agencies: find the businesses with unanswered complaints in the last weeks, with the exact reviews to show.
- Multi-site brands and franchises: compare locations on the same themes every month.
- Market research: what customers praise and criticize in a category and a city.
- Buying a business: check the trend and the serious complaints before the deal.
Chain it after a reviews scraper
Give datasetId and the Actor reads the reviews from its items. Text, rating, date, owner reply and business are detected, and were tested on the real output of the most used scrapers:
| Source | Scraper | Notes |
|---|---|---|
| Google Maps | compass/Google-Maps-Reviews-Scraper | one item per review |
| Google Maps | compass/crawler-google-places with maxReviews | reviews nested in each place are unfolded |
| Tripadvisor | maxcopell/tripadvisor-reviews | the review title is kept in front of the text |
| Trustpilot | memo23/trustpilot-scraper-ppe | the review title is kept in front of the text |
| Booking.com | voyager/booking-reviews-scraper | liked and disliked parts read together; scores out of 10 rescaled |
| Yelp | tri_angle/yelp-review-scraper |
For another source, set textField, ratingField and the other field options if detection fails.
{ "datasetId": "YOUR_REVIEWS_DATASET_ID", "maxReviewsPerPlace": 50 }
To run it automatically after a reviews scraper, add it on that scraper's Integrations tab with the input { "datasetId": "{{resource.defaultDatasetId}}" }.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
reviews | array | five sample reviews | Strings, or objects with text and optionally rating, date, placeName, category, reviewUrl. |
datasetId | string | — | Read the reviews from an Apify dataset instead. |
businessType | select | auto | Picks the default themes. |
themes | array | — | Your own themes, replacing the defaults. |
maxReviews | integer | 500 | Reviews with a text analyzed per run. |
maxReviewsPerPlace | integer | 100 | Most recent reviews kept per business. |
includeReviewText | boolean | true | Copy the first 1,000 characters of each review into its result. |
Pricing
- Review analyzed — $0.001 per review with a text (= $1 per 1,000).
- Reviews without text, and reviews that could not be analyzed: free.
Set a maximum cost per run in Apify and the Actor stops cleanly when it is reached; the remaining reviews are reported, not analyzed.
Via API, n8n, Make or MCP
POST https://api.apify.com/v2/actors/sherwood~review-analyzer/run-sync-get-dataset-items with the JSON input above, or add it as a tool through the Apify MCP server.
Limits
- The analysis is made by an AI model (Jev, by TypeSafe AI) that classifies each review; check the reviews behind an alert before acting on it.
- The analysis reads the text: very short reviews ("Great!") give a sentiment but rarely a theme.
- Themes are checked in the review's own language; the output labels are in English.
- Links to each review (
reviewUrl,unansweredComplaintUrls) come from the scraper. The Google Maps Reviews Scraper only gives them when itspersonalDataoption is on; everything else works without them. - Typical speed: 250 reviews in about 15 seconds.