Apple App Store Reviews API
Customer reviews with titles, ratings, dates and developer replies, 20 a page and four sorts deep.
GET /v1/apple-app-store/apps/{appId}/reviews1 credit Failed requests are free
About this endpoint
GET /v1/apple-app-store/apps/{appId}/reviews takes the numeric app id, an optional country, a sort of recent, helpful, favorable or critical, and a 1-based page of 20 reviews. If you learned the app by bundle id, look it up with the app route first. Each review has id, title, body, rating (1 to 5), postedAt, isEdited, author.name and developerReply, which is null when the developer did not reply.
The response is data.lookupStatus, data.storefront, data.appId, data.sort, data.reviews, data.depthLimited and data.page. page.hasMore and page.nextPage tell you where to go next. depthLimited is true when a deep page of a very long list came back empty because it was temporarily unavailable, not because the list ended. Retry that page, try another sort, or treat the sort as exhausted. Apple keeps some unsold apps' old reviews, and those are returned as found; use the app route to check whether the app is sold in the storefront. The last page with rows can still say page.hasMore: true, so stop at the first empty page.
Apple App Store Reviews API FAQ
How many reviews are on a page?
20. Pass page=2 for the next 20 and follow page.nextPage while page.hasMore is true. The contract accepts pages up to 5,000. The last page with rows can still say hasMore true, so stop at the first empty page.
What sorts are available?
recent (newest first), helpful (Apple's own ranking), favorable (newest 5 star reviews) and critical (newest 1 star reviews).
What does depthLimited mean?
Near the bottom of a very long list a page is available only some of the time. depthLimited is true when this page was unavailable, so an empty reviews list does not prove the list ended. Retry the page or use another sort. If the whole sort is exhausted, depthLimited is false and reviews is empty.
Are developer replies included?
Yes. Each review has developerReply, with id, body and postedAt, or null when the developer did not reply.
Why is lookupStatus not_found?
The app id does not exist, or the storefront has no reviews for it at all. An app that is no longer sold can keep old reviews in a storefront, and those answer found; use the app route to check whether it is sold there now.
How many credits does the reviews route cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
Other Apple App Store endpoints
- AppGET /v1/apple-app-store/apps/{appId}
- App detailsGET /v1/apple-app-store/apps/{appId}/details
- In-app purchasesGET /v1/apple-app-store/apps/{appId}/in-app-purchases
- Apps (batch)GET /v1/apple-app-store/apps
- SearchGET /v1/apple-app-store/apps/search
- ChartsGET /v1/apple-app-store/charts
- DeveloperGET /v1/apple-app-store/developers/{developerId}