iOS App Store Reviews Scraper & iTunes Reviews API
Pricing
Pay per event
iOS App Store Reviews Scraper & iTunes Reviews API
Scrape iOS App Store reviews and app details from the Apple iTunes endpoints. Output: rating, title, text, date, version, topic tags. Rating, date and keyword filters. $0.08 per 1,000 reviews, $1 per 1,000 app details.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Winters Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Apple App Store Reviews Scraper: iOS Reviews and Ratings by Country, CSV/JSON, $0.08 per 1K
Pull Apple App Store reviews for any iOS app, across one country or every storefront, and get clean JSON, CSV or Excel back. Reviews cost $0.08 per 1,000 ($0.00008 each). App details cost $1 per 1,000. You pay only for items returned after your filters.
Independent tool by Winters Works. Apple and App Store are trademarks of Apple Inc.
What does the App Store Reviews Scraper do?
Give it app IDs, App Store URLs or search terms, plus a list of countries. It reads Apple's public iTunes Lookup and Search endpoints and the public customer-reviews feed, then writes one dataset row per review. No login, no proxies, no browser.
Every review comes with:
- rating (1 to 5), title and full text
- date and the app version the reviewer was on
- author name and author profile link (when Apple provides one)
- helpful vote count
- country (storefront) and platform (
ios) - topic tags such as
crash,price,ads,login,performance,praise - a direct link to the app's review page
Optionally it also writes one app-details row per app and country: current price, average rating, rating count, genre, developer, version, release notes, minimum OS and more.
Why use this one?
- Many countries in one run. Pass
["us","gb","de","fr","jp"]and get one combined dataset. Or pass["all"]to try every App Store storefront (about 170). No need to start a separate run per country. - Filters that save money. Minimum and maximum star rating, a keyword filter (all words must appear), and a
sinceDatecutoff. Filtered-out reviews are never charged. - Topic tags. Each review is tagged by simple keyword rules, so you can count complaints about crashes or pricing without reading everything. The tags are a rough guide, not sentiment analysis.
- Low price per 1,000 reviews. $0.08 per 1,000, with a spend limit you control.
- A hard cap on cost.
maxReviewsPerApplimits each country andmaxReviewsTotalPerApplimits the total per app, so an "all countries" run cannot get out of hand.
How much does it cost?
Pricing is pay per event. There is no monthly rental and no minimum. You're never charged for failed or empty lookups, and the run's status message tells you why any input came back short (Apple's feed returned nothing for an app or country, Apple's RSS only exposes the latest ~500 reviews per country, a cap was reached, or the app wasn't found).
| Event | Price | Per 1,000 |
|---|---|---|
| Review returned | $0.00008 | $0.08 |
| App-details row | $0.001 | $1.00 |
Worked examples:
| What you pull | Items | Cost |
|---|---|---|
| 500 reviews, one app, one country | 500 | $0.04 |
| 1,000 reviews | 1,000 | $0.08 |
| 5 competitor apps x 200 reviews | 1,000 | $0.08 |
| 5,000 reviews x 10 countries | 50,000 | $4.00 |
| 10,000 reviews | 10,000 | $0.80 |
| 100 app-details rows | 100 | $0.10 |
One app, countries: ["all"], default total cap | up to 2,000 | up to $0.16 |
Apify's free plan includes roughly $5 of monthly platform credit, which at these prices covers tens of thousands of reviews. Platform usage (compute) is small for this actor, since it only makes lightweight HTTP requests. You can also set a maximum cost per run in the run options, and the actor stops cleanly when it reaches it.
Quick start
- Open the actor in Apify Console and click Try for free (or Start).
- Paste one or more app IDs or App Store URLs into Apps. The app ID is the number after
idin the URL:https://apps.apple.com/us/app/facebook/id284882215has ID284882215. Full URLs work too. - Pick countries, set Max reviews per app, and press Start. Results appear in the Output tab and can be downloaded as JSON, CSV, Excel, XML or HTML.
You can also find apps by name with Search terms. Each term is resolved through Apple's Search API and the top result is used (change Apps per search term to take more).
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
apps | array | ["284882215"] | App IDs or App Store URLs |
searchTerms | array | none | Names to look up; top results become apps |
searchLimit | integer | 1 | Apps taken per search term (1 to 25) |
countries | array | ["us"] | Two-letter storefront codes, or ["all"] for every storefront |
maxReviewsPerApp | integer | 100 | Cap per app and country (1 to 500) |
maxReviewsTotalPerApp | integer | 2000 | Cap per app across all countries. Remaining countries are skipped once reached |
minRating | integer | none | Only reviews with at least this many stars |
maxRating | integer | none | Only reviews with at most this many stars |
sinceDate | string | none | Only reviews on or after YYYY-MM-DD |
keyword | string | none | Title or text must contain all these words |
includeAppDetails | boolean | false | Also output one app-details row per app and country |
Example 1: one app, recent reviews
{"apps": ["284882215"],"countries": ["us"],"maxReviewsPerApp": 200}
Example 2: competitor sweep
{"apps": ["284882215", "324684580", "310633997", "389801252", "835599320"],"countries": ["us", "gb"],"maxReviewsPerApp": 200,"includeAppDetails": true}
Example 3: international complaints only
{"apps": ["284882215"],"countries": ["us", "gb", "de", "fr", "br"],"maxRating": 2,"sinceDate": "2026-09-01","maxReviewsPerApp": 100}
Example 4: every storefront, with a spending cap
{"apps": ["284882215"],"countries": ["all"],"maxReviewsPerApp": 50,"maxReviewsTotalPerApp": 1000}
With ["all"] the actor goes through the storefronts one at a time, biggest markets first (us, gb, ca, au, de, fr, jp and so on), and stops adding countries for an app once maxReviewsTotalPerApp is reached. Storefronts where the app is not sold are skipped quietly.
Output
A review record:
{"type": "review","platform": "ios","appId": "284882215","appName": "Facebook","country": "us","reviewId": "14645259799","title": "Too many ads","text": "I can barely scroll without hitting another ad.","rating": 1,"version": "582.0.0","author": "ExampleUser","authorUrl": "https://itunes.apple.com/us/reviews/id000000000","date": "2026-10-09T10:11:58.000Z","voteCount": 0,"topics": ["ads"],"url": "https://apps.apple.com/us/app/id284882215?see-all=reviews"}
| Field | Meaning |
|---|---|
type | review or app-details |
platform | Always ios |
appId, appName | App identifier and name |
country | Storefront the review was posted in |
reviewId | Apple's review ID |
title, text | What the reviewer wrote, in the language written |
rating | 1 to 5 stars |
version | App version the review was written for |
author, authorUrl | Reviewer display name and profile link when present |
date | ISO timestamp of the review |
voteCount | Number of "helpful" votes Apple reports |
topics | Keyword-rule tags |
url | Link to the app's reviews page |
App-details rows (type: "app-details") include bundleId, developer, genre, price, averageRating, ratingCount, averageRatingCurrentVersion, version, releaseNotes, releaseDate, minimumOsVersion, contentRating, fileSizeBytes, description, iconUrl and url.
Fields by use case: ASO work mostly uses text, title, country and rating. Sentiment and churn work uses rating, topics and voteCount. Release QA uses version, date and rating.
Use cases
How do I do App Store Optimization (ASO) research from reviews?
Reviews are the words real users use to describe an app. Pull a few hundred reviews for your app and for competitors, then look at the nouns and phrases that repeat: "widget", "offline mode", "sync", "family plan". Those are candidates for your subtitle, keyword field and screenshots. Run the same apps across several countries to see how the vocabulary changes by language. Use keyword to isolate reviews that mention a feature you are thinking about adding.
How do I track competitor app ratings over time?
Turn on includeAppDetails and schedule the actor weekly for a list of competitor IDs. Each run writes a snapshot with averageRating, ratingCount and the current version. Append the snapshots to a spreadsheet or database and you have a rating history. Reviews give you the color: set sinceDate to the last run and read only the new ones, or tag them by topics to see what changed after a competitor's release.
How do I find what users complain about after a release?
Run with maxRating: 2 and a recent sinceDate. Group the results by version and count the topics tags. A version with a spike in crash or login reviews is a quick signal that something broke. Read the highest voteCount reviews first, since other users agreed with them. This works for your own app and for competitors, whose bad releases are your acquisition opportunity.
How do I compare app sentiment across countries?
Pass a list of countries and compare average rating and topic counts per country. A pricing complaint that shows up only in one storefront often points to a local price tier problem. Language-specific complaints usually mean a translation or payment-method gap. Note that topics tags are keyword rules in English, so non-English reviews are mostly untagged and are better read directly or processed with your own tools.
How do I export App Store reviews to CSV?
Run the actor, open the Output tab, choose Export, and pick CSV or Excel. You can select which fields to include and whether to flatten the topics array. Through the API, call the dataset items endpoint with format=csv:
https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&token=<YOUR_APIFY_TOKEN>
Code examples
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("wintersworks/appstore-reviews-scraper").call(run_input={"apps": ["284882215"],"countries": ["us", "gb"],"maxReviewsPerApp": 100,"maxRating": 2,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["country"], item["rating"], item["title"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('wintersworks/appstore-reviews-scraper').call({apps: ['284882215'],countries: ['us', 'gb'],maxReviewsPerApp: 100,maxRating: 2,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, 'reviews');
curl
curl -X POST "https://api.apify.com/v2/acts/wintersworks~appstore-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"apps":["284882215"],"countries":["us"],"maxReviewsPerApp":50}'
The synchronous endpoint is handy for small runs. For larger ones, start a run and poll or use a webhook.
Scheduling and webhooks
Open Schedules in Apify Console and create a schedule (daily, weekly, or any cron expression) for the actor with your saved input. For a monitoring job, set sinceDate to a recent date, or run weekly with maxReviewsPerApp set to something larger than your typical weekly volume and remove duplicates by reviewId downstream.
To react when a run finishes, add a webhook on the ACTOR.RUN.SUCCEEDED event pointing at your own URL, a Slack incoming webhook, or an automation tool. The webhook payload includes the run's dataset ID, so your receiver can fetch the new rows.
Integrations and AI agents (MCP)
As with any Apify actor, the results can be sent onward with Apify's platform integrations: Make, n8n, Zapier, Google Sheets, Slack, Airtable, plus the REST API and the official JavaScript and Python clients. These are features of the Apify platform; set them up from the Integrations tab of the actor.
Use it from Claude, Cursor or other MCP clients
Apify hosts an MCP server that exposes actors as tools. Point your client at this actor with the URL below and an Apify API token.
Server URL: https://mcp.apify.com?actors=wintersworks/appstore-reviews-scraper
Config for Claude Desktop, Cursor or Claude Code (adjust to your client's format):
{"mcpServers": {"appstore-reviews": {"url": "https://mcp.apify.com?actors=wintersworks/appstore-reviews-scraper","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Example prompts:
- "Pull the last 200 one-star and two-star reviews for app 284882215 in us and gb, then group the complaints by theme."
- "Compare average rating and the most common complaint topics for these five app IDs in the us store, and tell me which one has the most crash complaints."
- "Get this week's new reviews for app 324684580 in de, fr and es and summarize what users ask for."
Known limitations
- Apple's public review feed exposes roughly the 500 most recent reviews per app per country (10 pages of 50). That limit comes from Apple, not from this actor. Totals depend on the app and the storefronts you choose.
- Reviews are returned most recent first. Other sort orders are not offered.
- Developer replies are not part of the public feed, so they are not included.
- Star ratings without written text are not included. Use the app-details row for overall rating counts.
- The feed is sometimes empty for an app, or empty for a while. When that happens the run still completes, logs a clear warning, and says so in the run's status message.
- Topic tags are English keyword rules, not AI sentiment analysis.
- Google Play is not covered. This actor handles the Apple App Store only.
Troubleshooting
The run finished with no reviews. First check the warning in the log and the run status message. The usual causes: Apple's feed returned nothing for that app or country (sometimes temporary, so try again later), the app is not sold in that storefront, or your filters (rating, keyword, date) excluded everything. Turn on includeAppDetails to confirm the app ID resolves.
Fewer reviews than I asked for. Apple only exposes a recent window per country. Add more countries, or use ["all"].
"App not found in storefront". The app is not available in that country, or the ID is wrong. Check the number in the App Store URL.
FAQ
What App Store review data can I extract?
Rating, title, text, date, app version, author name and link, helpful votes, country and topic tags for each review, plus optional app metadata such as price, genre, developer, average rating and release notes.
Can I scrape all countries at once?
Yes. Set countries to ["all"] and the actor goes through every App Store storefront, skipping the ones where the app is not sold. It stops adding countries for an app once maxReviewsTotalPerApp is reached (2,000 by default), which keeps the bill predictable.
How many reviews can I get per app?
Apple's public feed exposes roughly the 500 most recent reviews per app per country. The total you get depends on the app and how many storefronts you include. Popular apps with many storefronts give you more than small ones.
Can I export App Store reviews to CSV or Excel?
Yes. Use the Export option on the Output tab or the dataset API with format=csv or format=xlsx.
Can I filter reviews by date?
Yes, with sinceDate. Because the feed is newest first, the actor stops paging as soon as it reaches older reviews, so you do not pay for them.
Can I get developer replies?
No. Developer responses are not in Apple's public feed.
Does it work for Google Play?
No. This actor covers the Apple App Store only.
Why did my run return no reviews?
Apple's feed is sometimes empty for a particular app, or empty temporarily. The actor logs a warning and sets the status message, and never fails the run for this. Retry later, check your filters, and use includeAppDetails to confirm the app exists.
Is it legal to scrape App Store reviews?
The actor uses Apple's public iTunes endpoints and collects only review content that is publicly visible, without logging in. Legality depends on your jurisdiction and your use, so you are responsible for how you use the data, including privacy, copyright and Apple's terms. If you are unsure, ask a lawyer.
Which sort order do I get?
Most recent first. Other sort orders are not offered.
How fast is it, and are there rate limits?
Roughly 50 reviews per request, with a short polite delay between requests. A single app and country with 500 reviews takes about ten seconds. If Apple slows requests down, the actor retries with backoff.
Can I schedule it, and how much does it cost?
Yes, use Apify Schedules. Reviews are $0.08 per 1,000 and app details are $1 per 1,000. See the cost table above for examples.
Where do I get support?
Open an issue on the actor's page in Apify Console and we will reply. You can also email wintersworks.shop@gmail.com.
Support
Built and maintained by Winters Works. Questions or feature requests: open an issue on the actor page or email wintersworks.shop@gmail.com.
More from Winters Works
- Bulk Email Verifier & MX Record Checker: clean an email list before you send. Syntax, MX lookup, disposable and role-address checks, no SMTP probing.
- Greenhouse, Lever & Ashby Jobs API: every open role from company careers boards on 5 ATS platforms, normalized into one dataset.
- Website Tech Stack & SEO Audit: see what a list of sites runs on, plus SEO basics, security headers, SSL expiry and a 0-100 score.
- ClinicalTrials.gov Scraper & Monitor: search trials by condition, drug, sponsor or location, and track what's new or updated between runs.