# App Store Reviews Scraper — Unlimited | $5/1K (`datawell/appstore-reviews-scraper`) Actor

Apple App Store reviews past the 500-per-country cap — sweeps every major storefront for tens of thousands per app. Each review carries the app version, so complaints map to releases. Plus app details, prices, search and charts. For ASO and competitor research.

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

## Pricing

$5.00 / 1,000 results

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/platform/actors/running/actors-in-store#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 & App Data Scraper

Extract Apple App Store reviews, app details, ratings, search results and top
charts. No developer account, no API key, no login.

***

### Why this scraper

**Past the 500-review cap.** Apple returns at most 10 pages per storefront — 500
reviews — and answers page 11 with an error. Scrapers built the obvious way stop
there, no matter how many reviews an app has. This one sweeps multiple country
storefronts, each holding its own 500, so a single app can yield tens of
thousands of reviews.

**App version on every review.** Apple exposes which build the reviewer was
running. That is the column that turns a pile of complaints into "the 2.4.0
release broke something" — and most exports drop it.

**Current-version rating separately.** A 4.7-star average hides a bad update.
The app mode returns the overall rating and the current-version rating side by
side, so a drop is visible immediately.

***

### What you can extract

| Mode | What you get |
|---|---|
| **Reviews of an app** | Star rating, title, full text, app version, reviewer, helpfulness votes and storefront |
| **App details and ratings** | Price, category, developer, ratings overall and for the current version, release dates, size, languages |
| **Search the App Store** | Find apps by keyword with all the detail fields attached |
| **Top charts** | Free, paid, grossing and new-app rankings for any country and category |

***

### Quick start

1. Pick **Reviews of an app**.
2. Paste an App ID (`310633997`) or a store URL.
3. To get more than 500 reviews, tick **Use all major storefronts**.
4. Click **Start**, download as CSV, Excel or JSON.

***

### Example inputs

**All recent reviews of an app**

```json
{
  "mode": "reviews",
  "appIds": ["310633997"],
  "countries": ["us"],
  "maxItems": 500
}
```

**Tens of thousands of reviews across every major market**

```json
{
  "mode": "reviews",
  "appIds": ["571800810"],
  "allCountries": true,
  "maxItems": 10000
}
```

**German and Austrian reviews only**

```json
{
  "mode": "reviews",
  "appIds": ["310633997"],
  "countries": ["de", "at"],
  "maxItems": 1000
}
```

**Compare your app against competitors**

```json
{
  "mode": "apps",
  "appIds": ["571800810", "493145008", "1307736395"]
}
```

**Find every app in a niche**

```json
{
  "mode": "search",
  "searchQuery": "habit tracker",
  "countries": ["us"],
  "maxItems": 200
}
```

**Track the charts in several markets**

```json
{
  "mode": "charts",
  "chartType": "topgrossingapplications",
  "countries": ["us", "gb", "de", "jp"],
  "maxItems": 400
}
```

***

### Output fields

#### Reviews

| Field | Description |
|---|---|
| `rating` | Stars, 1 to 5 |
| `title`, `review` | Headline and full body |
| `appVersion` | **Which build the reviewer was running** |
| `country` | Which storefront the review came from |
| `authorName`, `authorUrl` | Who wrote it |
| `updatedAt` | When it was posted or last edited |
| `helpfulVotes`, `totalVotes` | Community response |
| `appId`, `appName`, `reviewId`, `url` | Identifiers and link |

#### Apps

| Field | Description |
|---|---|
| `name`, `developer`, `developerId`, `bundleId` | Identity |
| `averageRating`, `ratingCount` | Overall reception |
| `averageRatingCurrentVersion`, `ratingCountCurrentVersion` | Reception of the current build |
| `price`, `currency`, `isFree` | Pricing in the chosen storefront |
| `version`, `currentVersionReleaseDate`, `releaseNotes` | Current release |
| `releaseDate` | When the app first shipped |
| `primaryGenre`, `genres`, `contentRating`, `advisories` | Classification |
| `languages`, `fileSizeBytes`, `minimumOsVersion`, `supportedDevices` | Technical detail |
| `description`, `iconUrl`, `screenshotCount`, `sellerUrl` | Store presence |

