Apple App Store Reviews & Ratings Scraper
Pricing
from $6.15 / 1,000 results
Apple App Store Reviews & Ratings Scraper
Extract Apple App Store reviews and ratings for any app by app ID, URL or search term. Get star rating, title, body, author, app version, votes and date, with country codes like us, gb, mx and br. Export to JSON, CSV or Excel. No API key.
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
20 hours 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 available. It returns every field the App Store review feed exposes (rating, title, body, author, app version, votes, and developer response) 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 nine filters to target exactly the reviews you need.
📥 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
- Billing and limits
- FAQ and troubleshooting
What it does
The actor resolves apps from app IDs, App Store URLs, or a search term, pulls each app's metadata and the customer review feed for the country you pass, 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. Three optional AI add-ons (paid plans only) can classify sentiment, summarize the review, and extract topics and a category.
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. The Apple review feed caps at about 500 reviews per app.
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. |
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 ratings and reviews, for example us, gb, mx, br. |
maxReviews | integer | no | 10 | Maximum reviews per app. The App Store feed caps at about 500. |
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. |
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, or 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.
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 reviews 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. - Feed ceiling. The Apple review feed returns at most about 500 reviews per app per country.
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?
Set country to the two-letter App Store code, for example mx or br. App Store URLs already encode the country.
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.
