# App Store Reviews Scraper & App Details API (`magenta_waterwheel/app-store-reviews-details`) Actor

Scrape Apple App Store reviews and app details for any iOS app in any country storefront: star rating, title, text, version and date, plus average rating, rating count, price, version and release notes. Filter by stars and date. No login, no proxies, stable JSON output.

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

## Pricing

from $0.25 / 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

## App Store Reviews Scraper & App Details API (All Countries)

**App Store Reviews Scraper** is an **Apple App Store reviews API** that extracts **customer reviews** and **app details** from the Apple App Store for any app, in **any country storefront**. Get star ratings, review titles and text, app version, review date and helpful votes, plus app metadata such as average rating, rating count, price, current version, release notes, category, developer, screenshots and description.

It uses Apple's public iTunes Search API and public customer-reviews feed. There's no login, no browser and no proxy cost, so runs are fast and cheap. Export to JSON, CSV or Excel, or connect via API, Make, Zapier or n8n.

### Why use this App Store reviews scraper?

|                                        | App Store Reviews Scraper                  | Copying reviews by hand | ASO / review-monitoring SaaS |
| -------------------------------------- | ------------------------------------------ | ----------------------- | ---------------------------- |
| Reviews **and** app details in one run | Yes                                        | No                      | Usually                      |
| Many countries per run                 | Yes, any storefront                        | One at a time           | Plan-dependent               |
| Star-rating and date filters           | Yes, filtered reviews are free             | Manual                  | Yes                          |
| Stable flat JSON, CSV or Excel         | Yes                                        | No                      | Export often limited         |
| Login, browser or proxies              | None (Apple's public feeds)                | n/a                     | n/a                          |
| Price                                  | **$0.25 per 1,000 reviews**, pay as you go | Your time               | Monthly subscription         |

### What can this App Store scraper do?

- ⭐ **Scrape App Store reviews** with rating, title, text, app version, date and helpful votes.
- 🌍 **Cover multiple countries in one run.** Each storefront (us, gb, de, jp, br…) has its own reviews and ratings.
- 📱 **Get app details**: name, developer, average rating, rating count, price, version, last update date, release notes, description, category, size, age rating, languages, icon and screenshots.
- 🎯 **Filter reviews** by star rating (for example only 1–2 star reviews) and by date (only reviews newer than a given date).
- 🔁 **Monitor new reviews** on a schedule with the **Only reviews newer than** filter.
- 🔒 **Privacy-friendly by default.** Reviewer nicknames are excluded unless you turn them on.
- 🤖 **Ready for AI agents and LLM pipelines**, with clean, flat JSON that's easy to summarize or classify.

### Who uses App Store review data?

- **Product and UX teams** looking for bugs, feature requests and sentiment after each release.
- **App marketers and ASO specialists** comparing ratings across countries and competitors.
- **Market researchers** tracking competitors' versions, pricing and rating trends.
- **Customer support** teams spotting negative reviews quickly.
- **AI and data teams** running sentiment analysis, topic clustering or LLM summaries of user feedback.
- **Agencies and investors** benchmarking apps before a pitch or deal.

### How to scrape App Store reviews

1. Click **Try for free**.
2. Add apps to **Apps**, one per line. You can use the App Store ID (`570060128`), the App Store URL (`https://apps.apple.com/us/app/duolingo-language-lessons/id570060128`) or the bundle ID (`com.spotify.client`).
3. Add **Countries** as two-letter codes (`us`, `gb`, `de`…).
4. Choose how many reviews per country you want, and optional rating or date filters.
5. Click **Start**, then download the results from the **Output** tab.

### Input example

```json
{
    "apps": ["https://apps.apple.com/us/app/duolingo-language-lessons/id570060128", "324684580"],
    "countries": ["us", "gb"],
    "includeAppDetails": true,
    "includeReviews": true,
    "maxReviewsPerCountry": 100,
    "sortBy": "mostrecent",
    "minRating": 1,
    "maxRating": 5
}
```

### Output examples

Every record has a `recordType` of `app` or `review`. The **Reviews** and **App details** views in the Output tab show them separately.

**Review**

```json
{
    "recordType": "review",
    "reviewId": "14633649772",
    "appId": 570060128,
    "appName": "Duolingo: Language & Chess",
    "country": "gb",
    "rating": 5,
    "title": "I love Duolingo",
    "text": "it’s a very good app",
    "appVersion": "7.142.0",
    "reviewedAt": "2026-10-06T08:59:39.000Z",
    "voteSum": 0,
    "voteCount": 0,
    "reviewerName": null,
    "sortBy": "mostrecent",
    "scrapedAt": "2026-10-07T20:14:08.664Z"
}
```

**App details** (shortened)

```json
{
    "recordType": "app",
    "appId": 324684580,
    "country": "us",
    "name": "Spotify: Music and Podcasts",
    "bundleId": "com.spotify.client",
    "developerName": "Spotify",
    "averageRating": 4.77203,
    "ratingCount": 42443544,
    "formattedPrice": "Free",
    "version": "9.1.88",
    "primaryGenre": "Music",
    "appUrl": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580?uo=4",
    "scrapedAt": "2026-10-07T20:15:18.492Z"
}
```

A `RUN_SUMMARY` record in the key-value store shows reviews per country, apps not found in a storefront, and any failed requests.

### How much does it cost to scrape App Store reviews?

This Actor uses **pay-per-event** pricing. You only pay for the records you get:

| Event                                          | Price                                             |
| ---------------------------------------------- | ------------------------------------------------- |
| Review saved                                   | **$0.25 per 1,000 reviews** ($0.00025 per review) |
| App details record saved (per app per country) | **$2.00 per 1,000 apps** ($0.002 per record)      |
| Actor start                                    | $0.00005 per run                                  |

For example, 500 reviews for one app in 3 countries (1,500 reviews) plus 3 app records costs about **$0.38**. Reviews you filter out by rating or date are free, and there's no extra charge for compute or proxies. Set **Maximum cost per run** in the run options to cap spending.

More examples:

- The prefilled example (2 apps, 2 countries, up to 100 reviews each): about **$0.11**
- 10,000 reviews: **$2.50**
- App details only for 1,000 apps: **$2.00**

### Use it with AI agents (MCP) and the API

Add this Actor as a tool in Claude, ChatGPT, Cursor, VS Code or any other MCP client through the [Apify MCP server](https://docs.apify.com/mcp):

```text
https://mcp.apify.com?tools=magenta_waterwheel/app-store-reviews-details
```

Then just ask, for example: *"Get the latest 1- and 2-star App Store reviews for Duolingo in the US, UK and Germany and summarize the main complaints."* The agent fills in the input, runs the Actor and reads the results. The Actor runs with **limited permissions**, so it can only access its own run storage.

To get results in a single HTTP request, call the synchronous endpoint with your [Apify API token](https://console.apify.com/settings/integrations):

```bash
curl -X POST "https://api.apify.com/v2/acts/magenta_waterwheel~app-store-reviews-details/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apps":["570060128"],"countries":["us"],"maxReviewsPerCountry":50,"maxRating":2}'
```

You can also use the official [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js) clients, or the ready-made code on the **API** tab.

### Integrations and scheduling

- ⏰ **Schedule runs** hourly, daily or weekly in Apify Console, with no server to maintain.
- 🔗 **Send results anywhere**: Google Sheets, Slack, Google Drive, Airbyte, webhooks, or no-code tools such as **Make, Zapier and n8n**.
- 📤 **Export** the dataset as JSON, CSV, Excel, XML, RSS or HTML.
- 📈 **Monitoring**: get notified if a run fails, and see every run's log and cost in Console.

### FAQ

#### Is there a free trial?

Yes. Apify's Free plan includes **$5 of usage credit every month**, enough for about **20,000 reviews** with this Actor. No credit card is needed to start.

#### How do I find an app's App Store ID?

Open the app's page on apps.apple.com. The ID is the number after `id` in the URL, for example `570060128` in `https://apps.apple.com/us/app/duolingo-language-lessons/id570060128`. You can also paste the full URL or the bundle ID (`com.spotify.client`).

#### How do I monitor new reviews every day?

Save your input as a task, keep **Sort reviews by** on most recent, and add a daily schedule in Apify Console. Each review has a stable `reviewId`, so you can de-duplicate across runs, or set **Only reviews newer than** to the date you want to start from. Connect Slack or Google Sheets to get new reviews delivered automatically.

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

Apple's public reviews feed provides up to **500 reviews per app per country** (10 pages of 50), sorted by most recent or most helpful. To collect more, add more countries, or schedule the Actor with **Only reviews newer than** to build a growing history over time.

#### Why is an app "not found" in some countries?

Apps can be unavailable in some storefronts. The Actor skips those countries, lists them in `RUN_SUMMARY`, and continues with the rest. If none of your apps are found anywhere, the run fails with a clear message so you don't pay for an empty run.

#### Can I get only negative reviews?

Yes. Set **Maximum star rating** to `2` to save only 1- and 2-star reviews.

#### Does it scrape Google Play?

No, this Actor covers the Apple App Store only.

#### Is it legal to scrape App Store reviews?

The Actor reads publicly available app metadata and reviews through Apple's public endpoints. It does not log in or bypass any protection. Reviewer nicknames are excluded by default. Make sure your use of the data complies with applicable laws, such as GDPR, and with Apple's terms.

#### Can I use it via API or with AI agents?

Yes. Run it via the [Apify API](https://docs.apify.com/api/v2), the Apify MCP server or the JavaScript and Python clients, and read the dataset. Records are flat JSON with stable field names.

#### I found a bug or need a feature

Open an issue in the **Issues** tab with a link to your run. We aim to reply within one business day.

### More tools from the same developer

| Actor                                                                                       | What it does                                                                       | Price                     |
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------- |
| [Career Site Jobs API](https://apify.com/magenta_waterwheel/career-site-jobs-api)           | Jobs from Greenhouse, Lever, Ashby and SmartRecruiters career sites, with salaries | $2 / 1,000 jobs           |
| [Website Screenshot & PDF API](https://apify.com/magenta_waterwheel/website-screenshot-pdf) | Full-page PNG/JPEG screenshots and web page to PDF in bulk                         | $2.50 / 1,000 screenshots |
| [Document & PDF to Markdown](https://apify.com/magenta_waterwheel/document-to-markdown)     | PDF, Word, PowerPoint, Excel and HTML to LLM-ready Markdown, with OCR              | $3 / 1,000 pages          |

# Actor input Schema

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

One app per line: App Store ID (284882215), App Store URL (https://apps.apple.com/us/app/facebook/id284882215) or bundle ID (com.facebook.Facebook).

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

Two-letter App Store country codes, for example us, gb, de, fr, jp, br, in. Each country is a separate storefront with its own reviews and ratings.

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

Output one record per app and country with name, developer, rating, rating count, price, version, release notes, description, screenshots and more.

## `includeReviews` (type: `boolean`):

Output customer reviews for each app and country.

## `maxReviewsPerCountry` (type: `integer`):

Maximum number of reviews to save for each app in each country. Apple's public reviews feed exposes up to 500 of the most recent (or most helpful) reviews per country.

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

Which reviews to fetch first.

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

Only save reviews with at least this many stars.

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

Only save reviews with at most this many stars. Set to 2 to collect only negative reviews.

## `reviewsNewerThan` (type: `string`):

Only save reviews posted on or after this date. Useful for scheduled monitoring runs.

## `includeReviewerName` (type: `boolean`):

Include the reviewer's public App Store nickname. Off by default to minimise personal data; turn on only if you have a legitimate need.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests to Apple. Keep it low to avoid rate limiting.

## `maxRequestRetries` (type: `integer`):

How many times to retry a request after rate limiting or a server error, with increasing back-off.

## Actor input object example

```json
{
  "apps": [
    "570060128",
    "com.spotify.client"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "includeAppDetails": true,
  "includeReviews": true,
  "maxReviewsPerCountry": 100,
  "sortBy": "mostrecent",
  "minRating": 1,
  "maxRating": 5,
  "includeReviewerName": false,
  "maxConcurrency": 5,
  "maxRequestRetries": 4
}
```

# Actor output Schema

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

No description

## `apps` (type: `string`):

No description

## `allRecords` (type: `string`):

No description

## `runSummary` (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 = {
    "apps": [
        "https://apps.apple.com/us/app/duolingo-language-lessons/id570060128",
        "324684580"
    ],
    "countries": [
        "us",
        "gb"
    ],
    "maxReviewsPerCountry": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("magenta_waterwheel/app-store-reviews-details").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/duolingo-language-lessons/id570060128",
        "324684580",
    ],
    "countries": [
        "us",
        "gb",
    ],
    "maxReviewsPerCountry": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("magenta_waterwheel/app-store-reviews-details").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/duolingo-language-lessons/id570060128",
    "324684580"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "maxReviewsPerCountry": 100
}' |
apify call magenta_waterwheel/app-store-reviews-details --silent --output-dataset

```

## MCP server setup

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

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/ghl6EjfvbgIOdwpEb/builds/Q5cgbvurtLRp7DyAl/openapi.json
