App Review Scraper (Apple App Store + Google Play)
Pricing
from $1.50 / 1,000 results
App Review Scraper (Apple App Store + Google Play)
Scrapes app reviews from BOTH the Apple App Store and Google Play in one Actor and normalizes them to a single schema. Pure HTTP -- no browser, no login. Covers a gap the incumbent (epctex/appstore-scraper, App Store only, subscription pricing) has stopped serving.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
hsienchu chen
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Scrapes app reviews from both the Apple App Store and Google Play in a single Actor and normalizes them to one output schema — reviewer, rating, title/text, app version, date, helpfulness count, and a link back to the review. Built for ASO agencies, product managers, and support/QA teams who want a scheduled feed of competitor or own-app reviews without stitching together two separate scrapers.
Pure HTTP — no browser automation, no login, no CAPTCHA-solving. Both data sources are public endpoints/pages that don't require an account.
Why this Actor
The existing App Store review scraper on Apify Store
(epctex/appstore-scraper) is a well-known name but has aged: 1,046 total
users and only 9 monthly active users (≈0.9% retention) as of September
2026, on a $25/month subscription-style pricing model that covers App
Store only. A newer pay-per-event entrant in the same category
(automation-lab/apple-app-store-scraper) already has 96 monthly active
users on roughly half the total user count — proof the pay-per-event model
and fresher execution both work here. This Actor targets the same gap and
adds Google Play coverage in one product, which none of the current
App-Store-only or Play-only incumbents offer together.
What it does
Given an app identifier for one or both stores, the Actor fetches recent reviews and pushes one normalized record per review to the dataset:
- Apple App Store: paginates the public iTunes Customer Reviews
RSS/JSON feed (
itunes.apple.com/.../rss/customerreviews/...), 50 reviews per page, up to 10 pages (500 reviews) per run. Supports both "most recent" and "most helpful" server-side sort. - Google Play: fetches the app's Play Store page and parses the batch of real reviews Google embeds server-side in the page itself (see "Known issues" for the pagination limitation of this approach).
Input
| Field | Type | Default | Description |
|---|---|---|---|
store | enum | appstore | appstore, googleplay, or both. |
appId | string | — | Apple numeric track id (e.g. 284882215), or a Google Play package name (e.g. com.whatsapp) if store is googleplay. |
appUrl | string | — | Full App Store or Play Store URL. Store/id auto-detected from the URL. |
googlePlayId | string | — | Only needed when store = both: the Google Play package name (Apple app comes from appId/appUrl). Not needed when store = googleplay. |
country | string | us | Two-letter store country/region code. |
lang | string | en | Language hint passed to Google Play (hl). Does not filter Apple. |
maxReviews | integer | 100 | Cap per store (each store capped independently when store = both). |
sort | enum | recent | recent or helpful. Fully honored for the App Store; ignored for Google Play in this version (see Known issues). |
Input examples
App Store only (Facebook):
{ "store": "appstore", "appId": "284882215", "country": "us", "maxReviews": 100, "sort": "recent" }
Google Play only (WhatsApp), by URL:
{ "store": "googleplay", "appUrl": "https://play.google.com/store/apps/details?id=com.whatsapp", "country": "us", "lang": "en" }
Both stores (WhatsApp):
{"store": "both","appId": "310633997","appUrl": "https://apps.apple.com/us/app/whatsapp-messenger/id310633997","googlePlayId": "com.whatsapp","country": "us","maxReviews": 50}
Output (dataset item)
One record per review, same shape for both stores:
{"store": "appstore","appId": "310633997","appName": "WhatsApp Messenger","country": "us","reviewId": "14502577449","userName": "Blanco Perla 🃏","rating": 4,"title": "Por favor. Actualicen. Los teclados de colores. Y permitir letras distintas","text": "Actualización","version": "26.34.72","date": "2026-09-02T10:15:37-07:00","thumbsUp": 0,"url": "https://itunes.apple.com/us/review?id=310633997&type=Purple%20Software"}
{"store": "googleplay","appId": "com.whatsapp","appName": "WhatsApp Messenger","country": "us","reviewId": "d40bb75a-d1a5-44b3-863d-c8624445efe9","userName": "Jonathan Spencer","rating": 1,"title": null,"text": "The most useless app I've encountered since apps were invented. I have it on my phone, and whenever I try to link it to another device - PC or tablet, using their app - the account is placed under review, during which time I can't use it, without explanation. There is no customer support as such, just what seems to be a beta version of 1st-generation AI. Don't waste your time.","version": "2.26.33.74","date": "2026-08-28T20:40:15+00:00","thumbsUp": 1,"url": "https://play.google.com/store/apps/details?id=com.whatsapp&reviewId=d40bb75a-d1a5-44b3-863d-c8624445efe9"}
A real sample pulled live on 2026-09-04 — 25 App Store reviews for WhatsApp, 10 App Store reviews for Facebook, and 20 Google Play reviews for WhatsApp, 55 rows total — is checked into this repo as ./sample_output.json.
Pricing
Built for pay-per-event (PPE) pricing. The code charges via
Actor.push_data(..., charged_event_name="review-item") per review and
Actor.charge("actor-start") once per run — the actual price per event is
set later in the Apify Console, not in this repo (see
./NEXT_STEPS.md). Until that console step is done, these
calls are harmless no-ops.
Known issues
- Google Play pagination is limited in this version. There is no
public Google Play review RSS/JSON feed. Full pagination on the web app
goes through an undocumented POST RPC
(
play.google.com/_/PlayStoreUi/data/batchexecute, rpcidUsvDTd) that is versioned and can change without notice; reverse-engineering it correctly and keeping it stable is a bigger effort than this MVP's scope. Instead, this Actor parses the batch of reviews Google already embeds server-side on the app's own Play Store page — a real, verified data source (confirmed live 2026-09-04 againstcom.whatsapp, returning 20 distinct real reviews per fetch), just capped at however many reviews Google chooses to embed there (observed ~20 for a very high-traffic app — smaller apps may return fewer).maxReviewsabove that count will not be reached for Google Play until batchexecute pagination is added in a future version. sortis not honored for Google Play in this version — the embedded batch comes back in whatever order Google's own page rendering uses (approximately relevance-based), not a strict recent/helpful sort. It is fully honored for the App Store (mostRecent/mostHelpfulRSS sort parameters).- Google Play review permalinks are synthetic. Google Play has no
official public deep link to a single review, so the
urlfield for Google Play rows is a best-effort constructed link (.../details?id=...&reviewId=...), not an official permalink like the App Store's. - Apple RSS feed has no official rate-limit documentation. This Actor makes one request per page of 50 reviews (max 10 pages/run); no proxy or retry/backoff beyond a single request per page is implemented in this MVP. If Apple starts rate-limiting heavy usage, that would be the first thing to add.
No credentials required
Neither data source needs a login, API key, or session token — both are public pages/endpoints exactly as loaded by an anonymous browser.