Google Play Reviews Scraper & Monitor avatar

Google Play Reviews Scraper & Monitor

Pricing

from $0.10 / 1,000 reviews

Go to Apify Store
Google Play Reviews Scraper & Monitor

Google Play Reviews Scraper & Monitor

Scrape Google Play reviews in any language, with ratings, app versions and developer replies. Monitor mode returns only the reviews posted since your last run.

Pricing

from $0.10 / 1,000 reviews

Rating

0.0

(0)

Developer

Pakpoom

Pakpoom

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Categories

Share

Know what users say about your app, or your competitors' apps, without opening Google Play by hand. Collect reviews with ratings, app versions and developer replies for as many apps as you like, in the review language you choose. Schedule monitor mode and each run returns only the reviews posted since the last one.

Typical uses

  • Watch new 1-2 star reviews of your own app after every release (set ratings to [1, 2]; each review carries the app version it was written on).
  • Follow competitors' reviews and feature requests in each market's language.
  • Feed reviews into a spreadsheet, dashboard or LLM for sentiment and topic analysis.

Plain HTTP, no browser, no login.

Pay per review: $0.10 per 1,000 reviews. No monthly fee, no minimum (you need an Apify account). Error items and empty results are never charged, and neither are duplicate reviews within a run.

What you get

  • Many apps in one run. Paste Google Play URLs or package names (com.whatsapp).
  • Any review language. Google Play serves reviews per language; pick the language with language. Thai, Japanese, Korean, Arabic and Russian were tested.
  • Monitor mode. Set mode to newSinceLastRun, schedule the Actor, and each run returns the reviews that appeared since the previous run of the same monitor. The first run backfills up to your limit.
  • Filters that save money. Date range, star ratings, newest or most relevant first. A newest-first run with dateFrom stops paginating as soon as it passes that date.
  • Developer replies (text and date) when the developer answered.
  • Reviewer names are off by default. Names are personal data; turn on includeUserNames only with a lawful basis.
  • Failures don't fail the run. A package that does not exist, or a throttled app, becomes an error item (never charged); the rest of the run continues.

Input

FieldDefaultWhat it does
appsprefilledGoogle Play URLs or package names. One entry per app.
countryusThe Google Play store used for requests. It does not change which reviews come back; see "Store country and languages".
languageenReview language (hl). This is what changes which reviews you get.
sortnewestnewest, mostRelevant, ratingHigh (newest rated 4-5), ratingLow (newest rated 1-2).
maxReviewsPerApp1000Limit per app, 1 to 25,000. For more, see "How many reviews can I get?".
dateFrom / dateTononeISO dates, inclusive.
ratingsallOnly these star ratings, for example [1, 2].
modeallall or newSinceLastRun.
monitorIdderivedNames a monitor so several independent ones can run. When empty, it is derived from your input, so changing the apps, language or filters starts a new monitor and a new backfill. Set it for scheduled monitors.
includeDeveloperRepliestrueAttach developer replies.
includeUserNamesfalseAdd reviewer names (personal data).
maxConcurrency5Apps fetched in parallel.
failOnErrorfalseFor scheduled runs with alerts: end the run as failed if any app ends in an error item. Reviews already returned stay saved and charged.
minReviews0For scheduled runs with alerts: end the run as failed if fewer reviews than this came back in total. In monitor mode a quiet interval can return few reviews, so use it only when you expect a minimum.

Example: the newest 500 reviews of one app

{ "apps": ["com.spotify.music"], "maxReviewsPerApp": 500 }

Example: German reviews of two apps

{ "apps": ["com.whatsapp", "com.instagram.android"], "language": "de", "maxReviewsPerApp": 2000 }

Example: weekly monitor of new low-star reviews

{ "apps": ["com.yourcompany.app"], "mode": "newSinceLastRun", "ratings": [1, 2], "monitorId": "weekly-lowstars" }

Save this input as a task, then schedule the task weekly in Apify Console. The first run backfills; every later run returns reviews that are new.

Store country and languages

In our test, the Google Play store did not change which reviews came back. We requested 20 popular apps from five stores (us, gb, de, fr, in) with language: en, and the stores returned the same reviews: the median overlap across 200 store pairs was 100% and the lowest was 97.5%. Only English was compared across stores.

What that means for you:

  • country is the store used for requests. Leave it at us unless the app is not available in the US store.
  • To get different reviews, change language. One language per run.
  • The number of reviews depends strongly on the language. One app can have 3 reviews in one language and more than 1,500 in another. A language with no reviews for an app returns nothing; that is not an error.
  • An app listed twice (for example as a URL and as a package name) is fetched and charged once.

