// HELP / HOW-TO-GET-APP-STORE-REVIEWS

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.