# App Store Reviews Scraper (`tidyharvest/appstore-reviews-scraper`) Actor

Built to beat thewolves/appstore-reviews-scraper: 6,000 reviews per app and country in our Oct 2026 tests vs their documented 500 cap, many countries per run, links read in their own country. Stars, title, text, dates, developer responses. $0.09 per 1,000, $0.054 on Gold.

- **URL**: https://apify.com/tidyharvest/appstore-reviews-scraper.md
- **Developed by:** [TidyHarvest](https://apify.com/tidyharvest) (community)
- **Categories:** E-commerce, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.05 / 1,000 review scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## App Store Reviews Scraper

Get **Apple App Store reviews** in bulk for any iPhone, iPad or Mac app: star rating, review title and text, reviewer
display name, date, edited flag and the **developer's response**, plus the app's name, developer, average score and
ratings count. Paste App Store ids or links, pick one or many countries, sort newest or most helpful, filter by stars or
keywords, and download JSON, CSV or Excel. Pay only **$0.09 per 1,000 reviews**, with no start fee and no subscription.

### What you can do with it

- **App review monitoring:** pull the newest reviews of your app (or a competitor's) every day and catch bugs and
  complaints right after a release.
- **Competitor research:** compare 1-2 star reviews across rival apps to find the features users ask for.
- **Sentiment analysis and AI datasets:** feed thousands of reviews into an LLM, a sentiment model or a dashboard.
- **Customer support:** see which reviews still lack a developer response (`developerResponse` is empty).
- **Localization and market research:** read the same app's reviews in the US, UK, Germany, Japan and more.

### How to use it

1. Add one or more apps: `310633997` or `https://apps.apple.com/us/app/whatsapp-messenger/id310633997`.
2. Pick the countries, sort and optional star or keyword filters, and set `maxReviewsPerApp` / `maxItems`.
3. Click **Start**, then download the dataset as JSON, CSV, Excel, or read it through the Apify API.

### Input

| Field | What it does |
|---|---|
| `apps` | App Store ids or apps.apple.com links, one per line (up to 200). Default: `310633997`. |
| `countries` | Two-letter storefront codes (`us`, `gb`, `de`, ...). Default `us`. Each app is read once per country. Left at `us`, a link is read in its own country (`apps.apple.com/de/...` gives German reviews). |
| `sort` | `recent` (newest first, default) or `helpful`. |
| `minRating` / `maxRating` | Star range, 1-5. |
| `keywords` | Keep only reviews whose title or text contains one of these words. |
| `onlyWithText` | Skip reviews without text. |
| `includeAppDetails` | Add app name, developer, score and ratings count to every row. Default on. |
| `maxReviewsPerApp` | Reviews per app and country after filters (default 100, up to 10,000). |
| `maxItems` | Hard cap on reviews for the whole run, which also caps your cost (default 100). |
| `proxyConfiguration` | Off by default; the actor falls back to Apify proxy by itself if Apple refuses a request. |

Example:

```json
{ "apps": ["310633997", "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"], "countries": ["us", "gb"], "sort": "recent", "minRating": 1, "maxRating": 2, "maxReviewsPerApp": 500, "maxItems": 1000 }
```

### Output

One item per review:

```json
{
  "reviewId": "14664959376",
  "appId": "310633997",
  "appName": "WhatsApp Messenger",
  "storefront": "us",
  "userName": "Done withir",
  "rating": 5,
  "title": "Great collar",
  "text": "I have gone through 2 collars ...",
  "date": "2026-10-14T21:04:02Z",
  "isEdited": false,
  "developerResponse": null,
  "developerResponseDate": null,
  "reviewUrl": "https://apps.apple.com/us/app/id310633997?see-all=reviews",
  "appDeveloper": "WhatsApp Inc.",
  "appScore": 4.7,
  "appRatingsCount": 18779303,
  "source": "App Store"
}
```

A `SUMMARY` record in the run's key-value store lists, per app and country, how many reviews were scanned and returned.

### Pricing

Pay per result (`review-scraped`): **$0.09 per 1,000 reviews** on the Free plan, $0.081 Bronze, $0.068 Silver,
$0.054 Gold and above. No start fee. Filters and caps apply before you are
charged, and you can set a maximum charge per run in Apify. A run that finds nothing fails instead of silently returning
an empty dataset.

### Compared with thewolves/appstore-reviews-scraper

The most-used App Store reviews actor (544 users/30d, Oct 2026). Our numbers are from cloud runs on 2026-10-20; theirs are
from their own Store page.

| | This actor | thewolves |
|---|---|---|
| Reviews per app and country | 6,000 measured (Instagram US, WhatsApp UK), up to 10,000 | 500 (their documented cap) |
| Countries per run | many (`countries`, or each link's own country) | one per run |
| Developer responses | yes, with date | not listed |
| Star and keyword filters before charging | yes | no |
| Price per 1,000 reviews | $0.09 Free, $0.054 Gold and above | $0.10 |

Where they still win: speed. They quote 100-200 reviews per second; we return about 16 per second (6,000 reviews in
about 6 minutes), so very large pulls take longer.

### Limits and notes

- About 16 reviews per second; 6,000 reviews of one app take about 6 minutes.
- Apple decides how many reviews it exposes per country; totals can be lower than the app's rating count, because
  star-only ratings without text are not all exposed as reviews.
- Developer responses are included when the developer wrote one.
- Only public reviews and public display names are collected. No login is used. Please handle personal data
  (reviewer names) in line with the laws that apply to you.
- This actor is not affiliated with, endorsed by, or sponsored by Apple Inc. App Store is a trademark of Apple Inc.

# Actor input Schema

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

One app per line: a numeric App Store id (`310633997`) or an apps.apple.com link (`https://apps.apple.com/us/app/whatsapp-messenger/id310633997`). Up to 200 per run. A link is read in its own country unless you list other countries below.

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

`Newest` first (best for monitoring) or `Most helpful` (Apple's default ranking).

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

Two-letter storefront codes, one per line (us, gb, de, fr, jp, br, ...). Reviews are fetched per country, so 3 countries and 100 reviews per app can return up to 300 per app. Left at us, an apps.apple.com link is read in its own country (a /de/ link gives German reviews) and bare ids in the US store; list other countries to read every app in each of them.

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

Keep reviews with at least this many stars (1-5).

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

Keep reviews with at most this many stars (1-5).

## `keywords` (type: `array`):

Keep a review only if its title or text contains one of these words (case-insensitive). Empty = all reviews.

## `onlyWithText` (type: `boolean`):

Skip star-only reviews that have no written text.

## `includeAppDetails` (type: `boolean`):

Read the app's App Store record once per app and country to add its name, developer, average score and ratings count to every review row.

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

Stop each app and country after this many reviews (after filters).

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

Hard cap on reviews for the whole run (also caps your cost). 0 = no limit beyond the per-app cap.

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

Not needed normally. The actor already retries through Apify datacenter and then residential proxy if Apple refuses a request; set this to start on a proxy.

## Actor input object example

```json
{
  "apps": [
    "310633997"
  ],
  "sort": "recent",
  "countries": [
    "us"
  ],
  "minRating": 1,
  "maxRating": 5,
  "onlyWithText": false,
  "includeAppDetails": true,
  "maxReviewsPerApp": 100,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `reviews` (type: `string`):

One item per review.

# 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"
    ],
    "countries": [
        "us"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tidyharvest/appstore-reviews-scraper").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"],
    "countries": ["us"],
}

# Run the Actor and wait for it to finish
run = client.actor("tidyharvest/appstore-reviews-scraper").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"
  ],
  "countries": [
    "us"
  ]
}' |
apify call tidyharvest/appstore-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

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/4amdx8e6dEbD7qp1k/builds/GUA73AtJdoUStZYQL/openapi.json