Monitor mode

  • State is kept in a named key-value store in your account (google-play-reviews-scraper-state), one record per monitor. Delete the record to start over with a backfill.
  • Reviews already returned are remembered even when a run stops early (aborted, or out of budget), so the next run neither repeats them nor skips the ones it did not reach.
  • The time watermark moves only after a completed pass, which is a run that reached reviews older than the previous watermark. It moves to the newest review time that pass saw in the feed, never to the time of the run, so a stale or late feed cannot make it skip reviews.
  • Edited reviews. Google Play can list a review again, with a newer date, after its author edits it. A review that was already returned is not returned again, so an edit to an already-delivered review is not re-delivered. The scan never stops at a review it has seen. It stops after a whole page of reviews older than the last completed pass.
  • The state holds a fingerprint of the most recent review IDs of each app (up to 40,000 across all apps of a monitor) and stays under 1 MB (about 0.6 MB at the largest). An edited review that is older than that window is returned again as new.
  • Google Play serves the review feed from caches of different age. In our tests a run sometimes saw a feed up to about 30 minutes behind the previous run and returned nothing; the reviews arrived with the next run, and none were skipped or repeated. Schedule monitors at intervals of an hour or more.
  • Limit and backlog. If a run after the first stops at maxReviewsPerApp before it reaches reviews it already returned, more new reviews may remain. The run says so in its status message and in PAIR_STATS (moreNewReviewsRemain: true), the saved watermark does not move, and the next run continues where this one stopped: nothing is skipped and nothing is returned twice. Set maxReviewsPerApp above the number of new reviews you expect between runs so one run is enough. The first run is a backfill and simply stops at your limit.
  • Monitor mode returns reviews in newest-first order; sort: mostRelevant is ignored in this mode.

Output

One dataset item per review:

{
"platform": "googleplay",
"appId": "com.netflix.mediaclient",
"country": "in",
"language": "en",
"reviewId": "221f4a73-f2cf-4036-880c-436978f6b43f",
"rating": 4,
"text": "there needs to be less regional restrictions because I want to watch ...",
"appVersion": "9.86.0 build 5 74592",
"reviewedAt": "2026-10-04T11:26:00.000Z",
"thumbsUpCount": 0,
"developerReply": null,
"reviewUrl": "https://play.google.com/store/apps/details?id=com.netflix.mediaclient&reviewId=221f4a73-f2cf-4036-880c-436978f6b43f",
"scrapedAt": "2026-10-10T12:47:07.702Z",
"source": "gplay-batchexecute-UsvDTd"
}
FieldNotes
reviewId, rating, text, reviewedAt, scrapedAtNever null. text is an empty string when the reviewer left only stars.
appVersion, thumbsUpCount, reviewUrlCan be null when Google Play does not provide them.
developerReply{ "text", "repliedAt" }, or null when there is no reply or replies are turned off.
userNameOnly when includeUserNames is true.

Google Play reviews have no title, so there is no title field.

An error item looks like { "type": "error", "app": "...", "country": "...", "message": "..." } and is never charged. A summary per app and country (reviews returned, duplicates skipped, why the pair ended, seconds) is stored in the PAIR_STATS record of the run's key-value store.

Empty and not-found results

  • The package does not exist on Google Play: one error item for that app, not charged.
  • The app exists but has no reviews in your language: an empty result, no items, no error, not charged. The run log says so.

Pricing

Pay per event:

EventPrice
Each review returned$0.0001 ($0.10 per 1,000)
Actor start$0.00005

Worked examples:

  • 2,000 reviews of one app: 2 × $0.10 = $0.20.
  • 20 apps × 2,000 reviews (40,000 reviews): $4.
  • A weekly monitor that finds 150 new reviews: 150 × $0.0001 = $0.015 a run, plus the start fee.

Set a spending limit on the run and the Actor stops cleanly at the limit; it does not return reviews you have not paid for.

FAQ

How many reviews can I get? We measured two large apps (WhatsApp and Instagram, English, US store) with a limit of 25,000: each returned 25,000 reviews in about two minutes and stopped at the limit, not because Google Play ran out. We have not measured beyond 25,000. The limit is 25,000 reviews per app per run. For more, run again with dateTo set to the oldest date returned by the previous run.

Do I need a proxy or a login? No. The Actor reads public data and needs neither.

What happens if Google throttles requests? The Actor retries with exponential backoff. After repeated throttling it switches to an Apify datacenter proxy when your plan includes one; otherwise the affected pair returns an uncharged error item and the rest of the run continues. Throttling has not been observed on the platform in the measurements.

Is the App Store supported? No. This Actor is for Google Play.

Is reviewer data collected? Only public review content. Reviewer names are off by default.

Is this affiliated with Google? No. It is an independent tool and is not affiliated with, endorsed by or sponsored by Google. Google Play is a trademark of Google LLC.

Changelog

  • 1.0 — First public release.