App Review Scraper (Apple App Store + Google Play) avatar

App Review Scraper (Apple App Store + Google Play)

Pricing

from $1.50 / 1,000 results

Go to Apify Store
App Review Scraper (Apple App Store + Google Play)

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

hsienchu chen

Maintained by Community

Actor 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

FieldTypeDefaultDescription
storeenumappstoreappstore, googleplay, or both.
appIdstringApple numeric track id (e.g. 284882215), or a Google Play package name (e.g. com.whatsapp) if store is googleplay.
appUrlstringFull App Store or Play Store URL. Store/id auto-detected from the URL.
googlePlayIdstringOnly needed when store = both: the Google Play package name (Apple app comes from appId/appUrl). Not needed when store = googleplay.
countrystringusTwo-letter store country/region code.
langstringenLanguage hint passed to Google Play (hl). Does not filter Apple.
maxReviewsinteger100Cap per store (each store capped independently when store = both).
sortenumrecentrecent 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, rpcid UsvDTd) 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 against com.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). maxReviews above that count will not be reached for Google Play until batchexecute pagination is added in a future version.
  • sort is 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 / mostHelpful RSS sort parameters).
  • Google Play review permalinks are synthetic. Google Play has no official public deep link to a single review, so the url field 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.