Google Play Reviews Scraper - App Reviews by Country
Pricing
from $0.09 / 1,000 google play reviews
Google Play Reviews Scraper - App Reviews by Country
Scrape Google Play reviews for any Android app, by package ID or link, from any country's store. Each row has the star score, text, reviewer, date, thumbs up, app version and developer reply. Filter by stars and date, up to 5,000 per app. $0.09 per 1,000 reviews.
Pricing
from $0.09 / 1,000 google play reviews
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Scrape Google Play reviews for any Android app, from any country's store: give it package IDs
like com.spotify.music or Play Store links, and get one row per review with the star score, text,
reviewer, date, thumbs up, the app version reviewed and the developer's reply when there is one.
Filter by star rating and by date, and attach the app's own details to every row.
The thing to know before a long run: one bad app ID stops everything. If a single entry in your list
will not parse, the run writes one BAD_INPUT row and scrapes nothing at all, rather than doing the
other nine apps. Check the list first.
| Input | Android package IDs, Play Store links, or both |
| Output | One row per review: score, text, reviewer, date, thumbs up, app version, developer reply, plus the app's details if you want them |
| Ceiling | 5,000 reviews per app, and 100 pages of paging |
| Account needed | None. No Google account, no Play Console |
| Price | $0.09 per 1,000 reviews on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 55,000 |
🔍 What Google Play Reviews Scraper does
Every Google Play storefront holds its own reviews, in whatever language people wrote them. The
German listing is not a translated American one. So you name the store with country, the language
with language, and you get what that store actually shows.
It pages through each app's reviews until it has the number you asked for, your date cutoff is
crossed, or Google runs out. starRating keeps one rating band. dateCutoff keeps reviews on or
after a date. With includeAppMetadata on, one extra lookup per app puts the title, developer,
score, install band, genre, version, icon and price on every review row.
📋 What data you get from each Google Play review
| What you get | Field |
|---|---|
| The review itself | reviewId, score, title, text, date |
| Who wrote it | userName, userImage |
| How many people found it useful | thumbsUp |
| The app version the reviewer was on | version |
| The developer's public reply | replyText, replyDate |
| Google's per-category ratings, when it has them | criterias |
| The store you asked for | country, language, sort |
The app's details, when includeAppMetadata is on | appTitle, appDeveloper, appScore, appRatings, appReviewCount, appInstalls, appMinInstalls, appGenre, appVersion, appUpdated, appIcon, appPriceText, appContentRating |
▶️ How to scrape Google Play reviews
- Open Google Play Reviews Scraper and click Try for free.
- Put your package IDs into App IDs, one per line, replacing the example.
- Set Country and Language for the store you want.
- Set Maximum reviews per app, add a Star filter or a Reviews on or after date if you need one, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Want to see the row shape first? Clear the list and start it empty. You get one sample row marked
_sample: true, and it is not charged.
💰 How much does it cost to scrape Google Play reviews?
$0.09 per 1,000 reviews on the Free plan. Paid plans pay a little less: $0.089 on Starter, $0.088 on Scale and $0.087 on Business. On the free plan, the $5 Apify gives you each month covers about 55,000 reviews.
You pay for rows that reach your dataset. Not charged: the sample row, every diagnostic row, duplicates, and the reviews your star or date filter threw out.
📥 What you give it
{"appIds": ["com.spotify.music", "com.whatsapp"],"country": "us","language": "en","sort": "newest","maxReviewsPerApp": 500,"starRating": "1","dateCutoff": "2026-01-01","includeAppMetadata": true}
| Field | Default | What it is |
|---|---|---|
appIds | none, the form opens with com.spotify.music | Package IDs, one per line. Play Store links work here too. |
appUrls | none | Play Store details links. Merged with appIds, duplicates dropped. |
country | us | Two-letter store code: de, jp, br and the rest. |
language | en | Two-letter language for the reviews and the store text. |
sort | newest | newest, rating or helpfulness. |
starRating | all | all, or one value from 1 to 5. |
dateCutoff | none | Keep reviews on or after this YYYY-MM-DD date, in UTC. |
maxReviewsPerApp | 100 | Rows kept per app after filtering, up to 5,000. |
includeAppMetadata | true | One extra lookup per app, putting its details on every review row. |
requestsPerSecond | 3 | How fast the run asks Google Play for pages, 1 to 10. |
proxyConfiguration | off | Optional. Your own servers, if you have a reason to use them. |
📤 What you get back
A real review row from a run in September 2026, with the icon link cut short:
{"ok": true,"_sample": false,"appId": "com.spotify.music","appUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=us","appTitle": "Spotify: Music and Podcasts","appDeveloper": "Spotify AB","appScore": 4.3461704,"appRatings": 36333539,"appReviewCount": 1853008,"appInstalls": "1,000,000,000+","appMinInstalls": 1000000000,"appGenre": "Music & Audio","appVersion": "VARY","appUpdated": "2026-09-18T07:51:07.000Z","appIcon": "https://play-lh.googleusercontent.com/IzQgYCcnCFCD08GR-3bdtcT8xz...","appPriceText": "Free","appContentRating": "Teen","reviewId": "83d77596-5f69-4723-9702-b87c370328ea","reviewUrl": null,"date": "2026-09-19T07:02:26.842Z","score": 5,"scoreText": null,"title": null,"text": "the greatest music app I've ever used","thumbsUp": 0,"version": "9.1.80.2221","replyDate": null,"replyText": null,"criterias": [],"country": "us","language": "en","sort": "newest"}
| Field | How to read it |
|---|---|
score, text | The star rating and the review body. Most Play reviews have no title, so it is usually null. |
date | A real ISO timestamp, not a relative "2 days ago". |
replyText, replyDate | The developer's public reply, null when there is none. |
version | The app version that reviewer was on, when Google records it. |
thumbsUp | Reads 0 when Google leaves the count out, so a real zero and a missing value look the same. text does the same with an empty string. |
app* fields | Only filled when includeAppMetadata is on. appTitle is null otherwise. |
appVersion | VARY when the app ships a different build per device. |
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A review | ok: true and _sample: false | yes |
| The sample row | _sample: true | no |
| A diagnostic | ok: false and an errorCode | no |
| Code | What it means |
|---|---|
BAD_INPUT | An app ID, link, country, language, filter or limit is not valid. The whole run stops here. |
NOT_FOUND | That app is not available in the country you asked for. |
NO_RESULTS | Nothing matched that app, store and filter combination. |
RATE_LIMITED | Google Play slowed the run down and it stopped on that app. Run it again. |
NOT_SERVED | This review was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
PARSE_ERROR | The page came back in a shape the run did not expect. |
NETWORK | The request could not complete. |
Apart from BAD_INPUT, one app failing does not stop the others. If paging breaks partway, the rows
already collected are kept and the diagnostic carries partial: true with how many came back. The
default table view does not show errorCode, so read the dataset as JSON when a run looks empty.
💡 What people use it for
- Watching the 1-star reviews on your own app across a few countries, on a daily schedule.
- Pulling every review since a release date with
dateCutoff, to see what the update actually changed. - Reading a category's apps side by side, with
includeAppMetadatagiving you score and install band on the same row. - Feeding review text into your own tagging or sentiment work, with
versionalready attached.
From a search term to what users complain about:
- Run Google Play Apps Scraper on a term
like
budget trackerand copy theappIdcolumn. - Paste those IDs here, set
starRatingto1anddateCutoffto the start of the quarter, and readtextgrouped byversion. - Add the apps worth watching to App Review Triage with their Play link, and new reviews arrive sorted into bugs, billing and requests.
🚧 What it does not do
- One bad app ID stops the whole run. It writes a single
BAD_INPUTrow and scrapes nothing. - One store per run.
countryandlanguageapply to everything in the list. Run it again for another market. - 5,000 reviews per app, and a hard stop at 100 pages.
dateCutoffonly sets the earliest date, so it narrows a run rather than reaching further back. maxReviewsPerAppcounts rows kept, not rows read. Filtering to 1-star reviews on a well-reviewed app reads a lot of pages, and the 100-page stop can arrive before your quota does.sortchanges when it can stop early. Withnewestand adateCutoffit stops as soon as a page crosses the date. Withratingorhelpfulnessit cannot, so it keeps paging.- If the app's details cannot be found in that country, the app is skipped, even where reviews
might exist. Try another
country, or turnincludeAppMetadataoff. - A missing
thumbsUpreads as0and missing text as an empty string. - When Play changes its pages you get a diagnostic row rather than a failed run.
- It is not an official Google tool. Dami's Studio is independent and is not affiliated with or endorsed by Google, or by any other company named on this page.
🧭 Which app review scraper do you need?
| If you want | Use |
|---|---|
| Reviews for an Android app, by store and language | This one |
| The app listings themselves, by keyword, category or package ID | Google Play Apps Scraper |
| App Store metadata, or an iPhone app's reviews | App Store Scraper |
| New reviews from both stores, sorted into bugs, billing and requests | App Review Triage |
| Reviews for a business on Google Maps | Google Maps Reviews Scraper |
❓ Questions people ask
Do I need a Google account to scrape Google Play reviews?
No, and no Play Console access either. These are public store pages.
Can I get every review an app has?
Up to 5,000 per app per run, and paging stops at 100 pages. On a big app that is the newest 5,000
with sort on newest.
Why are the reviews in a language I did not ask for?
Because that is how people wrote them. language picks the store's language, not a translation.
Can I scrape several countries at once?
Not in one run. country is per run, so schedule one run per market.
Does the star filter charge me for the reviews it throws away?
No. You are charged for rows that land in your dataset.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has
ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP
client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/google-play-reviews-scraper.
Either way the run happens on your Apify account at the same price.
Is scraping Google Play reviews legal?
These are public listings and public reviews. Reviews carry personal data, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers. Not affiliated with Google.
🆘 If something breaks
Open the Issues tab on the actor page. Send the app ID, the country and the run ID. The
errorCode on the diagnostic row usually names the problem on its own.