App Store Reviews Scraper | Multi-Country, Rating & Version avatar

App Store Reviews Scraper | Multi-Country, Rating & Version

Pricing

from $0.01 / 1,000 results

Go to Apify Store
App Store Reviews Scraper | Multi-Country, Rating & Version

App Store Reviews Scraper | Multi-Country, Rating & Version

Extract Apple App Store reviews from multiple country storefronts in a single run. Filter by star rating to find complaints or app version to see what a release fixed or broke. Returns review text, title, rating, version, author, vote counts and timestamps and app metadata. No account/API required.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

dvnt

dvnt

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

App Store Reviews Scraper

Pulls Apple App Store reviews for any app, from as many storefronts as you like, in a single run. Filters by star rating and by app version.

Apple shows reviews in the store but gives you no export, no way to isolate a release, and no way to read more than one country at a time. If you ship an update and want to know what broke, the alternative is scrolling the store by hand, one storefront at a time.

What it does that the store does not

Reviews are held per storefront. A review written in the US never appears in the UK feed, and the two sets do not overlap at all. Across a run covering GB, US and AU, review IDs did not repeat once. Reading several storefronts is the only way to get depth on an app, and it is the main reason to use this.

Version filtering answers the question you actually have after a release. Ask for version 7.136.0 and one and two star reviews, and you get the complaints about that build and nothing else.

Example

Input:

{
"searchTerms": ["duolingo"],
"countries": ["gb", "us", "au"],
"minRating": 1,
"maxRating": 2,
"maxReviewsPerApp": 300
}

That resolves the term to app 570060128, reads all three storefronts, and returns 300 one and two star reviews. One row:

{
"appId": "570060128",
"appName": "Duolingo: Language & Chess",
"country": "gb",
"reviewId": "14473595439",
"author": "Shiya 380",
"rating": 4,
"version": "7.137.0",
"title": "Helps u learn",
"content": "Duolingo is good",
"voteSum": 0,
"voteCount": 0,
"updatedAt": "2026-08-26T09:40:20.000Z",
"reviewUrl": "https://apps.apple.com/gb/app/id570060128?see-all=reviews",
"sortOrder": "mostRecent",
"developer": "Duolingo",
"currentVersion": "7.137.0",
"averageUserRating": 4.69714,
"userRatingCount": 969158,
"primaryGenre": "Education",
"price": 0,
"releaseDate": "2012-11-13T08:00:00Z"
}

Timestamps are converted to UTC, so rows from different storefronts sort against each other correctly. Apple returns a local offset.

Input

FieldTypeDefaultWhat it does
appIdsarray["570060128"]Numeric App Store IDs. Take the digits after id in the store URL.
searchTermsarray[]App names to resolve instead of IDs.
maxAppsPerSearchTerminteger1How many apps each term returns. Raise it to pull a competitor set.
countriesarray["gb"]Storefront codes such as gb, us, au, de.
sortBystringmostRecentmostRecent or mostHelpful.
maxReviewsPerAppinteger200Row limit per app, counted across all storefronts.
minRatinginteger1Lower bound, inclusive.
maxRatinginteger5Upper bound, inclusive.
versionsarray[]Keep only these release strings. Empty means all.
includeAppMetadatabooleantrueAdds developer, genre, price and the other app columns to every row.
deduplicateAcrossSortsbooleanfalseReads both sort orders and drops anything seen twice.

Provide appIds or searchTerms. Both together is fine.

Limits worth knowing before you run it

These come from testing against the live feed, not from Apple's documentation, which does not cover any of it.

The feed stops at 500 per storefront

Apple caps it at 500 reviews per app, per storefront, per sort order, which is ten pages of fifty. Request page eleven and you get HTTP 400 with the body CustomerReviews RSS page depth is limited to 10. Multiple storefronts is how you get past 500 on an app, because each storefront has its own 500.

Yield varies between runs

Expect roughly 400 to 500. Apple's feed contains empty pages that sit between full ones, and their positions move over time. The same app and storefront returned a clean 500 one morning and 400 a few hours later, with holes at pages three and seven. This scraper pages through to the ceiling and steps over the gaps, so you get everything that is there. It does mean two runs of identical input can return slightly different counts with nothing wrong.

The row limit is per app, not per storefront

maxReviewsPerApp counts across every storefront you asked for. Storefronts fill in the order you list them. Setting it to 60 with ["gb", "us"] can return 60 rows from GB and none from US. If you want depth everywhere, set the limit high enough to cover every storefront you asked for.

Reading both sort orders costs about double

deduplicateAcrossSorts roughly doubles the request count. The two sort orders overlap without being identical, so it returns more unique reviews per storefront, and it costs more.

FAQ

How do I find an app's ID? Open the app in the App Store and look at the URL. In apps.apple.com/gb/app/duolingo/id570060128 the ID is 570060128. You can also pass the name in searchTerms instead.

Can I get more than 500 reviews for one app? From a single storefront, no. Apple will not serve them. Add storefronts, since each has its own separate set of up to 500, or set deduplicateAcrossSorts to true to pick up reviews that only appear in the other sort order.

Why do GB and US return different app names for the same ID? Apple localises store listings. App 570060128 is "Duolingo: Language & Chess" in GB and AU, and "Duolingo: Language Lessons" in US. The ID is the same everywhere, and metadata is fetched per storefront, so each row carries the name used in that country.

Can I scrape Google Play with this? No. This reads Apple only.

Does it need an Apple account or any credentials? No. It reads public endpoints logged out, and there is nothing to configure.

How far back do reviews go? As far as 500 reviews reaches for that storefront, which depends on how busy the app is. A popular app might cover a few weeks. A quiet one can go back years.

Why did I get fewer rows than maxReviewsPerApp? Either your filters excluded them, the app has fewer reviews than the limit in the storefronts you asked for, or you hit the per storefront ceiling. The run log states what was read and what was kept for each app and storefront.

Can I track a specific release? Yes, that is what versions is for. Pass ["7.136.0"] to read only reviews left against that build.

What happens if an app is not sold in a storefront I listed? It is skipped with a warning in the log, and the rest of the run continues.

Output

Every row carries appId, appName, country, reviewId, author, rating, version, title, content, voteSum, voteCount, updatedAt, reviewUrl and sortOrder.

With includeAppMetadata on, each row also gets developer, currentVersion, averageUserRating, userRatingCount, primaryGenre, price and releaseDate.

Two notes on the shape. Apple publishes no permalink for an individual review, so reviewUrl points at the app's reviews tab in that storefront. Reviewer identity is limited to the display name, because that is all Apple exposes.

The output shape is declared in the scraper rather than passed through from Apple, so a change at their end cannot quietly alter the columns your pipeline receives.