App Store Reviews Scraper
Pricing
from $0.08 / 1,000 reviews
App Store Reviews Scraper
Reviews of any Apple App Store app by country: rating, title, text, version, date, helpful votes. Up to 500 per country. Author data hashed, emails and phones redacted.
Pricing
from $0.08 / 1,000 reviews
Rating
0.0
(0)
Developer
Rastriq — Structured data from the world
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
6 hours ago
Last modified
Categories
Features
Share
App Store Reviews Scraper extracts customer reviews from any Apple App Store app, country by country: star rating, title, review text, app version, publication date and helpful votes. Give it app ids or App Store URLs and get clean, deduplicated JSON, CSV or Excel. It is the fastest way to scrape App Store reviews for sentiment analysis, competitor tracking, product feedback and ASO research, with no Apple account and no login.
Author names are included and can be hidden with one switch for GDPR (hideAuthorNames). A keyed author_hash is always output; avatars, profile URLs and raw author ids never are. Emails and phone numbers typed into a review are redacted.
What is App Store Reviews Scraper?
App Store Reviews Scraper reads the public customer reviews feed that Apple publishes for every app and storefront, and turns it into a flat, consistent dataset. Run it once for a snapshot, or schedule it daily with sort = recent and dateFrom to get only new reviews. It is built for product teams, analysts and agencies who need an App Store reviews API without maintaining a scraper.
It shares one output contract with Google Play Reviews Scraper, so you can ingest both stores with a single integration.
Important limits of the App Store feed
Please read this before you plan a large job. These limits come from Apple's feed, not from the Actor:
- Maximum 10 pages x 50 = 500 reviews per country and per sort order. Apple does not serve anything beyond page 10. To collect more, add more countries to
countries: every storefront has its own 500. - Order.
recentreturns the newest reviews first (feed ordermostrecent);helpfulreturns the most helpful first (mosthelpful). Each order is its own window of up to 500 reviews. - No developer replies. The App Store feed does not expose responses from the developer, so
developer_replyanddeveloper_reply_atare alwaysnull. - No review language. The feed does not say which language a review is written in, so
langis alwaysnull. The country is the storefront you asked for.
When the Actor reaches the limit, the run summary says page_limit, so you always know why it stopped.
What data does App Store Reviews Scraper extract?
| Field | What it is |
|---|---|
⭐ rating | Stars, 1 to 5 |
📝 title, text | Review title and body (emails and phones redacted) |
🕒 published_at | Publication time, ISO 8601, UTC |
📱 app_version | App version the review refers to |
👍 helpful_count, ext_vote_count | Helpful votes and total votes |
🌍 country | Storefront country, lowercase ISO 3166 alpha-2 |
🏷️ app_id, app_name | Numeric App Store id and app name |
🔑 review_id | Durable review id, used to deduplicate |
👤 author_name | Author display name. null if you enable Hide author names |
🔒 author_hash | Keyed HMAC-SHA256 pseudonym of the author id. Stable across runs while the salt is unchanged |
🔗 source_url, scraped_at | RSS feed page the review came from (for traceability), and extraction time (UTC) |
🍎 ext_app_url | Public App Store page of the app, https://apps.apple.com/{country}/app/id{app_id}, openable in a browser |
🚩 _quality_* | Flags for missing text, rating or date. Flagged, never filtered |
Fields the source does not provide are null, never invented.
How to scrape App Store reviews with App Store Reviews Scraper
- Open App Store Reviews Scraper on Apify and click Try for free.
- In Apps, paste numeric ids such as
284882215, or full URLs such ashttps://apps.apple.com/es/app/facebook/id284882215. - In Countries, pick one or more App Store countries (Spain, United States, Germany...). If you leave it empty the Actor uses the country in the URL, or the United States.
- Set Max reviews per app and country (up to 500 per country in practice) and choose Sort.
- Optionally set Reviews since to keep only reviews from that date on. With
recent, the run stops as soon as it meets older reviews. - Click Start, then download the dataset as JSON, CSV, Excel or XML, or read it through the API.
Input parameters
| Parameter | Type | Description |
|---|---|---|
appIds | array, required | App Store ids or URLs |
countries | array | Storefront country codes |
maxReviews | integer | Max per app x country. If empty, 100 |
sort | recent or helpful | If empty, recent |
dateFrom | date YYYY-MM-DD | Only reviews published on or after this date (UTC) |
hideAuthorNames | boolean | If on, author_name is null in every row (GDPR). Default off |
Example input
{"appIds": ["284882215"],"countries": ["es", "us"],"maxReviews": 200,"sort": "recent","dateFrom": "2026-10-01"}
Output example
{"review_id": "14764815021","store": "app_store","app_id": "284882215","app_name": "Facebook","country": "es","lang": null,"rating": 5,"title": "Great app","text": "Works well after the last update.","author_hash": "3f1c0c5a0a6d6b7e9d2b8f4c1a7e5d3b9c0f2a6e8d4b1c7a5e3f9d0b2c4a6e81","author_name": "Jane Example","app_version": "586.0.0","published_at": "2026-11-08T07:13:50Z","developer_reply": null,"developer_reply_at": null,"helpful_count": 0,"source_url": "https://itunes.apple.com/es/rss/customerreviews/page=1/id=284882215/sortby=mostrecent/json","scraped_at": "2026-11-09T10:00:00Z","ext_vote_count": 0,"ext_app_url": "https://apps.apple.com/es/app/id284882215","ext_pii_redactions": 0,"ext_sort": "recent","ext_author_hash_weak": false,"_quality_missing_text": false,"_quality_missing_rating": false,"_quality_missing_published_at": false,"_quality_missing_app_name": false,"_quality_bad_number": false,"_quality_pii_redacted": false}
Every run also writes a SUMMARY record with, for each app and country: reviews scanned, emitted and dropped (duplicates, before dateFrom, invalid), pages read and the reason it stopped.
How much does it cost to use App Store Reviews Scraper?
App Store Reviews Scraper uses pay-per-event pricing: you pay per review delivered. A typical job of 500 reviews for one app and country costs a fraction of a cent in compute, plus the per-review price shown on the Actor page. Start with 10 reviews to see the exact bill before you scale, and set a maximum charge per run in the Apify Console to cap spending.
Privacy & GDPR
- Author name.
author_nameis the display name published with the review. If you want to minimise personal data, switch on Hide author names (hideAuthorNames): every row then hasauthor_name = null. - Author hash.
author_hashis a keyed pseudonym: HMAC-SHA256 of the author id, computed with the secretAUTHOR_HASH_SALTof the Actor. It is stable across runs (as long as the salt does not change), so you can count repeat reviewers, but it is pseudonymisation, not anonymisation: whoever holds the salt can recompute it, and if no salt is set the Actor flags every row withext_author_hash_weak = true. - Never output. Avatars, profile URLs and raw author ids are never output, in either mode. Emails and phone numbers written inside the review text are redacted (
[email],[phone]). - Your responsibility. Review text is free text and may contain personal information. You remain responsible for your lawful basis, retention and use of the data under GDPR and the store's terms.
App Store Reviews Scraper only collects review data that Apple publishes in its public feed.
FAQ
Can App Store Reviews Scraper get more than 500 reviews for an app?
Not for one country: Apple stops at page 10. Add more countries, or schedule recurring runs with sort = recent and dateFrom and keep the history on your side; review_id makes deduplication trivial.
Does App Store Reviews Scraper return developer replies or the review language?
No. The App Store feed does not include them, so those fields are null. For developer replies use Google Play Reviews Scraper.
What happens if Apple blocks a request?
The Actor retries with backoff and then switches to an Apify datacenter proxy. If one app or country keeps failing, the others still run. The run always ends cleanly with a SUMMARY record: completed, no_results, partial (some groups failed) or failed (all of them), with a stopped_reason per app and country.
How do I get only new reviews each day?
Schedule the Actor with sort = recent and dateFrom set to yesterday.
Related Actors
- Google Play Reviews Scraper: same output contract for Android apps, with developer replies.