Apple App Store Reviews Scraper & iOS App Search avatar

Apple App Store Reviews Scraper & iOS App Search

Pricing

from $0.10 / 1,000 reviews

Go to Apify Store
Apple App Store Reviews Scraper & iOS App Search

Apple App Store Reviews Scraper & iOS App Search

Apple App Store reviews for any iPhone or iPad app and any country store, as clean JSON: star rating, title, review text, app version, helpful votes, author and date. Paste app IDs or App Store URLs. A search mode finds apps by keyword with their IDs and ratings. No start fee.

Pricing

from $0.10 / 1,000 reviews

Rating

0.0

(0)

Developer

Omar Nagy

Omar Nagy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

This App Store reviews scraper returns Apple App Store reviews for any iPhone or iPad app, in any country store, as clean JSON: star rating, review title, review text, app version, helpful votes, author and date. Paste numeric app IDs or App Store URLs. A second mode searches the App Store by keyword, so you can find an app's ID, developer and rating without leaving the run.

It reads Apple's own public review feed and search API. There is no login, no token to rotate and no proxy to pay for.

What this App Store reviews scraper returns

  • Reviews by app ID or App Store URL: star rating (1 to 5), review title, review text, the app version the reviewer was running, helpful votes, total votes, author nickname, date and a link to the reviewer's profile.
  • App search by keyword: matching apps with their numeric App Store ID, bundle ID, developer, average rating, rating count, price, genre, store page and icon.
  • Any country store: country picks the storefront, and every store has its own reviews, so us, gb, de and jp each return their own set.
  • Two sort orders: newest first, or most helpful first.
  • Many apps in one run: the review budget is split evenly between apps, so one busy app cannot use up the whole run.
  • A run summary: every run writes what each app was asked for, what Apple returned and what was charged.

Who it is for

  • Mobile and product teams who want to see what users say after each iOS release and catch a crash or bug wave before the support queue fills up.
  • App store optimization (ASO) and marketing teams comparing their app with competitors, store by store.
  • Analysts and researchers mining real user complaints and feature requests for gaps and pain points.
  • AI agent builders who need a tool that answers "what are people complaining about in this app right now".

How to scrape App Store reviews

  1. If you do not have the app ID, run mode: "search" with the app name. Copy the appId from the result, or just paste the App Store URL in step 2.
  2. Run mode: "reviews" with one or more apps in appIds, pick a country and a sort order, and set maxItems.
  3. Download the dataset as JSON, CSV or Excel, or read it from the API.

Input

Pull the newest reviews for two apps (100 in total, 50 each). This is the default input:

{
"mode": "reviews",
"appIds": ["310633997", "324684580"],
"sortBy": "mostRecent",
"country": "us",
"maxItems": 100
}

Paste App Store URLs and read the most helpful reviews in the UK store:

{
"mode": "reviews",
"appIds": ["https://apps.apple.com/gb/app/revolut-mobile-finance/id932493382"],
"sortBy": "mostHelpful",
"country": "gb",
"maxItems": 200
}

Find apps by keyword:

{
"mode": "search",
"query": "habit tracker",
"country": "us",
"maxResults": 5
}
FieldTypeDefaultWhat it does
modereviews or searchreviewsreviews fetches reviews for appIds. search finds apps for query.
appIdslist of stringsNumeric App Store IDs (310633997), the id form (id310633997) or App Store URLs. Repeats are fetched once. Required in reviews mode.
sortBymostRecent or mostHelpfulmostRecentReview order.
maxItems1 to 5000100Total reviews for the run, split evenly across apps. 100 across 3 apps is 34 / 33 / 33.
maxItemsPerApp1 to 500Optional. Gives every app this many reviews instead of splitting maxItems.
querystringApp name or keyword. Required in search mode.
maxResults1 to 20010Apps returned by a search.
country2-letter codeusApp Store country code. The UK store is gb, and uk is read as gb.

A run with a missing appIds or query, an entry that is not an App Store ID or URL, or a country code Apple does not serve stops at once with a clear message and costs nothing.

Output

Real rows from runs on 8 October 2026. One review:

{
"type": "review",
"appId": "310633997",
"country": "us",
"reviewId": "14632670266",
"author": "Cessj9",
"rating": 3,
"title": "Video Call Quality",
"text": "The call quality at times is very choppy. I found that if at least one party has on ear buds you can clear them clearly. Otherwise it goes in and out.",
"version": "26.39.73",
"votesHelpful": 0,
"votesTotal": 0,
"updatedAt": "2026-10-05T18:34:00-07:00",
"reviewerUrl": "https://itunes.apple.com/us/reviews/id401828323"
}

One app from a search for habit tracker:

{
"type": "app",
"appId": "1438388363",
"bundleId": "com.davetech.habit",
"name": "Habit Tracker",
"developer": "InnerGrow",
"rating": 4.79176,
"ratingCount": 147713,
"price": "Free",
"genre": "Productivity",
"url": "https://apps.apple.com/us/app/habit-tracker/id1438388363?uo=4",
"icon": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/92/89/63/928963d4-229b-dd2b-d28c-4d57009298fe/AppIcon-pink-gr-0-0-1x_U007epad-0-1-0-85-220.png/100x100bb.jpg"
}

appId is a string on both row types, so search results and reviews join cleanly. The default input above returned 100 reviews in about 2 seconds.

Every run also saves a summary in its key-value store as OUTPUT. This is the one from the default input:

