Review Analyzer: Sentiment, Complaints, Themes & Reply Drafts
Pricing
from $1.40 / 1,000 review analyzeds
Review Analyzer: Sentiment, Complaints, Themes & Reply Drafts
Returns sentiment, complaint and praise themes, verbatim quotes, urgent flags, a written report per business and optional reply drafts for reviews from any Google Maps, Trustpilot, Yelp or Amazon dataset, CSV or Google Sheet. Charged per review, report and reply. Agent-ready: x402, MCP.
Pricing
from $1.40 / 1,000 review analyzeds
Rating
0.0
(0)
Developer
Adam Pearce
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Scraped 2,000 Google Maps, Trustpilot or Yelp reviews and need to know what customers actually complain about, what they love, and whether it is getting better or worse? Point this Actor at the scraper's dataset (or a CSV or Google Sheet) and you get back:
- Every review, analysed, next to your original columns: sentiment (positive, mixed, neutral, negative), complaint and praise categories from one fixed list (staff attitude, waiting times, cleanliness, price and value, quality of work and 15 more) plus short themes in the customer's own terms ("rude reception staff", "left mess behind"), a key quote copied word for word, a one-line summary and an urgent flag for safety risks, legal threats and customers still waiting for something they paid for.
- One report per business: average stars, star breakdown, negative share, owner reply rate, the top complaints and top praise with real counts and verbatim quotes, what is changing (last 90 days against before), and suggested fixes tied to each complaint. Also saved as a readable HTML page you can send to a client.
- Optional reply drafts, ready to post, for every review the owner has not answered yet. Replies respond to the customer's actual points and never promise refunds, discounts or compensation, never admit fault and never invent facts: every draft is checked in code and a draft that breaks a rule is rewritten once, then withheld and not charged.
Nothing is invented. Every quote is checked against the review text and dropped if it is not there word for word. Every count, average, share and trend is computed from your data, never by the AI; the AI only writes the words around them.
It reads the output of any reviews scraper without setup. Review text, star rating (out of 5, 10 or 100), date, business and owner-reply columns are detected automatically, including nested ones such as rating.value and dates.publishedDate. Tested on real data from the Google Maps Reviews Scraper (including Tripadvisor-sourced rows that carry rating: "4/5" instead of stars) and from a Trustpilot reviews scraper (review headline, replyMessage owner replies, companyName and companyDomain), in 9 languages.
Who uses it
- Agencies and reputation managers: a monthly "what your customers are saying" report per client location, plus reply drafts to approve, from one scraper run.
- Multi-location businesses (hotels, restaurants, gyms, clinics, trades): compare branches, find the one where complaints about waiting times are rising.
- Local service businesses: see your top three complaints in plain words and what to fix first.
- Product and e-commerce teams: tag Amazon, Trustpilot or app store reviews by issue and track it over time.
- Lead generation: find businesses with many unanswered negative reviews, a ready-made reason to get in touch.
- AI agents: a reviews dataset in, a structured analysis and a written report out, in one call.
How to use it
- Run a reviews scraper on Apify (for example the Google Maps Reviews Scraper, or any Trustpilot, Yelp, Amazon, TripAdvisor or Booking.com reviews scraper), then pick its dataset in Dataset. Or paste a CSV, Excel, JSON or Google Sheet link into File or Google Sheet URL, or paste reviews into Review texts with a Business name.
- Optional: switch on Write reply drafts and add your sign-off and a contact line for unhappy customers. Add Your own themes if you want every point tagged from your own list.
- Run. 250 reviews take about 1 to 2 minutes. Review rows stream into the dataset as they are ready; business report rows come at the end (
rowType: "business_report", or open the Business reports view), the readable report is saved asreport.htmland a run summary asOUTPUT.
Chain it after a scraper with an Apify integration or webhook ("run this Actor when the scraper finishes, with its dataset ID"), and schedule it monthly with Also append to named dataset to build a history.
Sample output
One review from the default example (public Google reviews of a large London hotel, from a real cloud run with reply drafts on, sign-off "The team" and a contact line), with most original columns left out and the review text shortened:
{"title": "Premier Inn London County Hall hotel","stars": 3,"text": "Great location for this hotel but that's where it ends. ... I arrived between 4.30 and 5pm and was told the room was not ready as the cleaners hadn't cleaned it yet. ...","rowType": "review","reviewBusiness": "Premier Inn London County Hall hotel","reviewStars": 3,"reviewDate": "2026-01-25T21:22:11.400Z","analysisStatus": "ok","sentiment": "negative","complaintCategories": ["speed_and_waiting","customer_service","price_and_value","rooms_and_facilities"],"complaintThemes": ["room not ready at check-in time","no apology for delay","expensive room for quality","uncomfortable bed causing sore back"],"praiseCategories": ["location_and_access"],"praiseThemes": ["great location"],"keyQuote": "Great location for this hotel but that's where it ends","reviewSummary": "Customer appreciated location but complained about late room readiness, no apology, expensive price, and uncomfortable bed.","needsAttention": false,"ownerReplied": false,"replyDraft": "We are sorry to hear about your experience. Thank you for highlighting our great location. We understand the frustration caused by the room readiness and bed comfort and appreciate your feedback. Please call us so we can look into this.\nThe team","replyStatus": "drafted"}
And part of the business report row for the same hotel (250 reviews). Theme counts are reviews per group, so one review can count in two groups:
{"rowType": "business_report","reviewBusiness": "Premier Inn London County Hall hotel","avgStars": 4.44,"reviewsTotal": 250,"negativeShare": 0.06,"ownerReplyRate": 0.44,"overview": "Guests generally rate the hotel highly and most reviews are positive. Reviewers repeatedly praise the central location and friendly staff while some raise practical room and service issues.","topComplaints": [{"category": "atmosphere_and_noise","headline": "Street and motorbike noise disturbs sleep","whatCustomersSay": "Multiple guests report late-night motorcycles, car racing and street noise that made sleep difficult or impossible. Reports describe noise continuing late into the night and waking children.","mentions": 9,"shareOfReviews": 0.05,"recentDirection": "steady","themes": [{"theme": "motor vehicle noise at night","mentions": 6},{"theme": "street gatherings and racing","mentions": 5}],"exampleQuote": "we were kept up from 11pm to 4 am by NONSTOP cars and motorcycles racing outside, burning out, revving engines"}],"trend": {"direction": "stable","explanation": "Last 90 days: 88 reviews, average 4.48 stars, 6% negative. Before that: 162 reviews, average 4.42 stars, 7% negative."},"suggestedFixes": [{"fix": "Inspect and service all AC units; record fixes and offer portable fans when needed.","addresses": "rooms_and_facilities"}]}
Accuracy
Hand-checked on 04-10-2026 against real Google reviews of two UK electricians and a large London hotel (in English, French, German, Danish, Polish, Portuguese, Korean, Japanese and more):
- Sentiment, categories and themes right on 28 of 30 randomly picked reviews. The two misses were small: "nice hotel" read as neutral instead of positive, and a value-for-money point filed under the wrong category. Four AI models were tested on the same reviews; the one used here tied for the best accuracy and wrote the most careful replies.
- Quotes: every quote shown is in the review word for word. About 1 in 20 suggested quotes is dropped by the check for not being exact.
- Reply drafts thanked customers for their specific points, invited unhappy ones to get in touch, and passed the refund, discount, fault and legal checks.
It is an AI reading text, so spot-check a sample before acting on it in bulk.
Pricing
Pay per event, no subscription:
| Event | Price |
|---|---|
| Review analyzed (one review with sentiment, categories, themes, quote, summary and urgency flag) | $0.002 ($2 per 1,000 reviews), less on Bronze, Silver and Gold plans |
| Business report (written report for a business with at least 5 reviews with text) | $0.03 per business |
| Reply drafted (only if switched on) | $0.005 per reply that passes the checks |
| CSV or Excel export file | $0.01 each, only if requested |
| Webhook delivery | $0.02, only on a 2xx response |
Examples: 500 Google reviews of one restaurant with a report costs about $1.03. Adding reply drafts for the 200 the owner never answered adds $1.00. An agency's monthly run over 20 client locations with 50 new reviews each costs about $2.60 with reports. Star-only reviews with no words are counted in the report but never sent to the AI and never charged; failed AI calls and withheld replies are never charged. Set the run's maximum charge to cap spend; the Actor stops cleanly at the limit and charges nothing it did not deliver.
Input
| Field | What it does |
|---|---|
datasetId | Apify dataset of reviews (any scraper's output) |
fileUrl | CSV, TSV, Excel, JSON or JSON Lines link, or a Google Sheet shared as "anyone with the link" |
reviewTexts + businessName | Reviews pasted as plain text, reported under one business name |
data | Rows as inline JSON |
output | reviews_and_reports (default), reviews_only or reports_only |
minReviewsForReport | Minimum reviews with text for a written report, default 5 |
themes | Your own theme list; leave empty for automatic themes |
replyDrafts, replyOnlyUnanswered, replyTone, replySignOff, replyContact, replyLanguage | Reply drafts; off by default |
textField, ratingField, dateField, businessField | Only if auto-detection picks the wrong column; nested fields use a dot (review.body) |
keepOriginalFields, exportFormats, outputDatasetName, webhookUrl, concurrency, maxItems | Output and run options |
FAQ
Will a reply draft ever offer a refund or admit we were at fault? No. Replies are written under rules that forbid refunds, money back, compensation, discounts, vouchers, freebies, admissions of fault or liability, legal talk and accusing the reviewer, and every draft is then checked in code. A draft that fails is rewritten once; if it still fails it is withheld (replyStatus: "withheld_failed_safety_check") and not charged. Your sign-off and contact line are added exactly as you wrote them. Always read a reply before posting it.
Which scrapers does it work with? Any that output a review text or rating column: Google Maps reviews, Trustpilot, Yelp, Amazon, TripAdvisor, Booking.com, Airbnb, G2, Capterra, app store reviews and survey exports. The run log names the columns it used. Reviews are grouped into one report per place, company, product or app.
How is "what is changing" worked out? In code: the reviews from the last 90 days (counted back from the newest review) are compared with all the earlier ones on average stars and negative share. It needs at least 5 dated reviews on each side, and a single category's rising or falling arrow needs at least 10, so a small business with a handful of reviews is told honestly that there is not enough data yet.
What about reviews in other languages? Reviews in most languages are read; themes and summaries come back in English, and replies are written in the review's own language unless you set Reply language.
Is my data stored? Only the review text, stars and business name are sent to the AI model (OpenAI) for the run; nothing is kept afterwards.
Is it agent-ready? Yes. Pay per event, works through Apify's MCP server and x402 payments, with typed fields, fixed category names, and a summary record an agent can read.
If this saved you reading reviews by hand, a short review on the Apify Store helps a lot and is read personally. Questions, or a scraper whose columns are not picked up? Open an issue on the Issues tab and it will be answered the same day.