App Store Reviews Scraper — iOS reviews, $0.08/1K, no login
Pricing
from $0.08 / 1,000 item scrapeds
App Store Reviews Scraper — iOS reviews, $0.08/1K, no login
Scrape Apple App Store reviews and ratings for any iOS app, in any country, using Apple's public review feed (JSON with XML fallback) — no App Store Connect key needed. Returns review text, star rating, author, app version and app details as structured JSON. $0.08 per 1,000 rows.
Pricing
from $0.08 / 1,000 item scrapeds
Rating
0.0
(0)
Developer
drop-in apis
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
3
Monthly active users
5 hours ago
Last modified
Categories
Share
App Store Reviews Scraper — any iOS app, no login
App Store reviews scraper (Apple iOS) that reads Apple's public customer-reviews feed for any iOS app and country: review text, rating, version and date, plus app details. No App Store Connect key. Up to 500 reviews per app per country. $0.08 per 1,000 rows.
Last updated: 2026-10-02 · Guide: https://alidaram99.github.io/api-alternatives/app-store-reviews-scraper/
Built on Apple's own public endpoints (the review feed in JSON, with an automatic XML fallback, and the iTunes lookup API). No login and no CAPTCHA bypass.
Need app IDs first? Use App Store Search & Top Charts, then pass its appId rows here.
Use cases
- ASO (App Store Optimization): track rating trends, keyword mentions and sentiment in reviews across storefronts and competitor apps.
- Product feedback: pull every recent review for your own app into your own database or spreadsheet for triage.
- Competitor monitoring: watch a competitor's rating, version-release cadence and review volume over time.
Input
| Field | Type | Description |
|---|---|---|
apps | array (required) | Any of: a numeric app id (570060128), id570060128, an App Store URL (https://apps.apple.com/us/app/duolingo-language-lessons/id570060128), an itunes.apple.com URL, an itms-apps:// link, a bundle id (com.spotify.client) or an app name (WhatsApp). Spaces are trimmed. If countries is left at the default, a URL's storefront (/us/, /gb/, …) is used for that app. The run's status message says which app each bundle id or name was matched to; entries that match nothing are named there and cost nothing. |
countries | array | 2-letter storefront codes, e.g. ["us", "gb", "de"] (case does not matter). Default ["us"]. Each app is fetched once per country — ratings, prices and review volume genuinely differ by storefront. |
maxReviewsPerApp | integer | Stop after this many reviews per app per country. Default 100, max 500 (Apple's feed itself caps at 500 — see Limits). |
sinceDate | string (optional) | ISO date. Reviews are newest-first, so the scraper stops paging for an app/country as soon as it reaches an older review. |
includeAppDetails | boolean | Also output one app-details row per app × country. Default true. |
Example input:
{"apps": ["570060128", "https://apps.apple.com/gb/app/duolingo-language-lessons/id570060128"],"countries": ["us", "gb"],"maxReviewsPerApp": 200,"includeAppDetails": true}
Output
One dataset row per review, plus (if includeAppDetails) one row per app × country. Both
shapes share one dataset with a type field ("review" or "app") — use the Reviews or
App details dataset view to see just the relevant columns. Nothing else is written
to the dataset, so you only pay for review and app rows.
Every run also writes a free RUN-SUMMARY record to its key-value store, and the same text to the
run's status message: one line per app × country with ok, empty or broken and the reason
(for example 570060128/us: 5 review(s) or 999999999/us: app id not found in this storefront).
Review row:
{"type": "review","appId": "570060128","appName": "Duolingo: Language Lessons","country": "us","reviewId": "14612250135","title": "Fun","text": "Very fun and get one month free for unlimited power","rating": 5,"version": "7.142.0","date": "2026-09-30T13:01:34-07:00","userName": "Hi it is a fun game","voteCount": 0,"voteSum": 0,"developerResponse": null,"source": "rss-json"}
App-details row:
{"type": "app","appId": "570060128","country": "us","name": "Duolingo: Language Lessons","developer": "Duolingo, Inc","price": 0,"currency": "USD","averageRating": 4.72,"ratingCount": 5480861,"version": "7.142.0","releaseDate": "2012-11-13T08:00:00Z","currentVersionReleaseDate": "2026-09-28T17:42:01Z","genres": ["Education", "Social Networking"],"contentRating": "4+","size": "515190784","minimumOsVersion": "17.0","description": "Learn a new language, chess & more...","url": "https://apps.apple.com/us/app/duolingo-language-lessons/id570060128?uo=4"}
How it compares
| Option | Any app, any country? | Price | Notes |
|---|---|---|---|
| This Actor | Yes | $0.08 per 1,000 rows | Public feed (JSON with XML fallback), retries when Apple's feed is flaky, app details included |
| App Store Connect API | No: only apps your team owns | Free | Needs an API key; includes developer responses |
| Other App Store review Actors on Apify | Usually yes | Listed from about $0.10 per 1,000 (checked 2026-10-07) | Compare fields, success rate and how they handle empty feeds |
Pricing
$0.00008 per item ($0.08 per 1,000 rows), pay-per-event — you're billed per review or app-details row actually pushed, nothing else.
FAQ
How do I export App Store reviews without App Store Connect?
Run this Actor with the app id (or App Store URL) and country codes. App Store Connect's API only covers apps your team owns; this Actor reads Apple's public feed for any app.
Does this scrape Apple App Store reviews, or Google Play?
Apple App Store only — iOS, iPadOS and macOS apps distributed through apps.apple.com. It does not touch Google Play; that's a different feed entirely.
How many iOS reviews can I get per app?
Up to 500 per app per country: Apple's public feed stops after 10 pages of 50. Add more countries for more coverage; reviews differ by storefront.
What if an app has no reviews?
The run still succeeds, writes no review rows (so you pay nothing for reviews), and says why in its status message and RUN-SUMMARY record, per app and storefront:
- no written reviews in this storefront's public feed — the app exists there, but Apple's feed has no written reviews (an app can have star ratings without written reviews);
- no reviews on or after
<sinceDate>— there are reviews, just none since your date; - app id not found in this storefront — the app is not sold in that country, or the id is wrong.
If you asked for several apps or countries, the ones with reviews are returned normally.
Why would a run fail?
Only when Apple's feed itself cannot be read and nothing usable came back: HTTP or network errors after every retry, or page 1 staying empty in both the JSON and XML feed formats for an app that has ratings there. The status message names the app and storefront. Try again later. Apple's app lookup or search being unreachable after every retry, when nothing else in the input worked, also fails the run. An input that simply matches no app does not fail: it succeeds with no rows, no charge and a message explaining the accepted formats.
Which app formats are accepted?
570060128, id570060128, https://apps.apple.com/us/app/name/id570060128, https://itunes.apple.com/us/app/name/id570060128, itms-apps://itunes.apple.com/app/id570060128, a bundle id such as com.spotify.client, or an app name such as WhatsApp. Google Play links are not supported.
How are app names and bundle ids matched?
- Bundle id: looked up exactly with Apple's official iTunes Lookup API in the first storefront you chose (
usby default). - App name: searched with Apple's official iTunes Search API in that storefront. The first of the top 5 results whose name, developer or bundle id contains a word you typed is used. Apple's search returns something for almost any text, so a result that shares no word with your input is rejected rather than scraped.
- The matched app is shown in the run's status message and in the
RUN-SUMMARYrecord (resolved: input, app id, name, developer, bundle id), for examplename "WhatsApp" -> WhatsApp Messenger (id 310633997, WhatsApp Inc.; top App Store search result in gb). If it is not the app you meant, use its numeric id or App Store URL instead. - If nothing matches, the run still succeeds with no rows and no charge, and the status message lists the accepted formats.
What does it cost?
$0.00008 per dataset row ($0.08 per 1,000). Review rows and app-details rows both count as rows.
Does it include the developer's reply to a review?
No. Developer responses are not part of Apple's public feed, so developerResponse is always null.
Can I track a competitor's ratings and reviews?
Yes. Pass their app id. You get their public reviews and the public rating summary in the app-details row.
Why does source say rss-json for some reviews and rss-xml for others?
It records which of Apple's two equivalent feed formats answered. Both carry the same review fields; the Actor uses the second as a fallback when the first comes back empty.
Does it use Apple's authenticated web API?
No. That endpoint needs a per-session bearer token (it returns HTTP 401 without one), so this Actor only uses Apple's public, unauthenticated endpoints.
Limits
- Up to 500 reviews per app per country (Apple's own cap, not an Actor limit).
- No developer-response text (not present in the source feed).
- Review text language follows the storefront's dominant language, not a
languageinput. - Apple's feed has been observed to stay empty, for a single app/country, well past this Actor's own retries (see the FAQ above) — rare, but possible. Querying more than one app/country at once (the default prefill does this) makes a run far more likely to come back with real reviews even if one specific app/country is having a bad moment.
Verified on Apify
On 2026-10-02 the Actor ran on Apify's own infrastructure: the nightly health check (Duolingo and Spotify, US and GB, up to 5 reviews each) returned reviews and passed. Remaining caveats are listed in VERIFY.md. In particular, Apify stops a run when your maximum charge is reached; the Actor does not stop itself earlier.