Google Play Reviews Scraper — See Why the Rating Moved
Pricing
from $0.08 / 1,000 reviews
Google Play Reviews Scraper — See Why the Rating Moved
Scrape Google Play reviews: full text, star, author, date, thumbs-up, app version, and the developer's reply. It also tracks each app's rating over time, so when the rating drops you can read the reviews that caused it. No login, no cookies, no API key.
Pricing
from $0.08 / 1,000 reviews
Rating
0.0
(0)
Developer
Northbell
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Scrape Google Play reviews — full text, star, author, date, thumbs-up, app version and the developer's reply. No login, no cookies, no API key.
And then the part other review scrapers do not do: it also records each app's rating over time, so when the rating moves you can pull up the exact reviews that arrived in that window. Every review row carries arrivedSinceLastRun and duringRatingDropAlert.
A one-off scrape tells you what people wrote. This one tells you what changed, and which reviews changed it.
The number that goes stale the moment you read it
An app showing 4.3 stars from 36 million ratings tells you where it has been. It says nothing about which way it is moving right now. A wave of 1-star reviews after a bad update barely dents a 36-million average — the headline number keeps saying 4.3 while users are furious.
A rating cannot be back-filled. There is no endpoint that tells you what an app's rating was last Tuesday, or what the reviews that came in yesterday averaged. If you did not record it, that day is gone. This Actor records it and keeps the series:
com.example.app — 4.31 → 4.29 → 4.24 over three daysday 3: +812 new ratings, averaging 2.1 ⚠ well below the app's 4.24 norm
The trick Google Play makes possible
Play reports an app's average to full precision — 4.343131065368652, not a rounded 4.3. Combined with the exact rating count, two observations are enough to recover the average of everything that landed between them:
new-reviews average = (count×avg now − count×avg last time) ÷ (new ratings)
So without reading a single review body, you learn that the 812 ratings added since yesterday averaged 2.1 — and that is a fire alarm a static 4.24 would never trip.
It refuses to guess when it can't. On a 36-million-rating app, three new ratings move the average by less than the precision allows, so the recovered figure would be noise. When that happens newRatingsAverageReliable is false and the Actor does not pretend. A number without that flag is a number that will eventually lie to you.
What you get
Every run appends to your dataset. Rows are tagged by type.
app — one row per app:
| field | meaning |
|---|---|
averageRating, ratingCount | the app's overall rating and how many ratings, right now |
installs, category, price, developer | the listing |
ratingsAddedSinceLastRun | how many ratings arrived since you last ran |
newRatingsAverage | the average of just those new ratings |
newRatingsAverageReliable, newRatingsAverageErrorBound | whether that figure can be trusted, and its margin |
ratingDropAlert, ratingDropGap | set when new reviews run a full star or more below the app's norm — even after the error margin is subtracted |
firstSeenAt, observations, hoursSinceLastRun | your own series |
removed | the app is gone from that country's store — recorded, not treated as an error |
review — one row per review:
| field | meaning |
|---|---|
score, text | the star and the full review body |
textEmpty | true when someone left a star but no words — common, and worth counting separately |
author, at, thumbsUp | who wrote it, when, and how many found it helpful |
appVersion | the app version the reviewer was on — the field that tells you which release broke things |
replyFrom, replyText, replyAt | the developer's reply, when there is one |
arrivedSinceLastRun | this review landed after your previous run |
duringRatingDropAlert | this review was pulled on a run where the rating alarm fired |
reviewId, url | stable id and a direct link |
Order them by newest, most helpful, or highest rated. Narrow to a star range if you only want the complaints — Google Play has no star filter upstream, so this Actor fetches and then filters, which is stated plainly in the input so the cost is no surprise.
Runs daily
Point it at your app (and your competitors' apps) and run it once a day. The first run is a baseline; from the second run on you get velocity and alerts. History lives in a named key-value store, so it survives between runs.
No login. Not as a policy — as a property of the code.
This Actor reads only the public Play Store page an anonymous visitor sees. It never signs in and never sends a cookie; the input schema refuses any field that looks like cookie, token, session or password. Unit tests assert the no-login behaviour and the recovery maths.
Two things it gets right
A removed app is data, not a failure. When an app 404s, the Actor records removed: true with the last rating it saw — that is the end of the app's life in that store, which is exactly what you were watching. It does not fail the run.
It never ends green and empty. If every app fails to load, the run is marked failed with an error row you will actually see — because a silent empty result is the worst outcome for something you check once a day.
Input
{"appIds": ["com.spotify.music", "com.duolingo"],"country": "US","language": "en"}
Paste a full Play Store URL instead of a package name and the id is taken from it. Ratings differ by country store, so set country to the market you care about.
Sizing and cost
One request per app. Pay per event:
| event | when |
|---|---|
| Actor start | once per run |
| App checked | one app's rating recorded (a removed or errored app is not charged for the check) |
On data and privacy
This Actor records an app's public numbers — rating, review count, installs. It does not read, store or return reviewer names, profiles or review text. The persistent history holds counts and dates only.
Running locally
npm installnpm test # 22 unit tests, no network, including the no-login guarantee and the recovery maths
For AI agents
This Actor works well as an agent tool: the input schema is small and fully described, every run returns structured rows, and failures come back as data rather than silent gaps. Use it when you need to:
- track a Google Play app's rating and review count over time
- get the average rating of new Google Play reviews since the last run
- detect when new reviews of an Android app run well below its normal rating
More no-login scrapers by northbell
Every one of these reads only public pages — no login, no cookies — and most of them record the numbers that cannot be back-filled if you don't capture them today.
LinkedIn jobs
- LinkedIn Jobs Scraper with Applicant Counts — jobs plus how fast applicants are arriving
- LinkedIn Jobs Scraper — Filters That Actually Work — the experience/workplace filters LinkedIn silently ignores, applied for real
- LinkedIn Jobs Salary Data — Filter by Pay — salary parsed into numbers so you can filter by yearly pay
- Fast LinkedIn Jobs Scraper — bulk job listings, cheap and quick
- LinkedIn Company Jobs Scraper — every open role at a company you name
LinkedIn companies
- LinkedIn Company Scraper with Headcount Growth — the real headcount and how fast it's growing
- LinkedIn Company Posts + Engagement — a company's posts with exact reaction and comment counts
App stores
- App Store Rank & Rating Scraper — iOS keyword rank and rating changes over time
- Shopify App Reviews Scraper — Filter & Sort by Rating — exact per-star review counts, filter and sort
- Google Play Rating & Review Tracker — an Android app's rating tracked day by day