Google Maps Review Analyzer | Customer Complaints avatar

Google Maps Review Analyzer | Customer Complaints

Deprecated

Pricing

from $2.00 / 1,000 review analyzeds

Go to Apify Store
Google Maps Review Analyzer | Customer Complaints

Google Maps Review Analyzer | Customer Complaints

Deprecated

Collect available Google Maps reviews and group recurring complaints, sentiment and service themes. Review supporting evidence and transparent scores for local business research. Missing or blocked reviews are not inferred.

Pricing

from $2.00 / 1,000 review analyzeds

Rating

0.0

(0)

Developer

Scopras Data Labs

Scopras Data Labs

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

13 days ago

Last modified

Categories

Share

Google Maps Review Pain-Point Miner

Turn Google Maps reviews into customer insight and sales opportunities. Find recurring complaints, service issues, sentiment patterns and positive differentiators for local businesses, locations and competitors.

Mines Google Maps reviews for recurring complaints, positive differentiators and an explainable business opportunity score.

Input

FieldTypeDefaultNotes
placeUrlsstring[][]Google Maps place URLs (direct route) or search URLs (search route).
searchQueriesstring[][]Google Maps search queries (search route).
businessTargetsstring[][]Business name (+ optional location) looked up via the search route.
maxReviewsPerPlaceinteger120Reviews analysed per place.
maxTotalReviewsinteger2000Global cap on reviews analysed across the run.
languagestring"en"hl hint.
requestTimeoutSecsinteger30Per-request timeout.
concurrencyinteger3Places fetched in parallel.
minReviewsForConfidenceinteger15Reviews needed for dataConfidence = 1.0; fewer reviews dampen the score.
emitReviewRowsbooleanfalseAlso emit one row per analysed review (topic tags + sentiment).
maxResponseBytesinteger4000000Max bytes read from one Google Maps response.

If no target is given, a sample search ("Joe's Pizza NYC") runs. Invalid place URLs (non-Google hosts, short links such as maps.app.goo.gl) are skipped with a warning; out-of-range numbers are clamped to the allowed range. If every URL is invalid the run ends without charges and explains why. The direct place route and the search route are tracked separately and reported per place.

Output

type: "place_analysis" — one per-business summary row (see .actor/dataset_schema.json). Every field is flat (no nested objects/arrays in the columns that matter for CSV/Excel), so the Apify Console's auto-export button renders a clean table without opening a single item:

  • rating: ratingReported, ratingFromReviews, and a flattened rating1Count … rating5Count breakdown.
  • ownerResponseRate — share of analysed reviews with an owner response.
  • Headline complaint/praise columns (the buyer's TL;DR — no need to read every review): topComplaintCategory, topComplaintMentions, topComplaintNegativeShare, secondComplaintCategory, thirdComplaintCategory, complaintCategoriesCount, topPositiveCategory, topPositiveMentions, positiveCategoriesCount.
  • opportunityScore (0–100) / opportunityGrade / scoreExplanation / recommendedActions.
  • dataConfidence (0–1).
  • Full detail, JSON-stringified into single cells for deep re-import: topicFindingsJson (per recurring topic — waiting time, pricing, service, cleanliness, staff, availability, quality, location — with mentions, negativeMentions, positiveMentions, negativeShare, sentiment, confidence, sampleQuotes), painPointsJson (topics with enough mentions, ≥ max(2, 10 % of reviews), and negativeShare ≥ 0.4, most negative first), positiveDifferentiatorsJson (topics reviewers consistently praise), and scoreTermsJson (the opportunity-score component breakdown). JSON.parse() any of these to get the structured detail back.

Optional type: "review" rows. A SUMMARY record with per-place reports, counts and failuresByReason is written to the key-value store.

The score formula (explainable)

opportunityScore = round( dampen × weightedAverage[
low-rating(w3) = inverse of rating vs a 2.5–4.7 benchmark
pain-breadth(w2) = number of distinct pain points, scaled 0–4
pain-intensity(w2) = negative share of the worst pain point
owner-neglect(w1) = inverse of owner response rate vs 0–0.6
negative-sentiment(w2) = (1 − mean review sentiment) / 2
] )
dampen = 0.5 + 0.5 × dataConfidence
dataConfidence = min(1, reviewsAnalyzed / minReviewsForConfidence)

The exact term values are echoed back in every item's scoreExplanation and scoreTermsJson.

No fabrication

If a place returns no rating and no reviews, opportunityScore is null, opportunityGrade is "N/A", and recommendedActions says to gather data first. A high reputation opportunity is never invented from missing data. placesWithoutReviewData in the summary counts these.

Safety

All fetches use the shared safeFetch (http/https only, DNS checked against private ranges, manual redirects, content-type allow-list, byte ceiling, timeout cleared in finally). One failing place never aborts the run; failures are counted by reason. No CAPTCHA solving, no login, no private endpoints.

Known limitations

  • Google serves reviews through a JS app / internal RPC. This Actor issues a GET and parses framed JSON or an embedded state blob heuristically; an interstitial or a layout change yields fewer / no reviews and a warning, never a crash. Review reviewId and absolute dates are usually unavailable via this path (relativeDate is kept when present). All aggregation, topic mining, sentiment, scoring and resilience logic is fully implemented and fixture-tested.

Billing

Every Apify plan, including Free, gets full runs: you pay only for delivered results, within your configured limits and run spending limit. The Actor checks the available budget before collecting.

Billing: $0.01 startup plus $0.002 per review analyzed. The place analysis is delivered before review events are charged. An empty or blocked source is not evidence of absent customer complaints.

The Pricing tab is authoritative. Source access and layouts can change. Inspect the output and source evidence before using it in a business workflow.