How to Get App Store Reviews (API Guide)
This is a practical guide to pulling App Store reviews programmatically — the options, their limits, and a working API example you can run in two minutes.
The options
| Approach | Effort | Limits |
|---|---|---|
| Apple RSS review feed | Low | ~latest 500 reviews, US-centric, awkward pagination, no full-text filter |
| Scrape the storefront HTML yourself | High | Proxies, rate limits, parser breaks when Apple changes markup |
| Open-source scraper libs | Medium | You own the breakage when the format shifts |
| Reviews API (ASORadar) | Low | Pay-per-request; maintained for you; both stores, one schema |
Apple's RSS feed is fine for a quick look but caps out fast and gives you no filtering. Rolling your own scraper is real infrastructure — proxy pools, backoff, and a parser you'll be patching forever. An API trades a per-request fee for never touching any of that.
Step 1 — Get an access key
Create an account and copy your access_key from the dashboard. New accounts include 100 free requests, enough to build and test against real data.
Step 2 — Your first request
curl "https://api.asoradar.com/a1/reviews?app_id=389801252&country=us" \
-H "x-access-key: YOUR_ACCESS_KEY"
389801252 is Instagram's numeric App Store id (from apps.apple.com/...id389801252). Swap in any app's id.
Step 3 — Filter to what matters
Most teams only care about a slice — recent negative reviews after a release, say:
curl "https://api.asoradar.com/a1/reviews?app_id=389801252&rating=1&search=crash&count=50" \
-H "x-access-key: YOUR_ACCESS_KEY"
rating=1 keeps one-star reviews; search=crash filters the text; count caps the page (up to 1000).
Step 4 — Pull reviews in Python
import requests
resp = requests.get(
"https://api.asoradar.com/a1/reviews",
params={"app_id": "389801252", "country": "us", "count": 200},
headers={"x-access-key": "YOUR_ACCESS_KEY"},
)
data = resp.json()
for r in data["items"]:
print(r["rating"], r["title"], "-", r["author"])
print("cached:", data["cached"], "fetched_at:", data["fetched_at"])
Step 5 — Sync incrementally (don't re-pay for old reviews)
Store the newest review_id you've processed and pass it back as since_review_id so each run fetches only new reviews — the cheapest way to keep a dataset current on pay-per-request:
params = {"app_id": "389801252", "since_review_id": last_seen_id}
new_reviews = requests.get(
"https://api.asoradar.com/a1/reviews", params=params,
headers={"x-access-key": "YOUR_ACCESS_KEY"},
).json()["items"]
Freshness vs cost
Responses are cache-first and include cached and fetched_at. Reuse cached data when you can; pass fresh=true only when you genuinely need a live refetch — it still bills per request but bypasses the cache.
Google Play too
The exact same flow works for Android — use the /g1/reviews prefix and a package-name app_id. See the Google Play Reviews API guide and the App Store Reviews API reference.
FAQ
Can I get App Store reviews without an API?
Apple's RSS feed exposes a limited, recent slice with no filtering. For complete, filterable, maintained access — and Google Play in the same schema — an API like ASORadar is simpler than scraping.
How many reviews can I fetch per request?
Up to 1000 via count. Use since_review_id to page through more incrementally.
Do I pay for cached responses?
Yes, at the same per-request rate from $0.001. Caching protects freshness and upstream stores; it isn't free, but 404s are cached for an hour so you don't pay repeatedly for dead ids.
Is there a free way to try it?
Every new account gets 100 free requests. Sign up to start.