App Store Reviews Scraper avatar

App Store Reviews Scraper

Pricing

from $0.08 / 1,000 reviews

Go to Apify Store
App Store Reviews Scraper

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

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

6 hours ago

Last modified

Categories

Features

Limited permissions

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. recent returns the newest reviews first (feed order mostrecent); helpful returns 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_reply and developer_reply_at are always null.
  • No review language. The feed does not say which language a review is written in, so lang is always null. 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?

FieldWhat it is
⭐ ratingStars, 1 to 5
📝 title, textReview title and body (emails and phones redacted)
🕒 published_atPublication time, ISO 8601, UTC
📱 app_versionApp version the review refers to
👍 helpful_count, ext_vote_countHelpful votes and total votes
🌍 countryStorefront country, lowercase ISO 3166 alpha-2
🏷️ app_id, app_nameNumeric App Store id and app name
🔑 review_idDurable review id, used to deduplicate
👤 author_nameAuthor display name. null if you enable Hide author names
🔒 author_hashKeyed HMAC-SHA256 pseudonym of the author id. Stable across runs while the salt is unchanged
🔗 source_url, scraped_atRSS feed page the review came from (for traceability), and extraction time (UTC)
🍎 ext_app_urlPublic 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

  1. Open App Store Reviews Scraper on Apify and click Try for free.
  2. In Apps, paste numeric ids such as 284882215, or full URLs such as https://apps.apple.com/es/app/facebook/id284882215.
  3. 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.
  4. Set Max reviews per app and country (up to 500 per country in practice) and choose Sort.
  5. Optionally set Reviews since to keep only reviews from that date on. With recent, the run stops as soon as it meets older reviews.
  6. Click Start, then download the dataset as JSON, CSV, Excel or XML, or read it through the API.

Input parameters

ParameterTypeDescription
appIdsarray, requiredApp Store ids or URLs
countriesarrayStorefront country codes
maxReviewsintegerMax per app x country. If empty, 100
sortrecent or helpfulIf empty, recent
dateFromdate YYYY-MM-DDOnly reviews published on or after this date (UTC)
hideAuthorNamesbooleanIf 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_name is the display name published with the review. If you want to minimise personal data, switch on Hide author names (hideAuthorNames): every row then has author_name = null.
  • Author hash. author_hash is a keyed pseudonym: HMAC-SHA256 of the author id, computed with the secret AUTHOR_HASH_SALT of 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 with ext_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.