# App Store Reviews Scraper: iOS app reviews, ratings, details (`bepolabs/app-store-reviews`) Actor

Point it at one or more iOS apps and get their reviews with title, version and date, newest first or by usefulness. Costs 0.10 USD per 1,000 reviews, nothing per run.

- **URL**: https://apify.com/bepolabs/app-store-reviews.md
- **Developed by:** [BEPO Labs](https://apify.com/bepolabs) (community)
- **Categories:** E-commerce, Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.10 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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?

Turn an app's id, link or bundle name into a table of iOS app reviews: headline, body, star count, release, author, posting day and helpful votes. App Store Reviews adds the app's developer, average score, price and genre to every row, ready for sentiment analysis of customer feedback. It reads public feeds from any storefront, up to 500 per app, with no login and no proxy.

- **Product feedback**: read what users complain about after each release, filtered by app version
- **Competitor research**: compare the 1- and 2-star reviews of rival apps, store by store
- **Customer support**: find bug reports and feature requests before they become a trend
- **App store optimization**: collect the words users use in their reviews for your keywords and listing
- **Monitoring**: schedule a daily run with `sort: mostRecent` and send new low ratings to Slack

![App Store Reviews: iOS App Store reviews with stars, text, app version and date, plus the app's rating and details, for any store country.](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/app-store-reviews-hero.png)

#### ✨ Why use this Actor?

- ✅ **Ids, URLs or bundle names**: paste `310633997`, an apps.apple.com link or `com.spotify.client`; up to 100 apps per run
- ✅ **Every country**: each app runs in every store you list, so you see what users in the US, UK or Germany say
- ✅ **Star filter**: `minRating` and `maxRating` keep only complaints or only praise
- ✅ **App details on every row**: name, developer, average score, number of ratings, price and genre come with each review, ready for a pivot table
- ✅ **Error handling**: retries with backoff on network errors, 429 and 5xx; a failing app is reported in the run summary and not charged
- ✅ **Cheap**: 0.10 USD per 1,000 reviews, nothing per run

### 📦 What data can you get with App Store Reviews?

| | | |
|---|---|---|
| 📝 Review title and text | ⭐ Stars (1 to 5) | 🔢 App version reviewed |
| 👤 Author and author URL | 📅 Review date (ISO) | 👍 Helpful votes |
| 📱 App name, id and bundle id | 🏢 Developer | 📊 Average rating and rating count |
| 💲 Price and currency | 🏷️ Genre | 🌍 Store country |

### 🚀 How to use App Store Reviews

App Store Reviews works in a few clicks, no coding needed:

1. [Create a free Apify account](https://console.apify.com/sign-up) (the free plan includes 5 USD of monthly credit).
2. Open [App Store Reviews](https://apify.com/bepolabs/app-store-reviews) and click **Try for free**.
3. Enter one or more App Store ids, URLs or bundle names, pick the store countries and how many reviews you want per app.
4. Click **Start** and wait for the run to finish (most runs take seconds).
5. Download your data as JSON, CSV, Excel, XML or HTML, or send it straight to Google Sheets, Make, Zapier or your AI agent.

![How App Store Reviews works](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/app-store-reviews-workflow.png)

### ⬇️ Input

Only `apps` is required. Everything else has a sensible default: the newest 100 reviews per app, all stars, the URL's country or the US store.

##### Apps

An id such as `310633997`, a URL such as `https://apps.apple.com/us/app/whatsapp-messenger/id310633997` or a bundle id such as `com.spotify.client`. Up to 100 apps.

##### Countries

Two-letter store codes such as `us`, `gb` or `de` (`uk` becomes `gb`, Apple's code). Every app is checked in every country you list.

##### How many reviews

`maxReviewsPerApp` from 1 to 500 per app and country; Apple serves at most 500.

##### Only complaints

Set `maxRating` to 2 to keep the 1- and 2-star reviews only.

| Field | Type | What it does | Default |
|---|---|---|---|
| **Apps** (`apps`) | array | App Store ids (310633997), apps.apple.com URLs or bundle ids (com.spotify.client). | `["310633997"]` |
| **Countries** (`countries`) | array | Two-letter store countries, e.g. |  |
| **Sort** (`sort`) | string | mostRecent or mostHelpful. | `"mostRecent"` |
| **Max reviews per app and country** (`maxReviewsPerApp`) | integer | 1 to 500 (Apple serves at most 500 per app, country and sort). | `100` |
| **Minimum stars** (`minRating`) | integer | Keep reviews with at least this many stars. | `1` |
| **Maximum stars** (`maxRating`) | integer | Keep reviews with at most this many stars, e.g. | `5` |
| **Retries on an empty feed page** (`emptyRetries`) | integer | Apple's feed often answers with an empty page; it is asked again this many times before the app page is used. | `8` |
| **Max retries** (`maxRetries`) | integer | Retries per request with exponential backoff on network errors, 429 and 5xx. | `3` |

![App Store Reviews input form](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/app-store-reviews-input.png)

#### Input example

```json
{
    "apps": [
        "310633997"
    ],
    "countries": [
        "us"
    ],
    "maxReviewsPerApp": 100
}
```

### ⬆️ Output

Every review becomes one row with the app's details. The run summary (`OUTPUT` in the key-value store) lists every app and country with the reviews found and the error if one failed.

![App Store Reviews output table](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/app-store-reviews-output.png)

#### Output example

One row of the dataset (WhatsApp, US store, a real run of 2026-10-16):

```json
{
    "appId": "310633997",
    "appName": "WhatsApp Messenger",
    "developer": "WhatsApp Inc.",
    "bundleId": "net.whatsapp.WhatsApp",
    "appVersion": "26.40.77",
    "appRating": 4.68335,
    "appRatingCount": 18779303,
    "price": 0,
    "currency": "USD",
    "genre": "Social Networking",
    "appUrl": "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
    "country": "us",
    "reviewId": "14659266093",
    "title": "missed call notification triggers call",
    "text": "received a missed call notification and clicked to just check it and it just called back the person without my permision",
    "rating": 1,
    "version": "26.40.77",
    "author": "Ali7971",
    "authorUrl": "https://itunes.apple.com/us/reviews/id104584184",
    "date": "2026-10-12T21:01:19.000Z",
    "voteSum": 0,
    "voteCount": 0,
    "source": "rss",
    "ratingHistogram": null
}
```

View the results as a table or JSON in the Output tab and download them as JSON, CSV, Excel, XML, HTML or RSS, all fields or only those you pick.

### 💰 How much does App Store Reviews cost?

App Store Reviews is priced **per event**: **0.1 USD per 1,000 reviews** (0.0001 USD per review), with no monthly rental. Failed apps cost nothing.

| You get | You pay |
|---|---|
| 100 reviews | 0.01 USD |
| 1,000 reviews | 0.1 USD |
| 10,000 reviews | 1 USD |
| 100,000 reviews | 10 USD |

💡 Apify's free plan gives you 5 USD of credit every month, enough for about **50,000 reviews** at no cost. Set a spending limit per run and the Actor stops there.

### ⚖️ App Store Reviews vs. the alternatives

| | App Store Reviews | Typical review scrapers | Copying by hand |
|---|---|---|---|
| **Ids, URLs and bundle ids** | ✅ | usually URLs only | – |
| **Many countries in one run** | ✅ | varies | ❌ |
| **Star filter** | ✅ | rarely | ❌ |
| **App rating and details on every row** | ✅ | varies | ❌ |
| **Price per 1,000 reviews** | 0.10 USD | often more | hours |

### 🔌 Integrations, API and MCP

#### Connect App Store Reviews to your AI agent (MCP)

Give Claude, ChatGPT, Cursor or any MCP client direct access to App Store Reviews through the [Apify MCP server](https://mcp.apify.com). Add this URL to its settings:

```text
https://mcp.apify.com/?actors=bepolabs/app-store-reviews
```

For Claude Desktop, add it under `mcpServers` in `claude_desktop_config.json`:

```json
{
    "mcpServers": {
        "app-store-reviews": {
            "command": "npx",
            "args": [
                "-y",
                "@apify/actors-mcp-server",
                "--actors",
                "bepolabs/app-store-reviews"
            ],
            "env": {
                "APIFY_TOKEN": "<your Apify API token>"
            }
        }
    }
}
```

Then ask: *"Get the last 200 one- and two-star App Store reviews of WhatsApp in the US and the UK and sum up the top complaints."*

#### Run it from your code

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("bepolabs/app-store-reviews").call(run_input={"apps":["310633997"],"countries":["us"],"maxReviewsPerApp":100})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

JavaScript (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('bepolabs/app-store-reviews').call({"apps":["310633997"],"countries":["us"],"maxReviewsPerApp":100});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### No-code integrations

Send results to **Google Sheets, Slack, Airtable, HubSpot, Make, Zapier, n8n** and more from the Integrations tab, start runs on a **schedule**, or trigger your own endpoint with a **webhook** when a run finishes. The [Apify API](https://docs.apify.com/api/v2) gives you full control over runs and datasets.

### ❓ FAQ

##### How many reviews can I get per app?

Up to 500 per app and country, the most Apple's public review feed serves. Add more countries to get more reviews of the same app.

##### Does it work for Google Play?

No, this Actor reads the iOS App Store only.

##### Can I sort by most helpful?

Yes, set `sort` to `mostHelpful`; the default is `mostRecent`.

##### Do I need an Apple account or a proxy?

No. The Actor uses Apple's public feeds, without login and without proxy.

##### Does every review have a date, and is the output the same every run?

Yes. Each `date` is ISO 8601, and an entry Apple sends without a valid one is left out instead of saved half-empty. Every row has the same flat fields whichever feed it came from, with `null` for a missing value, never a nested object.

##### Is it legal to use App Store Reviews?

The Actor reads Apple's public customer-reviews feed and the iTunes Lookup API, which anyone can open in a browser. Reviews contain user names chosen by their authors; if you store or publish them, follow the privacy rules that apply to you (for example the GDPR) and the platform's terms.

##### What if something is missing or does not work?

Open an issue on the **Issues** tab; we read each one and reply. Feature requests are welcome too.

### 💬 Your feedback

Tell us what App Store Reviews should add on the **Issues** tab or leave a review; your notes decide what we work on next.

### 🔗 Related Actors

| Actor | What it does |
|---|---|
| 🧩 [Chrome Web Store Scraper](https://apify.com/bepolabs/chrome-web-store) | Users, rating, version, last update, developer, category and permissions of any Chrome extension. |
| 🎮 [Steam Scraper](https://apify.com/bepolabs/steam) | Game prices, details and player reviews from the Steam store, by app id, store URL or game name. |
| 🛍️ [Shopify Products](https://apify.com/bepolabs/shopify-products) | Any Shopify store URL to every product, with variants, prices, sale prices, SKUs, stock and images. |
| 📦 [npm and PyPI Package Data](https://apify.com/bepolabs/npm-pypi) | Versions, downloads, licences, maintainers and release history of npm and PyPI packages in one table. |
| 📢 [Google Ads Transparency Scraper](https://apify.com/bepolabs/google-ads-transparency) | Every ad a company runs on Google, by domain, advertiser ID or name, from the Ads Transparency Center. |
| 📊 [Google Sheets Import and Export](https://apify.com/bepolabs/google-sheets) | Send any Apify dataset or JSON to a Google Sheet (append, replace or upsert by key), or read a sheet back as clean rows. |
| 📈 [Google Trends Scraper](https://apify.com/bepolabs/google-trends) | Interest over time for up to five keywords on one 0 to 100 scale, any country or worldwide, plus top and rising related queries. |
| 📈 [Wikipedia Pageviews](https://apify.com/bepolabs/wikipedia-pageviews) | Daily or monthly views of any Wikipedia article in any language, with totals and averages, from the official Wikimedia API. |

# Changelog

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

# Actor input Schema

## `apps` (type: `array`):

App Store ids (310633997), apps.apple.com URLs or bundle ids (com.spotify.client). Up to 100.

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

Two-letter store countries, e.g. us, gb, de. Each app runs in each country. Default: the URL's country, else us.

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

mostRecent or mostHelpful.

## `maxReviewsPerApp` (type: `integer`):

1 to 500 (Apple serves at most 500 per app, country and sort).

## `minRating` (type: `integer`):

Keep reviews with at least this many stars.

## `maxRating` (type: `integer`):

Keep reviews with at most this many stars, e.g. 2 for complaints only.

## `emptyRetries` (type: `integer`):

Apple's feed often answers with an empty page; it is asked again this many times before the app page is used.

## `maxRetries` (type: `integer`):

Retries per request with exponential backoff on network errors, 429 and 5xx.

## Actor input object example

```json
{
  "apps": [
    "310633997"
  ],
  "sort": "mostRecent",
  "maxReviewsPerApp": 100,
  "minRating": 1,
  "maxRating": 5,
  "emptyRetries": 8,
  "maxRetries": 3
}
```

# Actor output Schema

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

Dataset items, one row per result, in the overview table view.

# 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 = {
    "apps": [
        "310633997"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bepolabs/app-store-reviews").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 = { "apps": ["310633997"] }

# Run the Actor and wait for it to finish
run = client.actor("bepolabs/app-store-reviews").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 '{
  "apps": [
    "310633997"
  ]
}' |
apify call bepolabs/app-store-reviews --silent --output-dataset

```

## MCP server setup

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

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/wAUtz1bLGAGfOWTaD/builds/knLWRCbcFgCSP2VFS/openapi.json
