Apple App Store reviews for any app, in any country, as clean JSON or CSV
Last updated:
The App Store Connect API only gives you reviews for apps your team owns, and it needs a private key. To read what users say about any app, including competitors, in any storefront, this Actor collects reviews from Apple's public customer-review feed and adds the app's public metadata. It needs no login and no Connect key.
What you get
One row per review:
| Field | Example |
|---|---|
appId, appName, country | 570060128, Duolingo: Language Lessons, us |
reviewId, title, text, rating (1–5) | 14612250135, Fun, Very fun and…, 5 |
version, date, userName | 7.142.0, 2026-09-30T13:01:34-07:00, … |
voteCount, voteSum | helpfulness votes |
Optionally, one app-details row per app × country: name, developer, price and currency, average rating, rating count, version, release dates, genres, content rating, size, minimum OS and description.
App-details row from a real run:
{
"type": "app",
"appId": "570060128",
"country": "us",
"name": "Duolingo: Language Lessons",
"developer": "Duolingo, Inc",
"price": 0,
"currency": "USD",
"averageRating": 4.72302,
"ratingCount": 5481026,
"version": "7.142.0",
"currentVersionReleaseDate": "2026-09-28T17:42:01Z",
"genres": ["Education", "Social Networking"],
"contentRating": "4+",
"url": "https://apps.apple.com/us/app/duolingo-language-lessons/id570060128?uo=4"
}Use cases
- ASO and product feedback: pull every recent review of your app into a spreadsheet or database and track ratings by version.
- Competitor monitoring: watch a competitor's rating, review volume and release cadence across countries.
- Market research: compare what users complain about across the top apps in a category and storefront.
Run it in the Apify Console (no code)
- Open the App Store Reviews Scraper and click Try for free.
- Paste App Store URLs or numeric app ids, for example
https://apps.apple.com/us/app/duolingo-language-lessons/id570060128or570060128. - Choose countries (
us,gb,de…), the maximum number of reviews per app, and optionally asinceDate. - Click Start, then export the dataset as CSV, Excel or JSON.
Run it from code
Replace <owner>/app-store-reviews with the Actor id shown on its Store page.
Node.js (apify-client)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('<owner>/app-store-reviews').call({
apps: ['570060128'], countries: ['us'], maxReviewsPerApp: 50, includeAppDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) console.log(row.type, row.type === 'app' ? `${row.name} ★${row.averageRating}` : `${row.rating}★ ${row.title}`);Python (apify-client ≥ 3)
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("<owner>/app-store-reviews").call(
run_input={"apps": ["570060128"], "countries": ["us", "gb"], "maxReviewsPerApp": 200},
)
for item in client.dataset(run.default_dataset_id).list_items().items:
print(item["type"], item.get("rating"), item.get("title"))curl (one call, results in the response)
curl -s -X POST "https://api.apify.com/v2/acts/<owner>~app-store-reviews/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"apps":["570060128"],"countries":["us"],"maxReviewsPerApp":50}'Limits
- Up to 500 reviews per app per country. Apple's public feed stops there (10 pages × 50). To get more coverage, add more
countries, since reviews differ by storefront. - Developer replies are not part of Apple's public feed, so
developerResponseis alwaysnull. - Reviews come newest first.
sinceDatestops paging once older reviews are reached.
Pricing
$0.20 per 1,000 rows ($0.0002 per review or app-details row), pay per event. You pay only for rows delivered, with no subscription.