iOS App Store Reviews Scraper & iTunes Reviews API avatar

iOS App Store Reviews Scraper & iTunes Reviews API

Pricing

Pay per event

Go to Apify Store
iOS App Store Reviews Scraper & iTunes Reviews API

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

Winters Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 sinceDate cutoff. 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. maxReviewsPerApp limits each country and maxReviewsTotalPerApp limits 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).

EventPricePer 1,000
Review returned$0.00008$0.08
App-details row$0.001$1.00

Worked examples:

What you pullItemsCost
500 reviews, one app, one country500$0.04
1,000 reviews1,000$0.08
5 competitor apps x 200 reviews1,000$0.08
5,000 reviews x 10 countries50,000$4.00
10,000 reviews10,000$0.80
100 app-details rows100$0.10
One app, countries: ["all"], default total capup to 2,000up 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

  1. Open the actor in Apify Console and click Try for free (or Start).
  2. Paste one or more app IDs or App Store URLs into Apps. The app ID is the number after id in the URL: https://apps.apple.com/us/app/facebook/id284882215 has ID 284882215. Full URLs work too.
  3. 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

FieldTypeDefaultWhat it does
appsarray["284882215"]App IDs or App Store URLs
searchTermsarraynoneNames to look up; top results become apps
searchLimitinteger1Apps taken per search term (1 to 25)
countriesarray["us"]Two-letter storefront codes, or ["all"] for every storefront
maxReviewsPerAppinteger100Cap per app and country (1 to 500)
maxReviewsTotalPerAppinteger2000Cap per app across all countries. Remaining countries are skipped once reached
minRatingintegernoneOnly reviews with at least this many stars
maxRatingintegernoneOnly reviews with at most this many stars
sinceDatestringnoneOnly reviews on or after YYYY-MM-DD
keywordstringnoneTitle or text must contain all these words
includeAppDetailsbooleanfalseAlso 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"
}
FieldMeaning
typereview or app-details
platformAlways ios
appId, appNameApp identifier and name
countryStorefront the review was posted in
reviewIdApple's review ID
title, textWhat the reviewer wrote, in the language written
rating1 to 5 stars
versionApp version the review was written for
author, authorUrlReviewer display name and profile link when present
dateISO timestamp of the review
voteCountNumber of "helpful" votes Apple reports
topicsKeyword-rule tags
urlLink 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 ApifyClient
client = 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:

  1. "Pull the last 200 one-star and two-star reviews for app 284882215 in us and gb, then group the complaints by theme."
  2. "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."
  3. "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.

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