App Store & Google Play Reviews Scraper
Pricing
from $1.50 / 1,000 app checks
App Store & Google Play Reviews Scraper
Scrape and monitor App Store and Google Play reviews, ratings and 1-5 star histograms for any apps and countries. Only-new-reviews mode.
Pricing
from $1.50 / 1,000 app checks
Rating
0.0
(0)
Developer
Lighthouse Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Get App Store and Google Play reviews, ratings and 1–5★ rating histograms for any list of apps and countries, in one run and one clean table. Turn on monitor mode and schedule it to get only the reviews that are new since the last run, plus how each app's rating changed. No login, no API keys, no browser.
What does App Store & Google Play Reviews Scraper do?
- Both stores, one schema. Mix App Store IDs or URLs with Google Play package names or URLs in the same input. Every review has the same fields whichever store it came from:
rating,title,text,appVersion,reviewedAt,developerReplyText, and more. - Deep App Store history. Goes well past the 500-reviews-per-country limit of Apple's RSS feed. Tested at 600+ per country in our smoke tests, with thousands available for popular apps.
- Rating snapshot for every app and country. You get the average rating, rating count, the full 1★–5★ histogram, version, price, installs (Google Play), top-chart position (App Store) and changes since the last run.
- Monitor mode. The Actor remembers which reviews it already returned and saves only new ones on each run. You pay only for new reviews.
- Multi-country and multi-language. For example,
us,gb,deandjpon the App Store, and English, German and Japanese reviews on Google Play. - Filters. Sort by newest or most relevant, only reviews since a date (e.g.
7 days), only certain star ratings (e.g. 1–2★ for alerts), and ratings-only mode. - Privacy controls. Keep reviewer nicknames as the store shows them, hash them, or omit them. Account IDs and profile photos are never collected.
Why use it?
- Both stores, one schema. App Store and Google Play reviews land in one table with the same fields, ready to chart, filter or feed to an LLM.
- Built for scheduled monitoring. Re-downloading the same 500 reviews every day wastes money and forces you to deduplicate. Monitor mode returns only what's new, with rating deltas, so a daily run of a quiet app costs about half a cent.
- Reliable. It uses the stores' own public JSON endpoints, with automatic retries and rate-limit backoff. If Apple's web endpoint is unavailable, it falls back to Apple's RSS feed. Apps that can't be found are reported, not silently skipped.
- Predictable price. You pay a small fee per app checked and per review saved, and you can cap the total cost of any run.
Use cases
- ASO agencies and consultants: track clients' and competitors' ratings, rating mix and review volume across countries every week.
- Product teams: after each release, get every new 1–2★ review with the app version it mentions, to spot regressions fast.
- Customer-experience and support teams: send a daily feed of new reviews to Slack, a helpdesk or a spreadsheet via Apify integrations, and see which ones already have a developer reply.
- Market research and AI pipelines: build normalized review datasets across apps and stores for sentiment analysis, topic modelling or LLM summarization.
How to use it
- Click Try for free.
- In Apps, paste App Store and/or Google Play links, IDs or package names, for example
https://apps.apple.com/us/app/slack/id618783545andcom.Slack. - Choose Countries (and Languages for Google Play), and how many reviews per app you want.
- Click Start. Download the results as JSON, CSV or Excel, or read them through the API. The Reviews and App snapshots tabs show the two record types.
Example input:
{"apps": ["https://apps.apple.com/us/app/slack/id618783545", "com.Slack"],"countries": ["us", "gb"],"languages": ["en"],"maxReviewsPerApp": 200,"sinceDate": "30 days","mode": "scrape"}
Schedule it: new reviews every day (monitor mode)
- Set Mode to Monitor: only new reviews since the last run. Give the Monitor state store name a name that is unique to this monitor, for example
acme-apps. - Save the input as a task and add a schedule, for example daily at 07:00 (
0 7 * * *). - Optional: connect an integration (Slack, email, Google Sheets, Zapier, Make or a webhook) to receive each run's new reviews.
{"apps": ["618783545", "com.Slack", "com.microsoft.teams"],"countries": ["us", "gb", "de"],"languages": ["en", "de"],"mode": "monitor","maxReviewsPerApp": 500,"ratings": ["1", "2"],"monitorStateStore": "acme-apps"}
- The first monitor run saves the latest reviews as a baseline.
- Every later run saves only reviews it has not returned before, plus one snapshot per app and country with
newReviews,ratingChange,ratingCountChangeandpreviousSnapshotAt. - Rating history: collect the App snapshots view across runs, or set Include reviews to off for a ratings-only tracker.
Use it from AI agents, MCP and the API
- The Actor works well as a tool for AI agents through the Apify MCP server: every input and output field is described in the schema.
- Call it synchronously from code with
POST https://api.apify.com/v2/acts/<username>~app-reviews-monitor/run-sync-get-dataset-items, using the input above as the JSON body. - To get one record type, filter on
recordType(revieworappSnapshot).
Input
| Field | Type | Description | Example |
|---|---|---|---|
apps | array of strings | Required. App Store IDs/URLs and Google Play package names/URLs, mixed freely. The store is detected automatically | ["618783545", "com.Slack"] |
countries | array of strings | Two-letter store countries. Every app is checked in each one. Default ["us"] | ["us", "gb", "de"] |
languages | array of strings | Google Play review languages (each Google Play app is checked per country × language). Ignored by the App Store. Default ["en"] | ["en", "es"] |
maxReviewsPerApp | integer | Max reviews per app × country (× language). 0 = no limit. Default 100 | 500 |
sinceDate | string | Only reviews posted on or after this date. Absolute or relative | "2026-09-01", "7 days" |
mode | scrape | monitor | monitor saves only reviews that are new since the last run. Default scrape | "monitor" |
includeReviews | boolean | Off = rating snapshots only. Default true | false |
sortBy | newest | mostRelevant | Review order. Monitor mode needs newest. Default newest | "mostRelevant" |
ratings | array of "1"–"5" | Only these star ratings. Empty = all | ["1", "2"] |
reviewerNames | keep | hash | omit | How to output reviewer nicknames. Default keep | "hash" |
monitorStateStore | string | Named key-value store that holds monitor state. Use one per monitor. Default app-reviews-monitor-state | "acme-apps" |
proxyConfiguration | object | Optional Apify proxy. Usually not needed | { "useApifyProxy": true } |
Output
The dataset holds two record types, told apart by recordType. Each has its own view in the Console.
Review (recordType: "review"):
{"recordType": "review","store": "appStore","appId": "618783545","appName": "Slack","country": "us","language": null,"reviewId": "14601776949","rating": 3,"title": "Slack tries to do everything and in the end does nothing well","text": "Too many options, too many ways to organize things, it gets confusing and easy to lose new messages once they are read.","reviewerName": "Reviewer nickname","appVersion": "26.09.40","reviewedAt": "2026-09-28T02:09:48.000Z","isEdited": false,"helpfulCount": 0,"voteCount": 0,"developerReplyText": null,"developerRepliedAt": null,"url": "https://apps.apple.com/us/app/id618783545?see-all=reviews","scrapedAt": "2026-09-29T21:11:31.941Z"}
App snapshot (recordType: "appSnapshot"), one per app × country (× language). This one is from a scheduled monitor-mode run:
{"recordType": "appSnapshot","status": "ok","errorMessage": null,"store": "googlePlay","appId": "com.Slack","appName": "Slack","country": "us","language": "en","developer": "SLACK TECHNOLOGIES L.L.C.","genre": "Business","price": 0,"currency": "USD","version": "26.09.41.0","appUpdatedAt": "2026-09-28T22:01:20.000Z","rating": 4.64539,"ratingCount": 218972,"reviewCount": 7803,"stars1Count": 10162,"stars2Count": 2913,"stars3Count": 5111,"stars4Count": 17741,"stars5Count": 183018,"installs": "50,000,000+","minInstalls": 50000000,"chartPosition": null,"chartName": null,"iconUrl": "https://play-lh.googleusercontent.com/C9w-zv2PzpS-Rr9L8PUveRfv36lfYiB2kPKiEy45ucveIYMCoUW1nKQls5VxXSJyUsNxC_s7nFqpIAbqlLbSKA","reviewsCollected": 0,"newReviews": 0,"previousRating": 4.6465545,"ratingChange": -0.00116,"previousRatingCount": 218972,"ratingCountChange": 0,"previousSnapshotAt": "2026-09-29T21:36:49.486Z","url": "https://play.google.com/store/apps/details?id=com.Slack&hl=en&gl=us","scrapedAt": "2026-09-29T21:37:40.112Z"}
Field notes:
- All dates are ISO-8601 UTC. A missing value is
null, never an empty string. statusisok,notFound(the app doesn't exist, isn't sold in that country, or was removed) orerror(witherrorMessage).- Some fields exist only on one store:
title,isEditedandvoteCount: App Store only.reviewCount,installsandminInstalls: Google Play only.chartPosition: App Store only, when the app is charted.
- On the App Store,
appVersionis available for roughly the 500 most recent reviews per country. - A run summary (apps checked, not found, failed, reviews saved) is stored in the key-value store under
SUMMARY.
Pricing
This Actor uses pay-per-event pricing. You pay only for what you get:
| Event | Price | When |
|---|---|---|
| Actor start | $0.003 | Once per run |
| App check | $0.002 | Per app × country (× language) checked: details, rating, 1–5★ histogram and changes since last run. Not charged if the app is not found |
| Review | $0.0001 | Per review saved ($0.10 per 1,000). In monitor mode only new reviews are saved and charged |
Higher Apify subscription plans get lower per-event prices, shown on the Pricing tab.
Cost examples:
- Default input (Slack on both stores,
us, 20 reviews each): $0.003 + 2 × $0.002 + 40 × $0.0001 = $0.011. - Bulk pull: 5 apps × 1 country × 1,000 reviews = $0.003 + $0.01 + $0.50 = $0.51.
- Daily monitor of 10 app listings with about 10 new reviews each per day:
- Per run: $0.003 + $0.02 + $0.01 = $0.033.
- Per month: about $1.00.
To cap the cost of a run, set Maximum cost per run in the run options. The Actor stops cleanly at that limit and tells you what it skipped.
New to Apify? The free plan's monthly credit covers thousands of reviews.
FAQ
Is it legal to scrape app reviews? This Actor extracts only publicly available data: reviews and app details that anyone can see in the stores without logging in. It does not extract private user data. Your results may still contain personal data, which is protected by GDPR and other regulations. Do not scrape personal data unless you have a legitimate reason. If you are unsure, consult your lawyers. You can read the basics of ethical web scraping in Is web scraping legal?
What personal data does it collect? Only the reviewer's public nickname as the store displays it, and you can set Reviewer names to hash or omit. It never collects reviewer account IDs, profile photos, profile links or emails. Monitor state stores only review IDs and dates.
How many reviews can I get?
- Google Play: as many as the store lists for that language (tens of thousands for popular apps).
- App Store: each country's reviews separately, well beyond the 500 per country of Apple's RSS feed.
- Big pulls: add more countries to get more App Store reviews.
Why do Google Play results depend on language, and App Store results on country? Google Play groups written reviews by language. Apple keeps a separate review list for each country's store. The input follows how each store works.
What happens if an app ID is wrong, or the app isn't available in a country?
- You get an
appSnapshotwithstatus: "notFound"and an explanation, and it is not charged. - The run still succeeds for the other apps.
- If no app can be found, the run fails with a clear message so you notice.
Does monitor mode ever miss or repeat reviews?
- Each run re-checks the last 24 hours and remembers up to 10,000 review IDs per app and country, so reviews that the store publishes late are still caught and nothing is repeated.
- If more than
maxReviewsPerAppnew reviews arrive between two runs, only the newest ones are returned. Raise the limit or run more often.
Can I run several monitors? Yes. Give each one its own Monitor state store name.
Limitations
- App Store:
appVersion,helpfulCountandvoteCountcome from Apple's RSS feed, which covers only about the 500 most recent reviews per country. Older reviews have these asnull.- The Most relevant sort has no app version.
- Apple doesn't expose review languages, so
languageisnullfor App Store records.
- Google Play:
- Reviews have no title.
- The review date is the date of the latest edit.
- Country has little effect on which reviews are returned; language decides that.
- Large pulls: App Store reviews come 20 per request, and the Actor backs off automatically when Apple rate-limits. A pull of 1,000 App Store reviews plus 1,000 Google Play reviews took 12 s in our tests; very large pulls (tens of thousands per country) take proportionally longer.
- Not supported: search by keyword, top charts, and in-app purchase details.
- Undocumented endpoints: the stores can change their internal endpoints at any time. We run automated daily checks and fix breakages quickly.
Changelog
See ./CHANGELOG.md for all changes.
Support
Found a bug or need a feature? Open an issue on the Issues tab. We respond within 48 hours. For custom solutions, such as more stores, alerts or dashboards, contact us through the same tab.