App Store Reviews API
ASORadar's App Store Reviews API returns user reviews for any app on the Apple App Store as clean JSON — over a single REST endpoint, billed per request. No scraping infrastructure, no proxy rotation, no headless Safari to babysit.
Quick start
Authenticate with your x-access-key header and pass the numeric App Store app_id:
curl "https://api.asoradar.com/a1/reviews?app_id=389801252&country=us" \
-H "x-access-key: YOUR_ACCESS_KEY"
That returns the most recent reviews for Instagram (389801252) in the US storefront. Create an account to get an access key and 100 free requests to evaluate the API before paying anything.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
app_id |
string | — | Required. Numeric App Store id (e.g. 389801252). |
country |
string | us |
Two-letter storefront code (us, gb, de, jp, ...). |
rating |
int | — | Keep only reviews with this star rating (1–5). |
since / until |
datetime | — | ISO-8601 date window. |
since_review_id |
string | — | Cursor — return only reviews newer than this id. |
search |
string | — | Full-text filter over review title and body. |
fresh |
bool | false |
Bypass the cache and force a refetch from the store. |
count |
int | 200 |
Page size, up to 1000. |
Response shape
The endpoint is cache-first. It serves fresh reviews from ASORadar's store when available and falls back to a live scrape, walking newest pages until it hits the watermark. Every response carries cache metadata so you can reason about freshness:
{
"items": [
{
"review_id": "11103948571",
"rating": 1,
"title": "Keeps crashing after update",
"body": "App closes on launch since the latest version...",
"author": "joey_dev",
"version": "302.1",
"country": "us",
"created_at": "2026-06-21T08:14:00Z"
}
],
"total": 200,
"cached": true,
"fetched_at": "2026-06-24T22:00:00Z"
}
Common patterns
Triage negative reviews after a release — pull only 1-star reviews mentioning a keyword:
curl "https://api.asoradar.com/a1/reviews?app_id=389801252&rating=1&search=crash" \
-H "x-access-key: YOUR_ACCESS_KEY"
Incremental sync — store the newest review_id you've seen and pass it back as since_review_id so you only fetch what's new. That keeps polling cheap on a pay-per-request plan.
Competitor monitoring — point the same call at a competitor's app_id. The schema is identical, so one integration covers your whole tracking list.
Why an API instead of scraping
Apple's public RSS review feed is capped (roughly the latest 500 reviews, paginated awkwardly, US-centric) and the storefront HTML changes without notice. Maintaining your own scraper means proxies, rate-limit backoff, and parser rot. ASORadar absorbs all of that and gives you the same JSON shape for both stores — see the matching Google Play Reviews API.
Pricing
Pay-per-request from $0.001 per call, no monthly minimum and no seats. You top up a balance and spend it only on successful requests; cache hits are billed at the same low rate, and 404s for dead app ids are cached for an hour so you never pay twice for nothing. Full details on the pricing page.
FAQ
Which App Store id do I use?
The numeric id from the App Store URL — apps.apple.com/us/app/instagram/id389801252 means app_id=389801252. Not the bundle id.
Can I get reviews from other countries?
Yes. Pass country= with any storefront code. Each storefront returns its own localized reviews.
How fresh are the reviews?
Cache-first responses include fetched_at. Pass fresh=true to force a live refetch when you need the absolute latest.
Is there a free tier?
New accounts get 100 free promo requests to evaluate the API. After that it's pay-per-request from $0.001.