App Store Reviews Scraper | No Personal Data
Pricing
Pay per usage
App Store Reviews Scraper | No Personal Data
Scrape Apple App Store reviews, ratings and app metadata. Review text, titles, scores, dates and app versions. No author names or profile links — GDPR-safe output. Apple caps its public feed at 500 reviews per app per country; collect across storefronts for more.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Alexandr Gobozov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
App Store Reviews Scraper — App Data & Ratings, No Personal Data
Scrape Apple App Store reviews, ratings, and full app metadata from any iOS app. This App Store scraper extracts review titles, review text, star scores, dates, app versions, and helpful votes, plus complete app listing data: price, category, release date, current version, and rating count.
Reviewer names and profile links are never collected. Every review is returned with an irreversible pseudonymous hash instead of a nickname, so you get the analysis you need without holding personal data. See Privacy and GDPR below.
Output uses the same field names as our Google Play Reviews Scraper, so both stores merge into one table without renaming a single column.
Unofficial tool. This Actor is not affiliated with, sponsored by, or endorsed by Apple Inc. "App Store" and "Apple" are trademarks of Apple Inc. This Actor reads only Apple's own publicly available endpoints.
Pricing
Currently free — you only pay Apify platform usage for the compute a run consumes. No per-result fee on top.
The one limit you need to know first
Apple's public review feed returns at most 500 reviews per app per country storefront — 10 pages of 50. There is no way around it, and any scraper claiming otherwise for the public feed is either paginating the same 500 rows or reading a private endpoint.
Two things actually work, and this actor is built for both:
- Collect from several storefronts. The cap is per country. Ten countries means up
to 5,000 reviews for the same app, and you get a useful per-market breakdown for free.
Put the codes in
countries. - Run it on a schedule. Set
reviewsSinceto yesterday and run daily. The 500-review window keeps moving, so your own dataset grows past the cap over time.
If you own the app, Apple's App Store Connect API returns your complete review history with no cap. That needs your own API key and is a different tool.
What this App Store scraper extracts
App data — title, developer, developer website, bundle ID, price, currency, average rating, rating count, current-version rating and count, content rating, genre and genre list, version, release date, last update date, minimum iOS version, download size, icon, store URL, supported languages, description, release notes, iPhone and iPad screenshots.
Review data — review title, review text, star rating (1–5), review date, app version the review was written on, helpful votes, total votes, storefront, pseudonymous author hash with duplicate-nickname indicators.
Why choose this iOS app scraper
- No personal data. No nicknames, no profile links, no developer contact details. Nothing in the output identifies a person.
- Merges with Google Play. Field names, date format, and the author-hash scheme are
identical to our Google Play actor. Concatenate the two datasets and every column
lines up. Rows carry a
sourcefield so you can always tell them apart. - Reliable dates. Apple returns review timestamps in the storefront's own offset —
-07:00for the US,+02:00for Germany. This scraper converts everything to UTC in ISO 8601, so a column sorted across markets is actually sorted. The original release date string is kept inreleasedText. - Handles messy input. Paste a full App Store URL, an
id310633997fragment, a bare numeric ID, or an iOS bundle ID likenet.whatsapp.WhatsApp. Bundle IDs are resolved automatically. Duplicates are removed, so you never pay twice for the same app. - Retries built in. Four attempts with exponential backoff on every request. One unavailable app never kills the whole run — you get the rest of your data plus a clear warning in the log.
- Incremental scraping. Set
reviewsSinceto a date and the scraper stops paging as soon as it reaches older reviews. - Efficient metadata. App cards are fetched in batches of 20 through Apple's official lookup endpoint — one request per 20 apps instead of one per app.
Use cases
App Store Optimization (ASO) — track rating trends and metadata changes for your app and competitor apps across markets.
Review analysis and sentiment analysis — export review titles and text to your own pipeline, LLM, or spreadsheet to find recurring complaints, feature requests, and bugs. App Store reviews carry a title, which is often a cleaner sentiment signal than the body.
Cross-platform comparison — run this actor and the Google Play one on the same product, stack the two datasets, and compare complaint mix between iOS and Android without any column mapping work.
Release monitoring — filter reviews by appVersion to see exactly how sentiment
changed after a release.
Market comparison — the same app scraped across us, gb, de, br, and jp
gives you five separate review pools plus five separate price and rating snapshots.
Fake review detection — authorHashCount and authorHashApps reveal nicknames
appearing across multiple apps, without exposing who wrote what.
Input
Give the scraper app IDs, a search query, or both.
{"appIds": ["310633997","https://apps.apple.com/us/app/spotify/id324684580","net.whatsapp.WhatsApp"],"searchQuery": "habit tracker","maxAppsFromSearch": 10,"scrapeAppDetails": true,"scrapeReviews": true,"maxReviewsPerApp": 500,"reviewsSort": "newest","reviewsSince": "2026-01-01","countries": ["us", "gb", "de"]}
| Field | Description |
|---|---|
appIds | Numeric App Store IDs, bundle IDs, or app page URLs. Duplicates removed automatically. |
searchQuery | Search the App Store instead of listing IDs. |
maxAppsFromSearch | How many search results to scrape. |
scrapeAppDetails | Return the app listing data. |
scrapeReviews | Return reviews. Set maxReviewsPerApp to 0 to skip. |
maxReviewsPerApp | Reviews per app per country, up to Apple's cap of 500. |
reviewsSort | newest or helpfulness. Apple's feed has no sort by rating. |
filterByScore | Only reviews with this star rating (1–5). Applied after fetching — see below. |
reviewsSince | YYYY-MM-DD. Stops early once older reviews are reached. |
countries | Two-letter storefront codes. Each one has its own reviews, prices, and its own 500-review cap. |
country | Shortcut for a single storefront. Ignored when countries is set. |
includeDescription | Turn off for a lighter dataset without description and screenshots. |
annotateAuthorCollisions | Adds duplicate-nickname indicators to reviews. |
maxConcurrency | Parallel requests, 1–10. |
About filterByScore. Apple has no server-side score filter, so filtering happens
after the feed is fetched. Setting it to 1 gives you the one-star reviews out of the 500
reachable ones — not 500 one-star reviews. Most scrapers do the same thing without
telling you.
Output
Results go to a single dataset. App rows have "type": "app", review rows have
"type": "review", and every row carries "source": "app_store", so you can filter,
split, or merge with Google Play data after export to JSON, CSV, Excel, or Google Sheets.
App record, shortened:
{"type": "app","source": "app_store","appId": "310633997","bundleId": "net.whatsapp.WhatsApp","country": "us","title": "WhatsApp Messenger","developer": "WhatsApp Inc.","installs": null,"realInstalls": null,"score": 4.7,"ratings": 12345678,"histogram": null,"free": true,"price": 0,"currency": "USD","genre": "Social Networking","contentRating": "12+","released": "2009-05-03T07:00:00+00:00","releasedText": "2009-05-03T07:00:00Z","updated": "2026-09-01T18:00:00+00:00","version": "25.1.0","minimumOsVersion": "15.1","fileSizeBytes": 243167232,"scrapedAt": "2026-09-07T12:04:11+00:00"}
Review record:
{"type": "review","source": "app_store","appId": "324684580","country": "us","reviewId": "12345678901","reviewTitle": "Sync finally works","content": "Solid update, playlists sync across devices now.","score": 5,"thumbsUpCount": 7,"voteCount": 9,"appVersion": "9.1.78","at": "2026-09-04T18:23:07+00:00","replyContent": null,"repliedAt": null,"authorHash": "667312a54c6ae870","authorHashCount": 1,"authorHashApps": 1,"authorHashCountries": 1,"scrapedAt": "2026-09-07T12:04:11+00:00"}
Fields that are always null, and why
These columns exist so the App Store dataset stacks cleanly on the Google Play one. An empty column is more honest than a missing one: you can see at a glance that the data does not exist rather than wondering whether it was skipped.
| Field | Why it is empty |
|---|---|
installs, realInstalls | Apple does not publish download counts for any app. |
histogram | Apple does not publish the 1–5 star breakdown in a public endpoint. |
replyContent, repliedAt | Developer replies are not included in Apple's public review feed. Google Play does include them, so the columns stay for cross-store alignment. |
Fields that exist here but not on Google Play: reviewTitle, voteCount, bundleId,
minimumOsVersion, fileSizeBytes, authorHashCountries, country.
Privacy and GDPR
App Store reviewer nicknames are personal data under the GDPR. This scraper does not return them.
Each review carries authorHash — a salted SHA-256 hash of the display nickname,
truncated to 16 characters. The same nickname always produces the same hash, so you can
still group reviews by author, but the nickname cannot be recovered from the hash.
Apple's feed also contains a link to each reviewer's profile — a stable user ID. We do not read it and do not hash it. Hashing a real user ID would let anyone track one individual reliably across every app they have ever reviewed. That is profiling, and it is not what this tool is for. The hash is derived from the nickname instead, which is weaker on purpose. Three fields tell you exactly how much to trust it:
authorHashCount— how many reviews in this run share the hash. A large number means a very common nickname that should not be treated as one person.authorHashApps— how many different apps the hash appeared in.authorHashCountries— how many different storefronts. A repeat across storefronts almost always means different people, since markets do not share an audience.
One Apple ID can leave only one review per app. A repeated hash within a single app and storefront therefore always means different people with the same nickname. A repeat across different apps in the same storefront may be the same reviewer and is worth a closer look.
The salt is configurable through the AUTHOR_HASH_SALT environment variable. Set the
same salt here and in the Google Play actor and the hashes stay comparable across both
stores.
Integrations
Run this App Store scraper from the Apify API, schedule it to monitor app reviews daily, or connect it to Make, Zapier, Google Sheets, Slack, or an MCP client. Results export as JSON, CSV, Excel, XML, or RSS.
FAQ
How many reviews can I scrape from an App Store app?
500 per app per country storefront, which is Apple's own limit on the public feed. Add
countries to countries to multiply that, or schedule daily runs to accumulate history.
Can I get more than 500 reviews for one app in one country? Not from any public source. If it is your own app, App Store Connect gives you all of them with an API key you own.
Why are replyContent and repliedAt always empty?
Apple's public review feed does not carry developer responses. The columns exist so the
output lines up with the Google Play dataset, where they are populated.
Can I scrape only negative reviews?
Set filterByScore to 1 or 2. Note that filtering runs after fetching, so you get the
low-rated share of the 500 reachable reviews.
Does it work with Google Play apps? No — use our Google Play Reviews Scraper for Android. The two produce the same output schema on purpose, so you can run both and merge the results.
Why is the reviewer name missing?
By design — see Privacy and GDPR. Use authorHash to group reviews
by author without storing personal data.
Is scraping the App Store legal? This actor reads Apple's official public RSS review feed, lookup endpoint, and search endpoint. It does not authenticate, does not bypass any technical protection, and does not access private data. You remain responsible for how you use the data under the laws that apply to you. This is not legal advice.
Is this an official Apple tool? No. It is an independent, unofficial Actor with no affiliation to Apple Inc. It reads only endpoints Apple publishes openly, and it holds no special access or partnership.