# App Store Reviews Scraper API (`crawl_craft/app-store-reviews-scraper-api`) Actor

Most App Store review tools stop at 500 reviews. Get every public review for any iPhone app, in any country: rating, title, text, author, app version, votes and developer replies, with star and date filters.

- **URL**: https://apify.com/crawl_craft/app-store-reviews-scraper-api.md
- **Developed by:** [Crawl Craft](https://apify.com/crawl_craft) (community)
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🚀 What is App Store Reviews Scraper API?

App Store Reviews Scraper API is an Apify Actor that collects public customer reviews for any iPhone application in the countries you choose. Every review comes back as one row with its star rating, title, text, author, date, version, helpful votes and developer reply, so you can study user feedback without an Apple account or API key.

- 🌍 **Many countries in one run:** list storefront codes such as `us` and `gb`, or choose `all`.
- 🔎 **Filters that save time:** keep chosen star ratings with `ratings`, a start date with `dateFrom`, and pick the order with `sort`.
- 💬 **Developer replies in their own table:** reviews that received a reply are copied to a separate Developer replies table.
- 📊 **App summaries:** one row per application and country with the average rating and the 1 to 5 star counts.
- 📤 **Easy export:** download the dataset as JSON, CSV or Excel.

This App Store review scraper reads public reviews only. Click **Try for free**, paste an application link and press **Start**.

### 📊 What data can you extract from App Store reviews?

The Apple App Store reviews scraper saves each review as one row. You can download the rows as JSON, CSV or Excel, which also makes it a simple App Store reviews downloader. Field names below match the dataset schema.

| Field | Description | Example |
|---|---|---|
| `id` | Unique review identifier | 14689718900 |
| `appId` | Numeric App Store ID of the application | 389801252 |
| `country` | Storefront country code of the review | us |
| `date` | Review date (ISO 8601) | 2026-10-20T15:16:23Z |
| `score` | Star rating, 1 to 5 | 5 |
| `title` | Review headline | `Great app` |
| `text` | Review text | Works well. |
| `userName` | Reviewer display name | Jane |
| `userId` | Reviewer profile ID | 1980501315 |
| `userUrl` | Link to the reviewer profile | https://itunes.apple.com/us/reviews?userProfileId=1980501315 |
| `version` | Version of the application the reviewer used | 452.0.0 |
| `isEdited` | Whether the review was edited | false |
| `voteCount` | Number of people who rated the review | 3 |
| `voteSum` | Number of people who found the review helpful | 2 |
| `developerResponse` | Reply written by the developer | Thanks for the feedback! |
| `developerResponseDate` | Date of the developer reply | 2026-10-21T08:00:00Z |
| `appName` | Name of the application | Instagram |
| `appDeveloper` | Developer of the application | Instagram, Inc. |
| `appBundleId` | Bundle identifier | com.burbn.instagram |
| `appCurrentVersion` | Latest version in the store | 452.0.0 |
| `appGenre` | Primary genre | Photo & Video |
| `appPrice` | Formatted price | Free |
| `appUrl` | App Store link | https://apps.apple.com/us/app/instagram/id389801252 |
| `appRatingAverage` | Average star rating in this country | 4.5 |
| `appRatingCount` | Number of ratings in this country | 35454674 |
| `appReviewCount` | Approximate number of written reviews in this country | 1853756 |
| `appRatingHistogram` | Ratings per star, keys 1 to 5 | {"1": 1, "2": 2, "3": 3, "4": 4, "5": 5} |
| `error` | Why an application, storefront or input could not be scraped (error rows only) | see Limitations |

The App summaries table adds `stars1` to `stars5`, the number of ratings per star for each application and country. It works like an App Store ratings scraper for rating counts.

### 💡 Use cases for App Store reviews

- **App Store review analysis:** sort by `sort` and read `score`, `title` and `text` side by side with `version` to see what changed after a release.
- **Sentiment work:** feed `title`, `text` and `score` into an App Store review sentiment analysis model or spreadsheet.
- **Competitor research:** run competitor analysis from App Store reviews by adding rival links to `urls` and comparing `appRatingAverage` and complaints.
- **Recurring checks:** monitor App Store reviews every week by scheduling a run with `dateFrom` set to `7d`.
- **Regional comparison:** compare App Store ratings by country with the App summaries table (`stars1` to `stars5` per `country`).
- **Support triage:** collect negative App Store reviews with `ratings` set to 1 and 2 stars and hand them to support.
- **Customer insight:** build a voice of customer from App Store reviews by grouping `text` by `country` and `version`.
- **Planning:** use App Store reviews for market research before entering a new storefront.
- **Quality work:** find bugs from App Store reviews by filtering low stars and checking which `version` they mention.
- **Developer relations:** track developer replies to App Store reviews with `developerResponse` and `developerResponseDate`.
- **Roadmaps:** gather App Store reviews for product feedback and rank requests by `voteSum`.
- **Data projects:** build an App Store reviews dataset for BI tools or models, with App Store reviews analytics on top.

### 🛠️ How to scrape App Store reviews

1. Create a free Apify account and open App Store Reviews Scraper API.
2. Paste one or more application links into **urls**, and add numeric IDs to **appIds** if you have them.
3. Choose **countries**, set **maxItems**, and pick **sort**.
4. Optionally keep only some **ratings**, or set **dateFrom** (for example `2026-01-01` or `30d`).
5. Click **Start** and watch reviews appear in the Output tab.
6. Download the dataset as JSON, CSV or Excel.

#### How to download App Store reviews

Run the steps above and open the Output tab. The default table lists every review, and the other tables hold developer replies, App summaries and errors.

#### How to export App Store reviews to CSV

Open the finished run, choose the CSV format in the export options and download the file. You can also do an App Store reviews export to Excel or JSON the same way, which covers the common wish to get App Store reviews to Excel.

#### How to scrape App Store reviews for all countries

Select **All storefronts** in **countries**. Every storefront is collected separately and labelled in the `country` column.

#### App Store reviews by country

Leave **countries** empty to use the country in each link (United States when a link has none), or pick several codes to compare storefronts.

### 💰 How much does it cost to scrape App Store reviews?

App Store Reviews Scraper API uses pay per event. You pay for each saved review (the `main_result` event), and the price per 1,000 results depends on your Apify pricing tier.

| Pricing tier | Price per 1,000 results |
|---|---|
| Free | $1.5 |
| Bronze | $1.35 |
| Silver | $1.2 |
| Gold / Platinum / Diamond | $1 |

A small Actor Start event of $0.00005 is charged once per run start. Error rows, developer reply copies and App summaries are not charged. See the Pricing tab for current rates.

### ⬇️ Input

Only **urls** is required, which makes it an iPhone App Store reviews scraper that starts from application links. It accepts one or many App Store application links, and the storefront in a link is used when you select no countries. See the Input tab for every option.

![App Store Reviews Scraper API input form with application links, countries and filters](IMAGE_URL_PLACEHOLDER "app-store-reviews-scraper-api-input.png")

Example input:

```json
{
  "urls": ["https://apps.apple.com/us/app/instagram/id389801252"],
  "countries": ["us"],
  "maxItems": 10,
  "sort": "recent"
}
```

- 💡 `maxItems` applies to each application in each country, not to the whole run. Two applications in three countries with `maxItems` set to 100 can return up to 600 reviews, and `0` collects everything the App Store serves.
- 💡 `dateFrom` accepts `YYYY-MM-DD` or a window such as `30d`, `2w`, `6m` or `1y`.
- 💡 `includeVersions` adds the application version for the reviews that carry one.

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab. The table view is for convenience and doesn't show **all the fields**.

![App Store Reviews Scraper API output table with ratings, review text and developer replies](IMAGE_URL_PLACEHOLDER "app-store-reviews-scraper-api-output.png")

Export formats: JSON, CSV, Excel, XML and HTML. Below is an example output item built from the example values in the dataset schema, not a captured run.

```json
{
  "id": "14689718900",
  "appId": "389801252",
  "country": "us",
  "date": "2026-10-20T15:16:23Z",
  "score": 5,
  "title": "Great app",
  "text": "Works well.",
  "userName": "Jane",
  "userId": "1980501315",
  "userUrl": "https://itunes.apple.com/us/reviews?userProfileId=1980501315",
  "version": "452.0.0",
  "isEdited": false,
  "voteCount": 3,
  "voteSum": 2,
  "developerResponse": "Thanks for the feedback!",
  "developerResponseDate": "2026-10-21T08:00:00Z",
  "appName": "Instagram",
  "appDeveloper": "Instagram, Inc.",
  "appBundleId": "com.burbn.instagram",
  "appCurrentVersion": "452.0.0",
  "appGenre": "Photo & Video",
  "appPrice": "Free",
  "appUrl": "https://apps.apple.com/us/app/instagram/id389801252",
  "appRatingAverage": 4.5,
  "appRatingCount": 35454674,
  "appReviewCount": 1853756,
  "appRatingHistogram": { "1": 1, "2": 2, "3": 3, "4": 4, "5": 5 }
}
```

Tables in the Output tab:

| Table | Content |
|---|---|
| All reviews | Every review (default dataset) |
| Reviews with App details | Reviews next to rating totals and store details |
| Developer replies | Only reviews that received a developer reply |
| App summaries | One row per application and country with rating totals and 1 to 5 star counts |
| Errors | Applications, countries or inputs that could not be scraped |

A short **Run summary** with the counts for the run is also saved.

### ⚠️ Limitations and error handling

- This is not an App Store reviews crawler that roams the whole store; it reads only the applications you list.
- Only public App Store customer reviews are collected. Private data is not available to this App Store reviews extractor.
- Treat the output of this App Store review extractor as a snapshot of what Apple returns on the day of the run.
- The `version` field is filled only for a limited set of reviews (the newest and most helpful 500 per application and country). Older reviews have it empty.
- Reviews follow the App Store country, not the language of the review.
- The `appReviewCount` field is approximate, so the number of reviews you collect can differ from it. Run a small test to see how many you get for an application.
- This Actor has no only-new-reviews mode. For recurring runs, set `dateFrom` to a recent window.

An application, storefront or input that cannot be scraped becomes an error row with `id` set to `null`:

```json
{
  "id": null,
  "appId": "1",
  "country": "us",
  "error": "app 1 was not found in the US App Store."
}
```

| Error message | What to do |
|---|---|
| `not an App Store id or URL` | Check the link or ID and try again. |
| `app ... was not found in the ... App Store` | The application is not sold in that country. Pick another storefront. |
| `... is not a valid App Store country` | Use a 2-letter storefront code such as `us`, or `all`. |
| `the app page could not be read` | Try again later. |
| `app page request failed` | Try again later. |

### 🔌 Integrating App Store Reviews Scraper API with other apps

You can run App Store Reviews Scraper API on a schedule, call it through the Apify API, and send finished runs to other tools with webhooks. See the API tab for ready-made JavaScript, Python and CLI snippets, which makes this an App Store reviews API for your own pipelines. It can also stand in as an Apple App Store reviews API for dashboards.

- **Schedules:** run it daily or weekly from the Schedules page for App Store review data extraction over time, for example with `dateFrom` set to `7d`.
- **Webhooks:** trigger your own endpoint when a run finishes.
- **Integrations:** connect the dataset to tools such as [Make](https://docs.apify.com/platform/integrations/make), [Zapier](https://docs.apify.com/platform/integrations/zapier) and [Google Sheets](https://docs.apify.com/platform/integrations).
- **AI agents:** call the Actor through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### 🔗 More Apify Actors by crawl_craft

| Actor | What it extracts | When to use it |
|---|---|---|
| [Apple App Store Review Scraper](https://apify.com/crawl_craft/apple-app-store-review-scraper) | App Store reviews | Pick it when you need keyword filters, a name search for applications or an only-new-reviews mode, which this Actor does not have. This Actor instead lets you keep any mix of star ratings, while that one filters by a lowest and highest rating. |
| [Etsy Scraper](https://apify.com/crawl_craft/etsy-scraper) | Etsy listings, shops and reviews | Use it for marketplace reviews instead of application reviews. |
| [Facebook Posts Search Scraper](https://apify.com/crawl_craft/facebook-posts-search-scraper) | Public Facebook posts by keyword or hashtag | Use it to follow brand mentions on social media next to your store feedback. |

### ⚖️ Is it legal to scrape App Store reviews?

App Store Reviews Scraper API only collects reviews that are publicly visible on the App Store and does not extract private data. Reviews can still contain personal data such as reviewer names, so collect it only with a legitimate reason and consider GDPR and Apple's terms. Consult a lawyer if unsure. Read Apify's posts on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

### ❓ FAQ

#### How much does it cost?

You pay per saved review, from $1.5 down to $1 per 1,000 results depending on your pricing tier, plus a tiny Actor Start event. See the Pricing tab.

#### Can I get App Store reviews without an API key?

Yes. The input asks only for application links or IDs, so you can get App Store reviews without an API key, an Apple account or cookies.

#### How many reviews can I collect?

Set `maxItems` per application and country, or `0` for everything the App Store returns. The `appReviewCount` field is approximate, so test first.

#### Why is `version` empty for some reviews?

Only a limited set of reviews carries a version: the newest and most helpful 500 per application and country. Older reviews have `null`.

#### Can I use it as an App Store review API?

Yes. Start runs and read the dataset through the Apify API, so it works as an App Store review API for scripts and tools.

#### Do I need proxies?

No. The `proxyConfiguration` input is optional and its default setting works for most runs.

#### Is this an iOS App Store reviews scraper?

Yes. It works as an iOS App Store reviews scraper for iPhone applications, using a link or a numeric ID.

#### What kind of tool is it?

It is an App Store reviews tool for bulk input of links and IDs. Use it as an App Store review downloader when you need files. It reads only the applications you list.

#### Can I filter by stars or date?

Yes. Use `ratings` for chosen star counts and `dateFrom` for a start date or a window such as `30d`.

#### Why is the developer replies table empty?

That table fills only when a review in the results includes a developer reply. Many applications have none in the collected reviews.

### 💬 Your feedback

Found a bug or need a field added? Open an issue from the Issues tab of this Actor. For a custom solution, email hello.crawlcraft@gmail.com.

# Changelog

This Actor's version history is a separate document: https://apify.com/crawl_craft/app-store-reviews-scraper-api/changelog.md

# Actor input Schema

## `urls` (type: `array`):

One or many App Store app links (for example https://apps.apple.com/us/app/instagram/id389801252). Bulk input is supported. The storefront in a link is used when no countries are selected below.

## `appIds` (type: `array`):

Extra numeric App Store IDs, the digits at the end of an app link without the 'id' prefix (for example 389801252). Added to the links above.

## `countries` (type: `array`):

Storefronts to collect reviews from. Every country is collected separately and labelled in the country column. Leave empty to use the country in each link (United States when the link has none). Choose 'All storefronts' for every country.

## `maxItems` (type: `integer`):

Reviews to collect for each app in each country. 0 = everything the App Store serves.

## `sort` (type: `string`):

Order in which reviews are collected. Most recent is the cheapest way to get the latest reviews.

## `ratings` (type: `array`):

Keep only reviews with these star ratings. Leave empty to keep all ratings.

## `dateFrom` (type: `string`):

Keep only reviews on or after this date. Use YYYY-MM-DD (for example 2026-01-01) or a window such as 30d, 2w, 6m or 1y. Leave empty for any date.

## `includeVersions` (type: `boolean`):

Add the app version each reviewer used. Only the newest and most helpful 500 reviews per app and country carry a version; older reviews have it empty. Adds a little run time.

## `proxyConfiguration` (type: `object`):

Optional. The default setting works for most runs. Choose your own proxy setup here if you need one.

## Actor input object example

```json
{
  "urls": [
    "https://apps.apple.com/us/app/instagram/id389801252"
  ],
  "appIds": [],
  "countries": [],
  "maxItems": 10,
  "sort": "recent",
  "ratings": [],
  "includeVersions": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every review with rating, text, author, version and app details.

## `appDetails` (type: `string`):

Reviews next to the app's rating totals and store details.

## `developerReplies` (type: `string`):

Only the reviews that received a reply from the developer.

## `appSummary` (type: `string`):

One row per app and country with rating totals and the 1 to 5 star counts.

## `errors` (type: `string`):

Apps, countries or inputs that could not be scraped.

## `summary` (type: `string`):

Counts for this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://apps.apple.com/us/app/instagram/id389801252"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawl_craft/app-store-reviews-scraper-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://apps.apple.com/us/app/instagram/id389801252"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("crawl_craft/app-store-reviews-scraper-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://apps.apple.com/us/app/instagram/id389801252"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call crawl_craft/app-store-reviews-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawl_craft/app-store-reviews-scraper-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dOoD0XHDber6yH8OL/builds/AceyEPzDpKaXh06r6/openapi.json
