App Store Reviews Scraper : $0.10 per 1,000 avatar

App Store Reviews Scraper : $0.10 per 1,000

Pricing

$0.10 / 1,000 review returneds

Go to Apify Store
App Store Reviews Scraper : $0.10 per 1,000

App Store Reviews Scraper : $0.10 per 1,000

Pricing

$0.10 / 1,000 review returneds

Rating

0.0

(0)

Developer

Workware

Workware

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

App Store Reviews Scraper: iOS Reviews to JSON, $0.10 per 1,000

Give it an iOS app id, bundle id, or App Store URL and get every available review as clean JSON: rating, title, content, author, the app version reviewed, helpful votes, and date, with optional app metadata. One predictable price: $0.10 per 1,000 reviews ($0.0001 each), no start fee.

Read this first, it decides what you get: Apple caps its public reviews feed at 50 reviews per page over 10 pages = 500 reviews per app, per storefront. That is Apple's ceiling, not ours, and no scraper can exceed it. To get more than 500 reviews for a popular app, scrape it in more storefronts: pass several countries (e.g. ["us","gb","de","jp"]) and each returns up to 500 of that country's reviews. When a walk stops at the ceiling (or at your maxReviewsPerApp), the app-status row says truncated: true so you always know whether you have all of them.


What is the App Store Reviews Scraper and what can it do?

It turns an iOS App Store listing into a structured review corpus. Give it 618783545, or com.tinyspeck.chatlyio, or https://apps.apple.com/us/app/slack/id618783545, or a list of up to 1,000 apps, and it walks Apple's official customer-reviews feed for each app in each storefront you name and returns one JSON record per review, plus one status record per app x storefront telling you whether the app was found, whether it is even sold in that storefront, how many reviews this run returned, and whether it hit the 500 ceiling.

Typical uses:

  • Release-sentiment tracking: every record carries the appVersion it was written against, so you can diff how sentiment moved from one release to the next, which raw star counts cannot show.
  • ASO and competitive monitoring: pull a competitor's review history across storefronts and watch it on a schedule.
  • RAG and AI pipelines: feed a whole category's review corpus into a retrieval index. The output is already normalized and stable.
  • Support and product feedback mining: filter a warehouse to 1- and 2-star reviews and read what users actually complain about, at scale.

It is an API first and a scraper second: every option has a real default, so an API, CLI, or scheduled run behaves exactly like a run started from the console form.

What data does it extract? (output fields)

One review record per review:

fieldtypenotes
reviewIdstringstable id (appstore_<appId>_<country>_<id>): safe as a primary key. Review ids are per storefront
appId, bundleIdstringApple's numeric track id and the reverse-DNS bundle id
countrystringthe ISO-2 storefront this review came from
ratingnumberApple's 1-5 integer star rating
title, contentstringthe review headline and free-text body
authorNamestringthe reviewer's self-chosen display name (public on the store page)
authorUristring | nullthe reviewer's public profile URI, when Apple provides one
appVersionstring | nullthe app version the review was written against, when present
voteSum, voteCountnumbernet helpful votes (can be negative) and total votes cast
updatedAtISO datewhen the review was last updated
source, scrapedAtstringalways "app-store", and the run timestamp
appMetadataobjectapp name, seller, genre, current version, aggregate rating and count, when includeAppMetadata is on

Plus one app-status record per app x storefront (type: "app-status"): the raw app you passed, appId, bundleId, country, reviewsReturned (what this run returned), truncated (whether the 500 ceiling or your cap was hit), and status, one of found, no_reviews, unavailable_in_country, not_found, or error.

