# App Store Reviews Scraper (`workmatic/app-store-reviews-scraper`) Actor

Scrape Apple App Store reviews for any iOS app by URL or ID, in any country. Get rating, title, text, app version, date and helpful votes as clean JSON, CSV or Excel. No login, no proxies, no personal data.

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

## Pricing

from $3.00 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## App Store Reviews Scraper

Scrape **Apple App Store reviews** for any iOS, iPadOS or macOS app in any country. Paste an App Store URL or app ID and get every review as clean JSON, CSV or Excel: star rating, title, text, app version, date and helpful votes. Works in all 175 storefronts. No login, no cookies, no proxies, no personal data.

### What you get

| Field | Example |
|---|---|
| `rating` | `5` |
| `title` | `Finally works offline` |
| `text` | `The last update fixed sync on iPad…` |
| `version` | `578.1` |
| `date` | `2026-09-12T14:03:11-07:00` |
| `voteCount` / `voteSum` | `12` / `9` |
| `country` | `us` |
| `appName`, `developer`, `primaryGenre`, `averageRating`, `ratingCount`, `currentVersion` | app metadata attached to every row |
| `reviewUrl`, `reviewId`, `appId`, `sort`, `scrapedAt` | for deduplication and audit |

Reviewer names are deliberately **not** collected, so the output contains no personal data and can be stored and shared freely.

### Input

```json
{
  "apps": ["https://apps.apple.com/us/app/facebook/id284882215", "310633997"],
  "countries": ["us", "gb", "de"],
  "sort": "mostrecent",
  "maxReviewsPerApp": 1500,
  "includeAppMetadata": true
}
```

- **apps** – App Store URLs or numeric IDs. Mixed input is fine.
- **countries** – storefront codes (`us`, `gb`, `de`, `fr`, `jp`, `br`, `in`, …). Apple exposes up to **500 reviews per country per sort order**, so add countries to get more.
- **sort** – `mostrecent` (newest 500) or `mosthelpful` (top 500 by helpful votes). Run both to widen coverage.
- **maxReviewsPerApp** – hard stop per app, summed across countries.
- **includeAppMetadata** – attach app name, developer, genre, average rating, rating count and current version to every row (free).

### Pricing

Pay per review: **$3 per 1,000 reviews**. You are charged only for reviews actually saved to the dataset. A run that finds nothing costs nothing beyond Apify platform usage, which is tiny because the actor uses plain HTTP and about 256 MB of memory.

### How to use the data

- **Product research** – read what users praise or hate about competitors before you build.
- **Release monitoring** – schedule a daily run with `sort: mostrecent` and alert on new 1-star reviews mentioning a bug.
- **Sentiment and topic analysis** – feed `text` into an LLM or your own classifier; `version` lets you compare releases.
- **Localization QA** – compare `rating` distributions across `countries`.
- **AI agents** – this actor works over MCP; ask your agent for "the latest 200 App Store reviews of app X in Germany".

### Reliability

The actor reads Apple's public customer-reviews feed and the public lookup API. There is no login, no anti-bot layer and no proxy cost. Every request is retried with exponential backoff, pages are de-duplicated by review ID, and results are saved page by page so partial runs still return data.

### Limits

- Apple caps the public feed at 500 reviews per country per sort order. Use more countries and both sort orders to widen coverage.
- Apps with no reviews in a given storefront return zero rows for that country, which is normal.

### Integrations

Export to JSON, CSV, Excel or XML, push to Google Sheets, Slack, Zapier, Make or your own webhook from the **Integrations** tab, or call the actor via the Apify API and SDKs (Node.js, Python).

### Legal

The actor collects only publicly available review content published by Apple and stores no reviewer identities. You are responsible for how you use the data.

### Support

Open an issue on the actor's **Issues** tab. Bugs are usually fixed within a day.

# Actor input Schema

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

One or more iOS apps to scrape. Paste App Store URLs (e.g. https://apps.apple.com/us/app/facebook/id284882215) or plain numeric app IDs (e.g. 284882215).

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

Two-letter storefront codes to scrape, e.g. us, gb, de, fr, jp, br, in. Each country returns up to 500 reviews per sort order. Default: us.

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

Which reviews Apple returns first. 'mostrecent' gives the newest 500 reviews per country; 'mosthelpful' gives the 500 with the most helpful votes.

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

Stop after this many reviews per app (summed across countries). Apple exposes at most 500 reviews per country per sort order. Default 500.

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

Apple throttles busy IP addresses. Apify datacenter proxies (default) rotate the IP per request and keep runs reliable. Traffic is tiny (about 30 KB per page).

## `includeAppMetadata` (type: `boolean`):

Adds appName, developer, primaryGenre, averageRating, ratingCount and currentVersion to every review row (one lookup per app and country, free).

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/facebook/id284882215"
  ],
  "countries": [
    "us"
  ],
  "sort": "mostrecent",
  "maxReviewsPerApp": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "includeAppMetadata": true
}
```

# Actor output Schema

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

All scraped reviews as JSON, CSV or Excel. One row per review: appId, appName, country, rating, title, text, version, date, voteCount, reviewUrl.

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

Apps, countries, sort order and total number of reviews saved.

# 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": [
        "https://apps.apple.com/us/app/facebook/id284882215"
    ],
    "countries": [
        "us"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("workmatic/app-store-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": ["https://apps.apple.com/us/app/facebook/id284882215"],
    "countries": ["us"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("workmatic/app-store-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": [
    "https://apps.apple.com/us/app/facebook/id284882215"
  ],
  "countries": [
    "us"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call workmatic/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,workmatic/app-store-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/omoUhxUrnHgDQcNIQ/builds/SplpL4GlGOUoc0PHf/openapi.json
