apihq/app-store-reviews-scraper · App Store

App Store Reviews Scraper

Export Apple App Store reviews and developer replies to JSON from an app ID or apps.apple.com URL. One record per review with rating, title, text, author, developer reply, and date.

$0.00008/review · failed items $0.0000 — on your existing Apify account, a one-item first run costs under a cent.

What does App Store Reviews Scraper do?

Scrape Apple App Store reviews to JSON by app ID or URL. No Apple account. One record per review with rating, title, text, author, developer reply, and date. Sort by recent, helpful, favorable, or critical. Empty apps cost $0. $0.08 per 1,000 reviews.

Best for

Data and AI workflows that turn app reviews into text: sentiment and brand-safety analysis, competitor and release-quality monitoring, and building review datasets for LLM pipelines. The failure-free billing matters most when the extraction runs unattended and one bad app must not take down the batch.

Use something else when

The review source it reads does not carry the review's app version or helpful-vote count, so those fields are not in the output. (Apple's public RSS feed exposes those two fields but is limited to about 500 reviews per country and sort.)

Price
$0.08 per 1,000 reviews · failed items $0

Example run

input
{ "appIds": ["324684580", "9999999999"], "sort": "critical", "maxReviews": 3 }

outcome

  • 3 success: true review rows from Spotify, most critical first — billed
  • 1 success: false row, code: NO_REVIEWS, for the nonexistent app — not billed
  • Run status: SUCCEEDED
  • Charged: 3 reviews = $0.00024

Good input returns billed rows. Bad input returns free error rows in the same dataset, and the run still succeeds.


Why pipelines pick it

Developer replies included

Each review carries the developer's public response (reply_text) and when it was last updated — the field most review scrapers drop.

Sort every app four ways

Order each app's reviews by recent, helpful, favorable, or critical, so you pull the exact slice your analysis needs.

You pay only for reviews

Billing fires on an explicit per-review event, not on dataset writes. There is no per-run start fee, so an app that returns nothing costs $0.

Partial results stay usable

If Apple rate-limits a deep walk, the actor stops instead of adding pressure: delivered reviews stay in the dataset, one free diagnostic row records why, and the run still succeeds.

Best for: Data and AI workflows that turn app reviews into text: sentiment and brand-safety analysis, competitor and release-quality monitoring, and building review datasets for LLM pipelines. The failure-free billing matters most when the extraction runs unattended and one bad app must not take down the batch.


Input & output

input example
{
  "appIds": [
    "324684580",
    "https://apps.apple.com/us/app/instagram/id389801252"
  ],
  "maxReviews": 500,
  "sort": "recent",
  "country": "us"
}
output — success (billed)
{
  "success": true,
  "review_id": "14282988831",
  "app_id": "324684580",
  "user_name": "Neightfrog",
  "rating": 1,
  "title": "App has become unreliable",
  "text": "The app has become unreliable and will stop playing randomly.",
  "posted_at": "2026-07-09T18:01:47Z",
  "is_edited": true,
  "reply_text": "Hello. We appreciate the review. We'd recommend a clean reinstall.",
  "reply_updated_at": "2026-07-08T18:15:11Z",
  "url": "https://apps.apple.com/us/app/id324684580?see-all=reviews"
}
output — failure (free, same dataset)
{
  "success": false,
  "app_id": "9999999999",
  "code": "NO_REVIEWS",
  "error": "Apple App Store returned no reviews for app: 9999999999",
  "request_id": "req_911f37d2e55644ff9d9e4a3f",
  "status_code": 404
}

Branch on the success field to split hits from misses. Quote the request_id in any support issue and we can trace the exact request.

output fields