How to use the App Store Reviews Scraper (tutorial)

  1. Give it an app. The numeric id is the id… part of an App Store URL (apps.apple.com/us/app/slack/**id618783545**). Put it in apps: ["618783545"]. A bundle id or a full URL works too, and a list runs the whole batch.
  2. Choose storefronts. countries defaults to ["us"]. Add more (["us","gb","de"]) to reach past the 500-per-storefront ceiling and to cover non-US markets.
  3. Set a cap. maxReviewsPerApp defaults to 0 (all available, up to 500). Start small: this is the field that decides what the run costs.
  4. Run it. Reviews stream into the dataset as they are parsed. Export as JSON, CSV, or Excel, or pull them straight from the API.

How much does it cost to scrape App Store reviews? $0.10 / 1,000, no start fee

EventWhat it isCharged forPrice
review-resultReview returnedeach record delivered$0.10 / 1,000

No start fee, no per-app fee, no platform-usage surcharge. 1,000 reviews cost $0.10. That single claim is the whole product, so nothing else charges: an app with zero reviews, a storefront that does not carry the app (unavailable_in_country), an app that does not exist (not_found), or a failed fetch (error) pushes a coverage row and charges nothing at all. You pay for reviews, and only for reviews.

Input and output examples

Input:

{
"apps": ["618783545"],
"countries": ["us", "gb"],
"maxReviewsPerApp": 100,
"sortBy": "mostRecent"
}

Output (one review, abridged):

{
"reviewId": "appstore_618783545_us_11897342001",
"appId": "618783545",
"bundleId": "com.tinyspeck.chatlyio",
"country": "us",
"rating": 5,
"title": "Keeps our team in sync",
"content": "We moved off email for internal chat and never looked back…",
"authorName": "desk_jockey_92",
"authorUri": "https://itunes.apple.com/us/reviews/id123456789",
"appVersion": "25.08.10",
"voteSum": 4,
"voteCount": 5,
"updatedAt": "2026-08-01T12:00:00-07:00",
"source": "app-store",
"scrapedAt": "2026-08-15T09:14:02.512Z"
}
FieldTypeRequiredDefaultDescription
appsarrayYes-The iOS apps to scrape: one run handles the whole batch, one app at a time. Each entry is a numeric App Store track id (618783545), a bundle id (com.tinyspeck.chatlyio), or an App Store URL (https://apps.apple.com/us/app/slack/id618783545).
countriesarrayNo["us"]ISO-2 App Store storefront codes to scrape each app in (e.g. us, gb, de, jp). Apple caps reviews at 500 per app PER STOREFRONT, so add more countries to reach more reviews. An unknown code fails only that app x country, not the run.
maxReviewsPerAppintegerNo0Caps the reviews returned per app PER STOREFRONT, taken in sortBy order. 0 means all available. Apple returns at most 500 per storefront regardless (10 pages x 50). The primary cost and scope control.
sortBymostRecent | mostHelpfulNomostRecentThe order Apple serves reviews in, and therefore which reviews a maxReviewsPerApp cap keeps: mostRecent (newest first) or mostHelpful.
includeAppMetadatabooleanNotrueAttach a metadata block to each review: app name, seller, genre, current version, and the aggregate rating and rating count (one extra lookup call per app). Turn off for review text only.

Other Actors you might need

FAQ, legality, and support

How do I get more than 500 reviews for an app?

You scrape it in more storefronts. Apple's feed is capped at 500 reviews per app per storefront (10 pages of 50), so a single-country run tops out there and reports truncated: true. Pass several countries and each returns up to 500 of that storefront's own reviews; review ids are per storefront, so there is no cross-country double-counting. There is no way to exceed Apple's per-storefront ceiling, and any Actor that claims otherwise is not reading the same feed.

What is the difference between no_reviews, unavailable_in_country, and not_found?

They are three different empty answers, and telling them apart is why the Actor calls Apple's lookup endpoint first. not_found means no such app exists. unavailable_in_country means the app is real but Apple does not sell it in the storefront you asked for. no_reviews means the app is available there and simply has no reviews yet. All three push a status row and charge nothing, so you are never billed for an empty storefront.

Can I track sentiment across app releases?

Yes, and it is the reason appVersion is a first-class field on every record. Group reviews by appVersion and you can see how ratings and complaints moved from one release to the next, which a raw average star count hides. The Actor gives you the normalized data; the release-diff analysis is yours to run.

This Actor reads an official, unauthenticated Apple JSON feed intended for syndication, and the reviews are user-generated public content. The only personal data is a self-chosen nickname and an optional public profile URI, both already visible on the store page. That is a lower-exposure footprint than most review sources, but you are the data controller for anything you do downstream: respect Apple's terms, honour deletion requests, and make sure your GDPR/CCPA basis covers your own use.

What happens when the feed changes shape?

A structural change is detected and reported as an error for the affected app x storefront rather than quietly returning partial data, and a scheduled health check runs this Actor against a known app to catch it before you do. A rate-limit (HTTP 429) is treated as transient and retried; only a genuine shape change stops the affected unit and raises an alert.