App Store Reviews Scraper API
Our App Store reviews scraper reads Apple's customer-reviews feed for any app id and returns each review as JSON: rating, title, body, app version, author, date, and helpful-vote counts, roughly 50 reviews per page.
Why it is hard
Apple has no review API for apps you do not own, and the public customer-reviews source is an Atom RSS feed that throttles hard per egress IP, answering repeat traffic with an empty feed rather than reviews. Its JSON variant is a long-standing Apple bug that returns zero entries, so the XML feed is the only reliable source and it has to be parsed and rotated carefully.
Quickstart
curl "https://api.appstorescraperapi.com/api/v1/appstore/reviews?id=284882215&page=1&sort=mostRecent&api_key=$API_KEY" import requests
BASE = "https://api.appstorescraperapi.com"
API_KEY = "YOUR_API_KEY"
# Pass the numeric App Store app id (same id as appstore/product).
data = requests.get(
f"{BASE}/api/v1/appstore/reviews",
params={
"id": "284882215", # the app's App Store id
"country": "us", # storefront, two-letter ISO code
"page": 1, # 1-based, Apple caps at page 10
"sort": "mostRecent", # mostRecent is the reliable sort
"api_key": API_KEY,
},
timeout=30,
).json()
print(data["id"], "-", data["total_results"], "reviews on page", data["page"])
for r in data["reviews"]:
print(r["rating"], r["title"], "-", r["author"], "(v" + str(r["version"]) + ")") Response
{
"id": "284882215",
"country": "us",
"page": 1,
"sort": "mostRecent",
"total_results": 50,
"reviews": [
{
"id": "11498349827",
"author": "jdoe_reviews",
"author_url": "https://itunes.apple.com/us/reviews/id123456789",
"rating": 5,
"title": "Works great after the update",
"body": "The latest version fixed the sync issue I was having. Fast and stable now.",
"version": "9.1.60",
"date": "2026-06-28T14:03:11-07:00",
"vote_sum": 12,
"vote_count": 14
}
]
} | Field | Type | Description |
|---|---|---|
id | string | The app id echoed back from your request. |
country | string | The storefront the reviews were read from. |
page | integer | The reviews page number for this response. |
sort | string | The sort order applied, mostRecent or mostHelpful. |
total_results | integer | Number of reviews parsed on this page. |
reviews | array | The reviews on this page, each an object with the fields below. |
rating | integer | The star rating the reviewer gave, 1 to 5. |
title | string | The review headline. |
Use it for
Review monitoring
Voice-of-customer analysis
Release feedback tracking
Competitor review mining
Under the hood
- Parsed review objects Each review comes back with rating, title, body, version, author, date, and helpful-vote counts, parsed from Apple's Atom feed into JSON.
- Paged, up to Apple's cap Read roughly 50 reviews per page across the 10 pages Apple exposes, using the page parameter to walk through them.
- Honest empty handling A throttled or over-the-end feed returns a clear diagnostic instead of a silent empty success, so you know when to retry versus when there simply are no more reviews.
- Anti-bot and proxy rotation Rotating residential and datacenter proxies spread requests across IPs to work around Apple's per-IP throttling on the reviews feed.
Pricing
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
What is an App Store reviews scraper?
An App Store reviews scraper is a tool that collects customer reviews for an iOS app and returns them as structured data. Our App Store reviews scraper API takes an app id and returns each review's rating, title, body, app version, author, date, and helpful-vote counts as JSON, reading Apple's public customer-reviews feed roughly 50 reviews per page.
How do I scrape App Store reviews for an app?
Send one GET request to our appstore/reviews endpoint with id set to the numeric App Store id, plus your API key. Add country for the storefront, page to walk through pages, and sort to choose the order. We fetch Apple's reviews feed, parse the XML, handle proxy rotation and retries, and return the reviews as clean JSON.
How many reviews can I get, and how far back?
Apple's public customer-reviews feed exposes up to 10 pages of roughly 50 reviews each per storefront, so a single storefront yields around 500 recent reviews. You page through them with the page parameter. Reading multiple storefronts with the country parameter widens the set, since reviews are per-region.
Why does a reviews request sometimes come back empty?
Apple throttles its customer-reviews RSS feed aggressively per egress IP and answers a throttled request with an empty feed whose pagination links are blank. Our endpoint detects that signature, labels it clearly, and retries on a fresh exit IP rather than returning a false empty page. An empty result can also mean you paged past the last review page or the app genuinely has no reviews, and the diagnostic distinguishes those cases.
Can I sort reviews by most helpful?
The sort parameter accepts mostRecent and mostHelpful. mostRecent is the order Apple populates reliably, so it is the default. Apple offers mostHelpful but frequently returns an empty feed for it on their side regardless of page, so mostRecent is the dependable choice for consistent results.
Do I need an Apple developer account to read reviews?
No. You only need an appstorescraperapi key passed as the api_key query parameter. Apple's Connect review tools only cover apps you own; this endpoint reads the public customer-reviews feed for any app id, with no Apple account required. The free tier includes 1,000 requests per month.