fieldtypewhat it is
successbooleantrue for a review (billed). false for an unbilled diagnostic row: one bad or empty app, or a global row marking that the walk stopped early.
review_idstringApple's unique review ID.
app_idstringThe numeric App Store app ID the review belongs to. Copied onto every row so each row stands alone.
user_namestringReviewer display name.
ratingintegerStar rating, 1 to 5.
titlestringThe review title. May be empty.
textstringThe review body. May be empty.
posted_atstringISO 8601 UTC timestamp the review was posted.
is_editedbooleanTrue when the reviewer edited the review after first posting.
reply_textstringThe developer's reply body. Absent when there is no reply.
reply_updated_atstringISO 8601 UTC timestamp the developer reply was last modified. Absent when there is no reply.
urlstringApp Store listing URL (Apple exposes no per-review permalink).

Error codes, stable across releases

Every failure record carries one of these machine-readable codes. None of them are ever charged.

codebilledmeaning
NO_REVIEWS$0.0000The app has no reviews in the requested storefront, or the app does not exist.
VALIDATION_FAILED$0.0000The input was not a recognizable numeric app ID or apps.apple.com URL.
APP_STORE_RATE_LIMITED$0.0000Apple rate-limited the walk. Delivered reviews are kept; the remaining walk stops and the run still succeeds.
APP_STORE_OVERLOAD$0.0000The extraction service shed the request under load. Early stop; delivered reviews are kept.
APP_STORE_UPSTREAM_UNAVAILABLE$0.0000Apple was unavailable. Early stop; delivered reviews are kept.
APP_STORE_REVIEWS_TIMEOUT$0.0000Listing the app's reviews timed out. Early stop; delivered reviews are kept.
DEADLINE_EXCEEDED$0.0000The per-request deadline was hit. Returned as an unbilled row with status_code 504.
NO_INPUT$0.0000No usable app ID was provided.

Every error code across the eight APIs, in one reference →


What a run costs

per review$0.00008
per 1,000 reviews$0.08
per failed item$0.0000
per-run start fee$0.0000

The charge fires only when a result is delivered, and platform compute is included in the per-result price. To cap the spend of a run, set a limit in Apify's Run Limits panel. The actor stops at the cap and reports how far it got.

How pay-per-result billing works →


What this actor doesn't do

  • The review source it reads does not carry the review's app version or helpful-vote count, so those fields are not in the output. (Apple's public RSS feed exposes those two fields but is limited to about 500 reviews per country and sort.)
  • Reviews are per country. Apple serves a country-specific storefront (default us); to cover another market, run the app again with a different country.
  • Developer replies appear only when the developer replied. Most reviews have no reply; reply_text is simply absent on those rows.
  • It reads public reviews only — what a signed-out visitor sees on the App Store listing. Apple exposes no per-review permalink, so url is the app's listing page.

Frequently asked questions

Do I need an Apple account or API key?
No. The Actor reads public App Store reviews directly by app ID.
How do I point it at an app?
Use the numeric App Store ID (324684580) or an apps.apple.com URL. Both resolve to the same app; up to 50 unique apps run per job. An unrecognizable value comes back as success:false with code VALIDATION_FAILED, not a rejected run.
How many reviews can I get per app?
Up to your maxReviews, subject to what Apple serves and to upstream conditions. maxReviews is a target, not a guarantee: an app with fewer reviews, or an upstream rate limit, outage, or timeout, can return fewer.
What if the Actor stops before maxReviews?
You keep everything delivered so far. The reviews already delivered stay in the dataset and are billed, one free success:false diagnostic row records why it stopped (for example APP_STORE_RATE_LIMITED), and the run still finishes SUCCEEDED. You are never charged for reviews that were not delivered.
Can I get reviews from other countries?
Yes. Set country (gb, de). Apple serves a country-specific storefront, so one run covers one country; run the app again per market for wider coverage.
How does billing know an app returned nothing?
Billing fires on an explicit per-review charge event, not on dataset writes. The Actor only fires it when a review is delivered, so success:false records sit in your dataset for free.

Pairs with

Run it on the Apify account you already have

Paste one input into the actor's console and check the dataset it returns. A one-item first run costs under a cent — no new subscription, pay only for delivered results.

Get an iOS app's reviews