{
"mode": "reviews",
"country": "us",
"countryNote": null,
"maxItems": 100,
"maxItemsPerApp": null,
"totalFetched": 100,
"totalDelivered": 100,
"totalCharged": 100,
"chargeLimitReached": false,
"error": null,
"search": null,
"perApp": [
{ "appId": "310633997", "requested": 50, "fetched": 50, "delivered": 50, "charged": 50, "error": null, "warning": null },
{ "appId": "324684580", "requested": 50, "fetched": 50, "delivered": 50, "charged": 50, "error": null, "warning": null }
]
}

An app ID that fails gets an error and is not charged, and the other apps keep their full share. An app that returns no reviews gets a warning that says whether Apple does not know the app in that store or knows it but serves no reviews for it. In search mode the counts are under search.

Pricing

You pay per result. There is no start fee, and a run that returns nothing costs nothing.

EventWhat you getPrice
reviewone App Store review row$0.15 per 1,000 reviews on the Free plan, lower on Bronze, Silver and Gold plans
appone app returned by a search$0.50 per 1,000 apps on the Free plan, lower on Bronze, Silver and Gold plans

Examples on the Free plan: 100 reviews cost $0.015, 1,000 reviews cost $0.15, and a 10-app search costs $0.005.

A maximum cost per run is respected. Set one and the Actor fetches only what that limit still allows, then stops and says so in the status message ("Stopped at your maximum cost: N of M results delivered."). The number of rows in your dataset always equals the number of events charged.

Use it from Claude, Cursor or any MCP client

Add this Actor as a tool through Apify's hosted MCP server:

https://mcp.apify.com?tools=omargnagy/app-store-reviews-scraper

In Claude Code:

claude mcp add --transport http app-store-reviews "https://mcp.apify.com?tools=omargnagy/app-store-reviews-scraper"

In Cursor or another client that takes a JSON config:

{
"mcpServers": {
"app-store-reviews": {
"url": "https://mcp.apify.com?tools=omargnagy/app-store-reviews-scraper"
}
}
}

You connect with your Apify account, and runs are billed like any other run. Then ask in plain words, for example: "Get the 200 newest US App Store reviews for Spotify and group the complaints by theme."

Use it from code

One HTTP call runs the Actor and returns the rows:

POST https://api.apify.com/v2/acts/omargnagy~app-store-reviews-scraper/run-sync-get-dataset-items
Authorization: Bearer <your Apify API token>
Content-Type: application/json
{ "mode": "reviews", "appIds": ["310633997"], "country": "us", "maxItems": 50 }

Python, with the apify-client package:

from apify_client import ApifyClient
client = ApifyClient("<your Apify API token>")
run = client.actor("omargnagy/app-store-reviews-scraper").call(
run_input={"mode": "reviews", "appIds": ["310633997"], "country": "us", "maxItems": 50}
)
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
print(review["rating"], review["title"])

JavaScript, with the apify-client package:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<your Apify API token>' });
const run = await client.actor('omargnagy/app-store-reviews-scraper').call({
mode: 'reviews', appIds: ['310633997'], country: 'us', maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

You can also schedule runs in Apify, get a webhook when a run finishes, or send results to Google Sheets, Slack, Zapier, Make or n8n with Apify's integrations.

Limits

  • Up to 500 reviews per app, per country store, per sort order. Apple's feed serves 10 pages of about 50. Running mostRecent and then mostHelpful gave about 950 to 1,000 different reviews per app in the US store (2 apps measured on 8 October 2026), and other country stores have their own reviews.
  • Apple's feed runs a little behind the App Store. In a run on 8 October 2026 at 18:53 UTC, the newest review was dated 6 October, 23:09 Pacific time.
  • Pages can come back empty. An individual page of Apple's feed is sometimes empty while later pages are full. The Actor reads all 10 pages until your budget is met, but it can return fewer reviews than the app has when Apple serves pages empty during the run. Reviews are de-duplicated by reviewId.
  • No developer replies and no review language. Apple's review feed does not include them.
  • No rating or date filter in the input. Filter the dataset afterwards, or run on a schedule and keep only reviews whose reviewId you have not seen.
  • reviewerUrl is the reviewer's profile. Apple's feed has no link to an individual review.

FAQ

How do I find an app's ID? Run mode: "search" with the app name and copy appId. Or take the number after id in the App Store URL, or paste the whole URL.

Can I paste an App Store URL? Yes. https://apps.apple.com/us/app/whatsapp-messenger/id310633997, id310633997 and 310633997 all work. The country field picks the store, not the country in the URL.

Why did my run return 0 reviews? The app's perApp row and the run's status message tell you why: either Apple does not know that ID in that country store, or it knows the app but serves no reviews for it there. Check the ID and the country code.

Which country code is the UK? gb. Typing uk also works and is read as gb. Any code Apple does not serve stops the run with a clear message and no charge.

Can I get every review an app ever received? No. Apple serves a recent window per country store and sort order. For more, pull several stores, use both sort orders, or run on a schedule and keep what you collect.

Does it need a proxy or an Apple account? No. It reads Apple's public feeds directly.

Can I run it on a schedule? Yes. Use Apify's scheduler, or call the Apify API from your own job.

Is there a Google Play version? Yes: Google Play Reviews Scraper, with the same two modes.

Reviews are public posts by App Store users. Respect Apple's terms and any privacy law that applies to how you store and use them.