Maps Review Rating Change Dashboard avatar

Maps Review Rating Change Dashboard

Pricing

from $2.00 / 1,000 business analyzeds

Go to Apify Store
Maps Review Rating Change Dashboard

Maps Review Rating Change Dashboard

Per-business rating shifts with confidence intervals and small-sample warnings from review exports you supply.

Pricing

from $2.00 / 1,000 business analyzeds

Rating

0.0

(0)

Developer

Practical AI Lab

Practical AI Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Security

Limited permissions

Share

Turn review exports you already hold into a per-business answer to one question: did the average rating really move, or is it noise?

For each business the Actor compares a recent window with a baseline window, reports the average change with a 95% confidence interval, shows the share of 1–2 star reviews, and attaches sample-size warnings. Businesses without enough data get an explicit insufficient_data status instead of a misleading number.

What it does not do

  • It does not scrape Google Maps or any other site and makes no network requests. You supply the data.
  • It does not collect reviewer names or any personal data; only business, date and rating are read.

Input

FieldMeaningDefault
reviewsJSON array of rows with a business (placeId, businessId or name), date (YYYY-MM-DD) and rating (1–5). Optional reviewId removes duplicates.–
csvTextSame data as CSV text with a header row. Combined with reviews.–
asOfDateEnd of the recent window.newest review date
recentDaysRecent window length.90
baselineDaysBaseline window, directly before the recent one.365
minReviewsPerWindowMinimum reviews in each window for a verdict.10
minMeaningfulShiftSmallest shift (stars) reported as improved/declined.0.2
maxReviewsRow cap to keep memory low.50000

Copyable example:

{
"csvText": "placeId,name,date,rating\ncafe-001,Harbor Cafe,2026-01-10,5\ncafe-001,Harbor Cafe,2026-09-05,2",
"recentDays": 90,
"baselineDays": 365,
"minReviewsPerWindow": 10
}

That tiny example will return insufficient_data by design; provide at least minReviewsPerWindow reviews per window for a verdict.

Output

One dataset row per business: status (improved, declined, no_clear_change, insufficient_data), baselineMean, recentMean, ratingChange, changeCI95Low, changeCI95High, counts per window, lowStarShareRecent/lowStarShareBaseline, sampleConfidence (insufficient, low, adequate) and a warnings list. A run summary is stored in the key-value store as OUTPUT_SUMMARY, including counts of invalid and duplicate rows.

Method and limitations

  • Welch's interval for the difference of means, using Student t critical values. Ratings are discrete 1–5 values and often skewed, so the interval is approximate, especially below about 30 reviews per window.
  • A variance floor is applied so identical ratings do not give a falsely exact interval.
  • sampleConfidence is low when the smaller window has fewer than 3× the minimum reviews.
  • Results describe your export only. Exports may be incomplete, sampled or biased (for example by review filtering or deletion), and the Actor cannot detect that.
  • Statistical significance is not a cause. A drop can come from a changed mix of reviewers, seasonality or a single event.
  • Many businesses tested at once will show some chance "significant" results; no multiple-comparison correction is applied.
  • Dates are compared as calendar days with no time-zone handling. Rows with unparseable dates or ratings outside 1–5 are skipped and counted.

Pricing

The code emits a business-analyzed event for each business with a verdict. Rows with insufficient_data and failed runs are not charged. Pricing is not set in this repository.

Local tests

python -m unittest discover -s tests -t . (offline, standard library only for the analysis modules).