"Scrape app reviews" sounds like one job. It's two. Apple and Google built their stores on different assumptions, and those assumptions leak straight into how reviews are addressed, paginated, split by region and tagged by version. Treat them as interchangeable and you'll quietly under-collect on one side. This guide goes store by store, then shows what the merged dataset is actually good for.
Apple App Store: storefronts and RSS feeds
Apple identifies an app by a numeric track ID (the long number in a store URL, e.g. id389801252 for Instagram). The crucial wrinkle is the storefront: Apple runs a separate store per country, and a review lives only in the storefront it was written in. There is no single global review list. To collect a worldwide app's feedback you iterate over country codes — us, gb, de, jp and so on.
Apple also surfaces recent reviews through a public RSS-style feed, sorted by most-recent or most-helpful, paginated in pages. It is generous on the newest reviews and thinner on deep history, which shapes how much back-catalogue you can realistically pull per country.
Fields the App Store gives you per review
| Field | Notes |
|---|---|
title | Apple reviews have a headline; Google reviews do not. |
review / text | Full body, untruncated. |
rating | 1–5 stars. |
userName | Public display name. |
version | The app version reviewed — reliable on Apple, the key to release-level analysis. |
updated / date | Timestamp of the review. |
country | Which storefront it came from. |
Google Play: package names and token pagination
Google identifies an app by its package name (reverse-DNS, e.g. com.instagram.android), taken straight from the ?id= in a Play URL. Reviews aren't split into separate storefronts the way Apple's are; instead you pass a language and country to filter, and you page through results with a continuation token rather than numbered pages. You also choose a sort: newest, rating, or most-helpful, and that choice changes which slice you can reach.
Fields Google Play gives you per review
| Field | Notes |
|---|---|
content | Review body. No separate title field. |
score | 1–5 stars. |
userName | Public display name. |
thumbsUpCount | How many users found it helpful — useful for ranking salient complaints. |
replyContent | The developer's public reply, if any. Apple doesn't expose this in feed data. |
at | Review timestamp. |
reviewCreatedVersion | App version — present but less consistently populated than Apple's. |
The differences that bite you
App Store
- Numeric track ID
- Per-country storefronts — must loop countries
- Has a review title
- Reliable version per review
- Recent-heavy, shallow deep history
Google Play
- Reverse-DNS package name
- Lang + country filter, token pagination
- No title, body only
- Developer replies exposed
- Helpful-vote counts on each review
Worked example: did the v8.2 release tank the rating?
You shipped v8.2 on the App Store and ratings dipped. Reviews tell you why, faster than a survey:
- Pull the last 90 days of US, UK and DE reviews for your track ID.
- Filter on
version == "8.2"— this is exactly why Apple's reliable version field matters. - Bucket by rating and read the 1- and 2-star
title+reviewtext. - Theme it: if "login," "crash" and "logged out" cluster, you have a regression, not a taste problem.
- Confirm cross-store: check whether Google Play 1-stars from the same week echo it, which separates a platform-specific bug from a universal one.
That's a root-cause loop you can run in an afternoon, entirely from review data.
Turning reviews into ASO and sentiment signal
Beyond firefighting, the merged corpus is a standing growth asset:
- Keyword mining: the nouns users repeat in 4- and 5-star reviews are organic ASO keywords — the words your real audience searches with.
- Competitor weakness mapping: scrape a rival's 1- and 2-star reviews; their recurring complaints are your positioning angles.
- Rating-trend tracking: chart average rating per release to see if each update actually moved conversion.
- Sentiment over time: run the text through any sentiment model and watch the curve around launches and price changes.
Running it as an API call
One run can target either store. Apple by track ID with countries; Google by package name with language:
curl -X POST "https://api.apify.com/v2/acts/renzomacar~app-store-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"store": "appstore",
"appId": "389801252",
"countries": ["us", "gb", "de"],
"sort": "mostRecent",
"maxReviews": 500
}'
Swap "store": "googleplay" and "appId": "com.instagram.android" to hit the other store with the same call shape. Append &format=csv on the dataset URL for a spreadsheet.
Mine both stores without writing two scrapers
Apple storefronts and Google Play in one Actor — full review text, version, ratings and developer replies, country by country. Free Apify credits to start.
Get the App Reviews Scraper → Or get done-for-you leadsDisclosure: the links to Apify on this page are affiliate links. If you create a paid account through them we may earn a commission, at no extra cost to you. We recommend Apify because we build and ship the App Store Scraper on it ourselves.