App Store Reviews Scraper - Apple iOS Reviews & Ratings API
Pricing
from $6.15 / 1,000 results
App Store Reviews Scraper - Apple iOS Reviews & Ratings API
Scrape Apple App Store reviews and ratings for any iOS app by app ID, URL or search term. Get star rating, title, body, author, app version, date and developer response across 150+ country stores, with rating, date, version and keyword filters. No API key. Export to JSON, CSV or Excel.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
11 days ago
Last modified
Categories
Share
Apple App Store Reviews & Ratings Scraper
Here is one real result, with every field the actor returns (the appDescription, appScreenshots, and appLanguages arrays are trimmed here for readability):
{"appId": 333903271,"appName": "X","appAverageRating": 4.58335,"appRatingCount": 10938508,"appVersionLatest": "12.16","seller": "X Corp.","genre": "News","appDescription": "X (formerly Twitter) is a social media app where you can follow breaking news, live events, and trending topics as they happen...","appReleaseNotes": "We made improvements and squashed bugs so X is even better for you.","appPrice": 0,"appFormattedPrice": "Free","appCurrency": "USD","appContentRating": "17+","appReleaseDate": "2009-10-09T19:50:00Z","appCurrentVersionReleaseDate": "2026-08-10T22:31:11Z","appSizeBytes": 496360448,"appMinimumOsVersion": "15.0","appDeveloperName": "X Corp.","appDeveloperUrl": "http://x.com/","appDeveloperViewUrl": "https://apps.apple.com/us/developer/x-corp/id296415947?uo=4","appDeveloperId": 296415947,"appBundleId": "com.atebits.Tweetie2","appIcon": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/c8/a4/ff/c8a4ffb6-5efa-2202-61bb-d727ff3497a6/ProductionAppIcon-0-0-1x_U007emarketing-0-8-0-0-0-85-220.png/512x512bb.jpg","appScreenshots": ["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/21/82/3c/.../320x480bb.jpg"],"appGenres": ["News", "Social Networking"],"appLanguages": ["AR", "EN", "ES", "FR", "JA", "PT"],"appAverageRatingCurrentVersion": 4.58335,"appRatingCountCurrentVersion": 10938508,"country": "us","reviewId": "14420739998","author": "hi 录哥","authorUrl": "https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewUserReviews?userProfileId=1956428607","rating": 5,"title": "好","body": "非常好","appVersion": "12.16","voteSum": null,"voteCount": null,"developerResponse": null,"developerResponseDate": null,"updatedAt": "2026-08-13T00:00:00.000Z","url": "https://apps.apple.com/us/app/x/id333903271?uo=4","aiSentiment": null,"aiSentimentScore": null,"aiSummary": null,"aiTopics": null,"aiCategory": null,"observedAt": "2026-08-14T05:42:07.440Z","error": null}
The most complete Apple App Store reviews scraper and iOS app reviews API on Apify. Pull App Store customer reviews and ratings for any iOS app by app ID, App Store URL, or search term, in a single country or across 150+ country storefronts at once. Unlike scrapers built on Apple's public RSS feed, which stops at roughly 500 reviews per app, this actor reads the storefront review feed that paginates thousands of reviews per app and country so you get real depth for app review analysis, App Store Optimization (ASO), and app reputation monitoring.
It returns every field the review feed exposes (star rating, title, body, author, app version, and review date) joined with full app metadata (average rating, rating count, developer, price, size, genres, languages, screenshots), plus optional AI add-ons for sentiment, summary, and topics, and gives you seven review filters (rating range, date range, keyword, app version, and developer-response) to target exactly the reviews you need. No API key, no Apple developer account.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- How we compare
- Billing and limits
- FAQ and troubleshooting
What it does
The actor resolves apps from app IDs, App Store URLs, or a search term, then pulls each app's metadata and its customer review feed for every country you request (one, several, or all supported storefronts). It applies your rating, date, keyword, version, and developer-response filters and writes one normalized record per review to the run's dataset. Each review record is joined with the full app metadata so every row is self-contained. Missing source values are returned as null, never invented. Three optional AI add-ons (paid plans only) can classify sentiment, summarize the review, and extract topics and a category.
Common uses: app review analysis and customer feedback mining, App Store Optimization (ASO), competitor and category benchmarking, release-quality tracking by app version, developer-response auditing, and building NLP or sentiment training datasets.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 most recent US reviews for X (formerly Twitter).
{"appIds": ["333903271"],"country": "us","maxReviews": 10,"sortBy": "mostRecent"}
Provide appIds, appUrls, or a searchTerm. Use countries to scrape several storefronts in one run (for example ["us","gb","mx","br"], or ["all"] for every supported country).
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
appIds | string[] | no | ["324684580"] | Apple App Store numeric app IDs, for example 324684580 for Spotify. |
appUrls | string[] | no | (empty) | Full App Store URLs, for example https://apps.apple.com/us/app/spotify/id324684580. App ID and country are read from the URL. |
startUrls | array | no | (empty) | Alias for appUrls. Accepts plain URL strings or { "url": "..." } objects. Merged with appUrls. |
searchTerm | string | no | (none) | Find apps by name and scrape reviews of the top matches. |
searchLimit | integer | no | 3 | How many apps to take from the search term. |
country | string | no | us | Two-letter App Store country code, for example us, gb, mx, br. Used when countries is empty. |
countries | string[] | no | (empty) | Multiple two-letter country codes to scrape each app in every listed storefront. Use ["all"] for every supported country. Overrides country when set. |
maxReviews | integer | no | 10 | Maximum reviews per app and country. Also accepted as maxItems / maxReviewsPerApp. The feed paginates deep (thousands of reviews for popular apps). Set 0 with includeAppMetadata for metadata only. |
sortBy | enum | no | mostRecent | Review order. One of mostRecent, mostHelpful. |
includeAppMetadata | boolean | no | false | Also output one app-details row for apps with no reviews (or when maxReviews is 0). |
minRating | integer | no | (none) | Only return reviews with a star rating >= this value (1 to 5). |
maxRating | integer | no | (none) | Only return reviews with a star rating <= this value (1 to 5). |
reviewsFromDate | string | no | (none) | Only return reviews on or after this date, for example 2025-01-01. Also accepted as until. |
reviewsToDate | string | no | (none) | Only return reviews on or before this date, for example 2025-12-31. |
reviewKeyword | string | no | (none) | Only return reviews whose title or body contains this text (case-insensitive). |
reviewAppVersion | string | no | (none) | Only return reviews left on this exact app version, for example 8.9.0. |
onlyWithDeveloperResponse | boolean | no | false | Only return reviews that have a developer reply. |
withSentiment | boolean | no | false | AI add-on (paid plans only). Classify each review's sentiment with a confidence score. Billed only when produced. |
withSummary | boolean | no | false | AI add-on (paid plans only). Generate a 1 to 2 sentence summary of each review. Billed only when produced. |
withTopics | boolean | no | false | AI add-on (paid plans only). Extract discussed aspects/keywords and a broad category. Billed only when produced. |
Output reference
One dataset item per review (each joined with the app's metadata). Types: string, number, integer, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
appId | integer | Apple App Store numeric app ID. |
appName | string | App name. |
appAverageRating | number | Overall average rating (0 to 5). |
appRatingCount | integer | Total number of ratings. |
appVersionLatest | string | Latest published app version. |
seller | string | Seller name. |
genre | string | Primary genre. |
appDescription | string | Full app description. |
appReleaseNotes | string | Release notes for the current version. |
appPrice | number | Price as a number. |
appFormattedPrice | string | Price as displayed, for example Free. |
appCurrency | string | Currency code. |
appContentRating | string | Content advisory rating, for example 17+. |
appReleaseDate | string | ISO original release date. |
appCurrentVersionReleaseDate | string | ISO release date of the current version. |
appSizeBytes | integer | App download size in bytes. |
appMinimumOsVersion | string | Minimum iOS version required. |
appDeveloperName | string | Developer name. |
appDeveloperUrl | string | Developer website URL. |
appDeveloperViewUrl | string | Developer page URL on the App Store. |
appDeveloperId | integer | Apple developer ID. |
appBundleId | string | App bundle identifier. |
appIcon | string | App icon image URL. |
appScreenshots | string[] | App screenshot image URLs. |
appGenres | string[] | All genres the app is listed under. |
appLanguages | string[] | Supported language codes. |
appAverageRatingCurrentVersion | number | Average rating of the current version. |
appRatingCountCurrentVersion | integer | Rating count of the current version. |
country | string | App Store country code the review was pulled from. |
reviewId | string | Unique review ID. |
author | string | Review author display name. |
authorUrl | string | Author profile URL. |
rating | integer | Star rating of the review (1 to 5). |
title | string | Review title. |
body | string | Review body text. |
appVersion | string | App version the review was left on. |
voteSum | integer | Net helpful votes, or null. |
voteCount | integer | Total votes cast, or null. |
developerResponse | string | Developer reply text when the feed includes one. This review feed rarely exposes developer replies, so it is usually null. |
developerResponseDate | string | ISO date of the developer reply, or null. |
updatedAt | string | ISO date the review was posted or updated. |
url | string | App Store URL for the app. |
aiSentiment | string | Sentiment from the AI add-on (positive, negative, neutral), or null. |
aiSentimentScore | number | Sentiment confidence 0 to 1 from the AI add-on, or null. |
aiSummary | string | Short summary from the AI add-on, or null. |
aiTopics | string[] | Topics/keywords from the AI add-on, or null. |
aiCategory | string | Broad category from the AI add-on, or null. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"appIds": ["333903271"], "country": "us", "maxReviews": 3, "sortBy": "mostRecent"}):
{"appId": 333903271,"appName": "X","appAverageRating": 4.58335,"appRatingCount": 10938508,"seller": "X Corp.","genre": "News","country": "us","reviewId": "14420739998","author": "hi 录哥","rating": 5,"title": "好","body": "非常好","appVersion": "12.16","voteSum": null,"voteCount": null,"developerResponse": null,"developerResponseDate": null,"updatedAt": "2026-08-13T00:00:00.000Z","url": "https://apps.apple.com/us/app/x/id333903271?uo=4","observedAt": "2026-08-14T05:42:07.440Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~app-store-reviews-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"appIds":["333903271"],"country":"us","maxReviews":50,"minRating":1,"maxRating":2}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~app-store-reviews-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerm":"spotify","searchLimit":3,"country":"gb","maxReviews":100,"sortBy":"mostHelpful"}'
Apify CLI:
apify call scrapers_lat/app-store-reviews-scraper \--input '{"appUrls":["https://apps.apple.com/us/app/spotify/id324684580"],"maxReviews":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
How we compare
This actor is a strict superset of the popular App Store review scrapers: it accepts all of their inputs and returns all of their data, plus deeper pagination, more filters, and richer app metadata.
| Capability | This actor | automation-lab | theagents / thewolves |
|---|---|---|---|
| App ID / App Store URL input | Yes (appIds, appUrls, startUrls) | Yes | Yes |
| Search by app name | Yes (searchTerm) | No | No |
| Multiple countries / all storefronts | Yes (countries, ["all"]) | Yes | Country or all |
| Sort (recent / helpful) | Yes | Recent | Recent |
| Reviews per app | Thousands (deep feed) | ~500 (RSS ceiling) | ~500 (RSS ceiling) |
| Rating range filter | Yes (minRating/maxRating) | No | No |
| Date range filter | Yes (reviewsFromDate/reviewsToDate/until) | No | until only |
| Keyword filter | Yes (reviewKeyword) | No | No |
| App-version filter | Yes (reviewAppVersion) | No | No |
| Full app metadata joined per review | Yes (30+ fields) | Partial | Minimal |
| Optional AI sentiment / summary / topics | Yes (opt-in, paid) | No | No |
| No API key / no Apple account | Yes | Yes | Yes |
Common input aliases (startUrls, maxItems, maxReviewsPerApp, until) are accepted so you can point existing workflows at this actor without rewriting your input.
Billing and limits
- Pay per result. You are charged per review returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Apps that return no reviews cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 results per run. AI add-ons are disabled for free plans.
- AI add-ons (
withSentiment,withSummary,withTopics) require a paid plan and are charged per review only when the model returns usable output. They are billed after the review row is delivered, never before. - Review depth. The storefront review feed paginates far deeper than Apple's public RSS feed (which stops near 500 reviews). Popular apps expose thousands of reviews per country; smaller apps return everything they have. Set
maxReviewsto the depth you need.
FAQ and troubleshooting
A run returned 0 reviews. Why?
The app has no reviews in that country, or your filters matched nothing. Zero-result runs are not charged. Try a different country or loosen rating and date filters.
How do I get reviews for a specific country, or many countries?
Set country to the two-letter App Store code, for example mx or br. For several storefronts in one run, set countries to a list such as ["us","gb","mx","br"], or ["all"] for every supported country. App Store URLs already encode their own country. Reviews are localized, so each storefront returns that country's reviews in its own language.
How many reviews can I get per app? Is there a 500 limit?
No. Tools built on Apple's public RSS feed stop at about 500 reviews per app. This actor reads the deeper storefront review feed, which paginates through thousands of reviews per app and country. Set maxReviews (or maxItems) to the depth you want; smaller apps simply return everything available.
Why are votes null?
The current App Store review feed does not expose helpful-vote counts for every review; missing values are returned as null, never invented.
How do I only get complaints?
Set maxRating to 2 (or minRating/maxRating to 1) and optionally add a reviewKeyword.
Why are the AI fields null?
The AI add-ons are off by default and require a paid plan. Enable withSentiment, withSummary, or withTopics on a paid plan to populate them.
Is this an official Apple tool? No. This actor is independent and has no affiliation with Apple. It reads only data that is publicly available through the Apple App Store.
Related scrapers
- Amazon Reviews Scraper: Amazon customer reviews by product.
- AliExpress Product Scraper: AliExpress products by keyword or URL.
- Amazon Product Scraper: Amazon product data by keyword or ASIN.
- Archive.org Scraper: Internet Archive items and metadata.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Apple. Accesses only publicly available App Store data.
