App Store & Google Play Reviews Scraper - iOS + Android
Pricing
from $0.10 / 1,000 review scrapeds
App Store & Google Play Reviews Scraper - iOS + Android
Scrape iOS App Store and Google Play reviews together across 150+ countries. Rating, text, version and developer replies in one schema, plus a free insights report.
Pricing
from $0.10 / 1,000 review scrapeds
Rating
0.0
(0)
Developer
Boztek LTD
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
App Store & Google Play Reviews Scraper — iOS + Android in One Run
Scrape reviews from both app stores in a single run, across as many countries as you like, and get one normalized schema back. Add an app twice — once per store — and you can compare iOS against Android directly.
Most review scrapers do one store, one country. This one does both stores, 150+ countries, only-what-changed runs, and a rules-based insights report with no LLM and no API key.
What you get
Per review
| Field | iOS | Android |
|---|---|---|
| Rating, review text, author, date | ✅ | ✅ |
| Review title | ✅ | — (Google Play has no title field) |
| App version | ✅ | ✅ |
| Helpful / thumbs-up count | ✅ | ✅ |
| Up-vote sum | ✅ | — |
| Developer reply text and date | — | ✅ |
| Country and direct review link | ✅ | ✅ |
Per app — the insights row
- Rating distribution (1★ to 5★) and the average across the reviews collected
- The store-wide rating and rating count, for comparison against your sample
- Per-version breakdown — average rating and volume for each app version, so a bad release is obvious
- Monthly volume — review count and average rating per calendar month
- Negative and positive themes — the words that show up disproportionately in 1-2★ versus 4-5★ reviews
- Developer reply rate — what share of reviews got an answer
Only the new reviews
Turn on onlyNewReviews and the Actor remembers every review ID it has returned and emits only new ones.
Combine it with maxRating: 1 and a schedule and you have a 1-star alarm: every new angry review, within the hour, pushed wherever you want it.
What does it cost?
Pay-per-event. Filters run before charging, so minRating / maxRating / sinceDate genuinely lower the bill.
| Event | Price | When |
|---|---|---|
| Review scraped | $0.0001 | Per review in the dataset |
| App metadata fetched | $0.002 | Once per app, only with metadata on |
| Insights report | $0.02 | Once per app, only with insights on |
| Actor start | $0.00005 | Once per run |
| Scenario | Cost |
|---|---|
| One app, both stores, 1,000 reviews each, with insights | ~$0.25 |
| 10 competitor apps, 500 reviews each, insights on | ~$0.72 |
| Daily 1★ watch on 5 apps, ~40 new reviews/day | ~$0.02/day |
Naming apps
Mix any of these in the apps list:
| Form | Example |
|---|---|
| App Store URL | https://apps.apple.com/us/app/spotify/id324684580 |
| Google Play URL | https://play.google.com/store/apps/details?id=com.spotify.music |
| iOS numeric ID | 324684580 |
| Android package | com.spotify.music |
| Explicit | ios:324684580 · android:com.spotify.music |
Countries matter more than you think
Apple serves at most 500 reviews per country (10 pages of 50) and Google Play's pool is country-scoped too. Countries are the way to scale: ["us","gb","ca","au","de","fr"] gives you six separate pools of the same app.
maxReviewsPerApp is a total across countries, split evenly, so 600 reviews over 6 countries pulls 100 from each.
Output
One dataset, tagged with recordType, with a Reviews view and an Insights view in the Console.
{"recordType": "review","platform": "ios","appId": "324684580","appName": "Spotify: Music and Podcasts","country": "us","reviewId": "14407833146","rating": 4,"title": "I do love this app but","text": "I do love this app but all I ask is that you please add...","author": "Biker 125","appVersion": "9.1.70","submittedAt": "2026-08-09T19:46:45.000Z","thumbsUp": 0,"voteSum": 0,"reviewUrl": "https://apps.apple.com/us/app/id324684580?see-all=reviews","scrapedAt": "2026-08-11T01:40:12.004Z"}
{"recordType": "insights","platform": "android","appName": "Spotify: Music and Podcasts","countries": ["us", "gb", "de"],"reviewCount": 120,"averageRating": 3.63,"storeRating": 4.34,"storeRatingCount": 36095801,"ratingOne": 30, "ratingTwo": 5, "ratingThree": 6, "ratingFour": 10, "ratingFive": 69,"negativeThemes": ["paying", "update", "keeps", "anymore", "premium", "listen"],"positiveThemes": ["learn"],"versionBreakdown": [{ "version": "9.1.72.1891", "reviewCount": 90, "averageRating": 3.72 },{ "version": "9.1.68.1888", "reviewCount": 9, "averageRating": 4.11 }],"developerReplyRate": 12.5}
Note the gap between averageRating (3.63 in this run's most-recent reviews) and storeRating (4.34 lifetime). Recent sentiment diverging from the lifetime score is exactly the signal a store rating hides.
Input options
| Option | Type | Default | Description |
|---|---|---|---|
apps | array | required | URLs, IDs, packages or ios: / android: entries |
countries | array | ["us"] | Two-letter country codes |
language | string | "" | Google Play language override; Apple follows the country |
maxReviewsPerApp | integer | 200 | Total per app across countries (0 = as many as served) |
sortBy | string | recent | recent / helpful / rating (Play only) |
minRating / maxRating | integer | 1 / 5 | Star range to keep |
sinceDate | string | "" | ISO date, e.g. 2026-01-01 |
onlyNewReviews | boolean | false | Emit only reviews not seen before |
generateInsights | boolean | true | Add the per-app insights row |
includeAppMetadata | boolean | true | Look up name, developer, category, store rating |
stateStoreName | string | app-reviews-state | Key-value store backing incremental mode |
maxConcurrency | integer | 5 | Parallel requests |
proxyConfiguration | object | off | Optional |
Use cases
- Release monitoring — the per-version breakdown shows a regression the day it ships, not when the store rating finally moves.
- 1-star alerting —
maxRating: 1+onlyNewReviews+ a schedule. - Competitor teardown — run five rivals at once and read their negative themes to find what their users keep asking for.
- ASO and localisation — compare ratings and complaints per country before deciding where to invest.
- Support and product feedback — pipe reviews into your own tooling; the developer reply rate shows where nobody is answering.
Limitations
- Apple caps each country at 500 reviews. Page 11 of its feed returns HTTP 400. Add countries to widen the pool — there is no way around the per-country ceiling.
- Google Play reviews carry no title. The store dropped the field;
titleis populated for iOS only. - Developer replies come from Google Play only. Apple's public feed does not include them.
- Theme extraction is rules-based, not an LLM. That keeps it free and predictable, but it counts words rather than understanding them. Function words for English, German, French, Spanish, Portuguese, Italian, Dutch and Turkish are filtered out, along with the app's own name — yet a review pool mixing several languages still produces some noise. For the cleanest themes, run one country at a time. Positive themes are often sparse because 5-star reviews tend to be very short.
averageRatingdescribes your sample, not the app. It is computed over the reviews this run collected, which withsortBy: recentmeans recent sentiment.storeRatingis the lifetime figure.- Google Play tolerates datacenter IPs at moderate volume. Apple's feed needs no proxy at all. If you scrape many countries at high frequency, add a proxy for the Play side.
- Apple's feed occasionally repeats reviews across pages. Duplicates are removed by review ID, so a country can return slightly fewer reviews than its page count suggests.