# Apple App Store Reviews Scraper API | $0.10/1K (`angaba92/apple-app-store-reviews-scraper`) Actor

Scrape Apple App Store reviews from up to 20 iOS, iPhone or iPad apps per run. Get ratings, titles, text, authors, dates, versions and votes. $0.10 per 1,000 reviews. Export CSV, JSON, Excel or API.

- **URL**: https://apify.com/angaba92/apple-app-store-reviews-scraper.md
- **Developed by:** [Andres Garcia-Baquero Leon](https://apify.com/angaba92) (community)
- **Categories:** Developer tools, Automation, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 apple app store 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

## Apple App Store Reviews Scraper

Extract raw public reviews from **multiple Apple App Store apps in one run**. Get ratings, review titles and text, authors, dates, app versions, votes, stable review IDs, and storefront metadata. Export to CSV, JSON, Excel, XML, RSS, or the Apify API.

> **Launch price:** $0.10 per 1,000 delivered reviews. A 100-review test run costs $0.01005 including the Actor-start event.

Need Android reviews instead? Use the [Google Play Store Reviews Scraper](https://apify.com/angaba92/google-play-reviews-scraper), with the same multi-app input and per-review price.

| Platform | Actor | Multi-app | Rating filters | Price |
|---|---|---:|---:|---:|
| iOS / Apple App Store | This Actor | Yes | Yes | $0.10/1K reviews |
| Android / Google Play | [Google Play Store Reviews Scraper](https://apify.com/angaba92/google-play-reviews-scraper) | Yes | Yes | $0.10/1K reviews |

### Why use it?

| Manual process | This Actor |
|---|---|
| Open apps one at a time | Up to 20 apps per run |
| Copy reviews manually | Up to 500 reviews per app/storefront |
| Lose stable identifiers | Includes Apple review ID |
| Custom export scripts | Native CSV, JSON, Excel and API output |
| Risk duplicate pages | Deduplicates IDs and stops on repetition |

The Actor returns raw source data without sentiment analysis or opinionated scoring.

### Example output

```json
{
  "appId": "324684580",
  "appUrl": "https://apps.apple.com/us/app/id324684580",
  "reviewId": "14425841786",
  "authorName": "pookie bear💗",
  "authorUrl": "https://itunes.apple.com/us/reviews/id1543075855",
  "rating": 1,
  "title": "WHYYYY",
  "text": "my Spotify won’t let me log in...",
  "reviewDate": "2026-08-14T01:12:34-07:00",
  "appVersion": "9.1.72",
  "voteSum": 0,
  "voteCount": 0,
  "country": "US"
}
```

This is an abbreviated real response shape from the public Apple review feed.

### Output fields

| Field | Type | Description |
|---|---|---|
| `appId` | string | Numeric Apple application ID |
| `appUrl` | string | Storefront-specific app URL |
| `reviewId` | string | Stable review identifier |
| `authorName` | string/null | Public reviewer name |
| `authorUrl` | string/null | Public Apple reviewer URL |
| `rating` | integer | Rating from 1 to 5 |
| `title` | string/null | Review title |
| `text` | string/null | Review body |
| `reviewDate` | string/null | Source timestamp with timezone |
| `appVersion` | string/null | Reviewed app version |
| `voteSum` | integer/null | Helpful vote score |
| `voteCount` | integer/null | Number of votes |
| `reviewUrl` | string/null | Apple review link |
| `country` | string | Requested App Store storefront |

### Input

| Field | Default | Description |
|---|---|---|
| `appIds` | Spotify | Up to 20 numeric IDs or apps.apple.com URLs |
| `maxResultsPerApp` | 100 | Maximum matching reviews per app, up to 500 |
| `country` | `US` | Two-letter App Store storefront |
| `sort` | `newest` | `newest` or `most_helpful` |
| `minRating` | 1 | Minimum star rating |
| `maxRating` | 5 | Maximum star rating |

No field is required. Empty input safely returns public Spotify reviews for the Apify health check.

### Multi-app example

```json
{
  "appIds": [
    "324684580",
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997"
  ],
  "maxResultsPerApp": 250,
  "country": "US",
  "sort": "newest",
  "minRating": 1,
  "maxRating": 2
}
```

The limit applies **per app**. This example can return up to 500 total rows.

### How to use

1. Open the Actor and click **Try for free**.
2. Add one or more Apple app IDs or URLs.
3. Select storefront, result limit, sorting and rating range.
4. Start the run.
5. Export the resulting dataset to CSV, JSON, Excel, XML, RSS, or consume it through the Apify API.

If the Actor saved you time, please leave an honest review on its Apify Store page. Feedback about missing fields or difficult inputs is equally useful and helps improve the product.

### Source limit

Apple's public customer-review feed exposes **10 pages of 50 reviews** per app and storefront. Page 11 returns HTTP 400. Therefore this Actor honestly caps output at **500 source reviews per app/storefront**. It does not claim unlimited history.

To obtain different review sets, change the storefront (`US`, `ES`, `GB`, `DE`, etc.) or sort order. Rating filters are applied after source pages are fetched, so a narrow range can produce fewer than the requested count.

### Pricing

Launch pricing is **$0.0001 per delivered review**, plus an Actor-start event of $0.00005. Billing is coupled atomically to dataset delivery.

| Delivered reviews | Review-event charge |
|---:|---:|
| 100 | $0.01 |
| 500 | $0.05 |
| 1,000 across apps | $0.10 |

Check the live Pricing tab for the authoritative current amount. Apify platform usage and plan rules may also apply.

### Use cases

- Compare feedback across competing iPhone and iPad apps.
- Monitor low-star reviews after a release.
- Build raw datasets for product research or NLP.
- Track app-version-specific complaints.
- Feed reviews into Google Sheets, BI systems, warehouses, or RAG pipelines.
- Collect several client apps in one scheduled run.

### Integrations

Connect the dataset to Google Sheets, Make, Zapier, n8n, Slack, Airbyte, LangChain, webhooks, or any application through the Apify REST API.

### Reliability and billing safeguards

- Uses Apple's public JSON customer-review feed; no browser automation.
- No login, cookies, API key, or proxy required.
- Retries transient 403, 408, 429 and 5xx responses.
- Deduplicates every app by stable `reviewId`.
- Stops an app if a page contains no new IDs.
- Continues with remaining apps after a late per-app failure when data already exists.
- Uses atomic `push_data(..., charged_event_name="review")` delivery.
- Stops before unpaid rows when the run charge limit is reached.

### FAQ

#### Can one run scrape multiple apps?

Yes. Add up to 20 IDs or URLs in `appIds`.

#### Is 500 a configurable restriction?

It is a source restriction. Apple's feed exposes pages 1-10 and rejects page 11.

#### Can I use an App Store URL?

Yes. The Actor extracts the numeric ID from URLs containing `/id123456789`.

#### Does country matter?

Yes. Reviews are storefront-specific. The US and Spanish storefronts can return different records.

#### Can I fetch only one-star reviews?

Set `minRating` and `maxRating` to `1`.

#### Does it scrape app metadata?

No. It specializes in the review object and only adds app ID and URL for context.

#### Does it analyze sentiment?

No. It returns flexible raw reviews for your own pipeline.

#### Are duplicate rows charged?

The Actor deduplicates source pages by review ID before delivery and charging.

### Troubleshooting

| Problem | Explanation / solution |
|---|---|
| No output | Confirm the ID is public and has reviews in the selected storefront |
| Fewer than requested | The source, rating filter, or 500-review feed cap was exhausted |
| Invalid ID warning | Use digits only or an apps.apple.com URL containing `/id...` |
| One app fails | Valid earlier output is retained and later apps continue where safe |
| Stops at a budget boundary | Increase `maxTotalChargeUsd` if more paid rows are needed |
| HTTP errors | Transient errors retry automatically; rerun if Apple remains unavailable |

### Responsible use

Collect only public data and comply with applicable laws, Apple terms, privacy obligations, and your intended use. Do not use public reviewer information for harassment or sensitive profiling.

# Actor input Schema

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

Up to 20 numeric Apple app IDs or full apps.apple.com URLs.

## `maxResultsPerApp` (type: `integer`):

Maximum matching reviews per app. Apple RSS exposes at most 500 per app and storefront.

## `country` (type: `string`):

Two-letter storefront code such as US, ES, GB or DE.

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

Order used by Apple before local rating filters are applied.

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

Return reviews with at least this many stars.

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

Return reviews with no more than this many stars.

## Actor input object example

```json
{
  "appIds": [
    "324684580",
    "310633997"
  ],
  "maxResultsPerApp": 100,
  "country": "US",
  "sort": "newest",
  "minRating": 1,
  "maxRating": 5
}
```

# Actor output Schema

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

No description

# 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": [
        "324684580",
        "310633997"
    ],
    "maxResultsPerApp": 100,
    "country": "US",
    "sort": "newest",
    "minRating": 1,
    "maxRating": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("angaba92/apple-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 = {
    "appIds": [
        "324684580",
        "310633997",
    ],
    "maxResultsPerApp": 100,
    "country": "US",
    "sort": "newest",
    "minRating": 1,
    "maxRating": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("angaba92/apple-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 '{
  "appIds": [
    "324684580",
    "310633997"
  ],
  "maxResultsPerApp": 100,
  "country": "US",
  "sort": "newest",
  "minRating": 1,
  "maxRating": 5
}' |
apify call angaba92/apple-app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,angaba92/apple-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/hf0yaUugbx5mY3l8E/builds/yYsKmQ1dc7INbzXOG/openapi.json