#### Charts

`rank`, `name`, `developer`, `category`, `price`, `currency`, `country`, `url`,
`releaseDate`, `summary`, `iconUrl`

***

### Input notes

- **Apps** accept an App ID or a full `apps.apple.com` URL.
- **Storefronts** are two-letter country codes. Reviews differ per country —
  more countries means more unique reviews, not duplicates.
- **Category IDs** for charts: 6014 Games, 6017 Education, 6007 Productivity,
  6013 Health & Fitness, 6015 Finance, 6002 Utilities.

***

### Limits

- **500 reviews per storefront** is Apple's cap; the way past it is more
  countries, which this Actor automates.
- **Search returns at most 200 results** per query — a limit of Apple's search
  endpoint.
- **Ratings are snapshots** at the time of scraping.
- **Reviews are localised.** A German storefront returns mostly German text.

***

### FAQ

**Do I need an Apple developer account?**
No. These are the same public endpoints the App Store website uses.

**Can I get more than 500 reviews for one app?**
Yes — enable **Use all major storefronts** or list several countries.

**Why do the same reviews not repeat across countries?**
Each storefront keeps its own reviews. Duplicates are filtered out anyway.

**Can I see which version a complaint refers to?**
Yes, `appVersion` is on every review row.

**What formats can I export?**
CSV, Excel, JSON, XML, or straight from the Apify API.

***

### Legal and responsible use

This Actor reads publicly available data through Apple's own public endpoints. It
does not bypass authentication or access private content.

Review text and reviewer names are personal data under GDPR. You remain
responsible for how you store, analyse and republish the output.

# Actor input Schema

## `mode` (type: `string`):

Pick what you want to collect. The fields below apply depending on this choice.

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

App IDs (310633997) or App Store URLs (https://apps.apple.com/us/app/whatsapp/id310633997). Used in the review and app modes.

## `searchQuery` (type: `string`):

What to search for in the App Store, e.g. 'habit tracker'. Used in search mode.

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

Total number of records to collect. With several apps, the budget is split evenly between them.

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

Two-letter country codes, e.g. us, gb, de. Apple caps reviews at 500 per storefront — add more countries to get past that.

## `allCountries` (type: `boolean`):

Sweeps the 20 largest storefronts instead of the list above. Each one holds up to 500 more reviews, so this is how you get tens of thousands from a single app.

## `sortBy` (type: `string`):

Newest reviews first, or the ones other users found most helpful.

## `includeAppName` (type: `boolean`):

Costs one extra request per app, but makes multi-app exports readable.

## `chartType` (type: `string`):

Which ranking to fetch. Used in charts mode.

## `genreId` (type: `string`):

Restrict charts to a category, e.g. 6014 for Games, 6017 for Education, 6007 for Productivity. Leave empty for all.

## `requestDelaySeconds` (type: `integer`):

Seconds to wait between calls. Raise this for very large runs.

## Actor input object example

```json
{
  "mode": "reviews",
  "appIds": [
    "310633997"
  ],
  "maxItems": 100,
  "countries": [
    "us"
  ],
  "allCountries": false,
  "sortBy": "mostRecent",
  "includeAppName": true,
  "chartType": "topfreeapplications",
  "requestDelaySeconds": 0
}
```

# Actor output Schema

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

Scraped reviews, apps or chart entries. Review rows carry rating, text, app version and storefront; app rows carry ratings, price, category and release dates.

## `resultsCsv` (type: `string`):

The same rows as a CSV download, ready for Excel or Google Sheets.

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

// Run the Actor and wait for it to finish
const run = await client.actor("datawell/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 = {
    "appIds": ["310633997"],
    "countries": ["us"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "appIds": [
    "310633997"
  ],
  "countries": [
    "us"
  ]
}' |
apify call datawell/appstore-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=datawell/appstore-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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