# App Store Reviews Scraper - Apple iOS App Reviews & Ratings (`atlasdata/app-store-reviews-scraper-reliable`) Actor

App Store reviews scraper: Apple App Store reviews and app details for any iPhone/iPad app in any storefront. Paste App Store URLs, app ids, bundle ids or app names; filter by stars and date; get rating, title, text, version, author and date. $0.10 per 1,000 reviews.

- **URL**: https://apify.com/atlasdata/app-store-reviews-scraper-reliable.md
- **Developed by:** [Christian Machon](https://apify.com/atlasdata) (community)
- **Categories:** E-commerce, Marketing, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 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.

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 - Apple iOS App Reviews & Ratings

**App Store reviews scraper and API: Apple App Store reviews and app ratings for any iPhone and iPad app, in any App Store country. $0.10 per 1,000 reviews.**

Paste App Store URLs, numeric app ids, bundle ids (like `com.spotify.client`) or just app names. You get one clean row per review (star rating, title, text, app version, date, helpful votes) plus an optional app details record per country (average rating, total ratings, version, release notes, price, developer, genres). Filter by star rating and date so you only pay for the reviews you need.

**Tested before release: 25/25 test runs on the release build behaved as expected** (24 data runs succeeded across 30+ countries, URL/id/bundle-id/name inputs, star and date filters, both sort orders, app-details-only mode and a max-charge stop; 1 invalid-input run was correctly rejected with a clear error). Median run time 8 s. **77/77 data runs succeeded across all test rounds.**

### Who it's for and use cases

- **Product and app teams** - read every 1- and 2-star review after a release, per version and per country.
- **ASO and app marketers** - track average rating and rating count across 20+ storefronts in one run.
- **Competitor research** - pull reviews of rival apps and find the features users ask for.
- **Market and UX research** - feed review text into sentiment analysis, topic models or an LLM.
- **Agencies and analysts** - monitor client apps on a schedule and export to Sheets, BI tools or a webhook.
- **AI agents and automations** - call it from Make, Zapier, n8n, LangChain or Apify's MCP server and get flat JSON back.

### Why this App Store reviews scraper?

| | This Actor |
|---|---|
| Inputs | App Store URLs, app ids, bundle ids **and** app names (Apple search) in one run |
| Countries | Any App Store storefront (us, gb, de, fr, jp, br, in...), up to 60 per run, with the country from the URL used automatically |
| Filters | Star rating (e.g. only 1-2 stars) and "reviewed after" date (absolute or "30 days"). Filtered-out reviews are **not charged** |
| Sort | Most recent, most helpful, or both (deduplicated, up to 1,000 unique reviews per app and country) |
| App details | Average rating, rating count (all versions and current version), version, release notes, price and currency, developer, genres, size, languages |
| Honest status | Every app and country gets a status (`SUCCEEDED`, `PARTIAL`, `NO_DATA`, `FAILED`, `SKIPPED`) and a note explaining why, in the `OUTPUT` record |
| Privacy | Reviewer nicknames are **off by default** (data minimisation); turn them on if you need them |
| No browser | Uses Apple's public JSON endpoints, so runs are fast (most finish in 3-40 s) and cheap |

### How to use it

1. Add one or more apps under **Apps** (URL, id or bundle id), or type app names under **Or find apps by name**.
2. Pick the **countries**. Each App Store country has its own reviews.
3. Set **Max reviews per app and country** (default 100; 0 = everything Apple returns).
4. Optional: choose star ratings, a date limit, the sort order, or turn off reviews to get app details only.
5. Click **Start** and download the results as JSON, CSV, Excel or via the API.

### Input example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.burbn.instagram",
    "310633997"
  ],
  "searchTerms": [
    "duolingo"
  ],
  "countries": [
    "us",
    "gb",
    "de"
  ],
  "maxReviewsPerApp": 200,
  "sort": "mostRecent",
  "ratings": [
    "1",
    "2"
  ],
  "reviewedAfter": "30 days",
  "includeAppDetails": true,
  "includeAuthor": false
}
```

### Output example

Review record (from a real run):

```json
{
  "type": "review",
  "appId": "324684580",
  "appName": "Spotify: Music and Podcasts",
  "bundleId": "com.spotify.client",
  "country": "us",
  "reviewId": "14718720584",
  "rating": 5,
  "title": "review",
  "text": "needs less ads",
  "appVersion": "9.1.94",
  "date": "2026-10-27T18:27:46.000Z",
  "authorName": null,
  "authorId": null,
  "authorUrl": null,
  "voteSum": 0,
  "voteCount": 0,
  "sort": "mostRecent",
  "appUrl": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
  "scrapedAt": "2026-10-29T04:18:02.905Z"
}
```

App details record (`type: "app"`, one per app and country; long values shortened here):

```json
{
  "type": "app",
  "appId": "324684580",
  "appName": "Spotify: Music and Podcasts",
  "bundleId": "com.spotify.client",
  "country": "us",
  "developer": "Spotify",
  "developerId": "324684583",
  "developerUrl": "https://apps.apple.com/us/developer/spotify/id324684583?uo=4",
  "sellerName": "Spotify",
  "sellerUrl": "https://www.spotify.com/",
  "price": 0,
  "currency": "USD",
  "formattedPrice": "Free",
  "averageRating": 4.77041,
  "ratingCount": 42818178,
  "averageRatingCurrentVersion": 4.77041,
  "ratingCountCurrentVersion": 42818178,
  "version": "9.1.94",
  "currentVersionReleaseDate": "2026-10-23T17:59:53Z",
  "releaseDate": "2011-07-14T11:22:37Z",
  "releaseNotes": "We’re always making changes and improvements to Spotify. To make sure you don’t miss a thing, just keep your Updates tur...",
  "primaryGenre": "Music",
  "genres": [
    "Music",
    "Entertainment"
  ],
  "contentRating": "12+",
  "minimumOsVersion": "16.1",
  "fileSizeBytes": 325112832,
  "languages": [
    "AF",
    "AM",
    "AR",
    "AZ",
    "EU",
    "..."
  ],
  "description": "With the Spotify app, you can explore an extensive library of music and podcasts for free. Curate the best playlists and...",
  "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/8b/f2/6a/8bf26ab9-3ced-cb5c-a2b3-19f65e7f5cc6/AppIcon-0-0-1x_U007epad-0-1-0-0-85-220.png/512x512bb.jpg",
  "screenshotUrls": [
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/f3/ce/05/f3ce0547-690a-b355-b1dd-6b6e91808279/IOS_-_5.5_-_S01_-_EN_-_CA_U005bEnglish__U0028Canada_U0029_U005d.png/392x696bb.png",
    "..."
  ],
  "appUrl": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
  "scrapedAt": "2026-10-29T04:18:02.905Z"
}
```

The dataset has two views: **Reviews** and **App details**. Filter on the `type` field (`review` or `app`) when you use the API.

#### Run summary

Every run writes a summary to the key-value store record **`OUTPUT`**: one entry per app and country with `status`, number of reviews, pages read, notes (for example "not sold in this country") and errors, plus network statistics. Pipelines and agents can tell "no reviews" apart from "something went wrong" without guessing.

### Pricing

Simple **pay per event** pricing - you pay only for what you get:

| Event | Price | When |
|---|---|---|
| Run start (`apify-actor-start`) | **$0.00005** per run (per GB of memory, default 256 MB = 1 event) | Once when the run starts |
| Review (`review`) | **$0.0001** per review (**$0.10 per 1,000**) | Each unique review saved. Reviews removed by your filters and duplicates are not charged |
| App details (`app-details`) | **$0.0005** per record | One per app and country, only if "Add an app details record" is on |

Examples: 100 reviews of one app = **$0.010**; 500 reviews in 5 countries = **$0.053**; app details only for 1 app in 10 countries = **$0.005**. Set a *maximum cost per run* in the run options and the Actor stops cleanly when it is reached (the remaining apps are marked `SKIPPED`).

### Use it from AI agents (MCP)

Agents that use the Apify MCP server can find this Actor with `search-actors` and run it with `call-actor` using the name **`atlasdata/app-store-reviews-scraper-reliable`**. Results are flat, typed JSON with a documented schema, and the `OUTPUT` summary tells the agent what was found and why something is missing.

### FAQ

**How many reviews can I get per app?**
Apple's public review feed returns at most **500 reviews per app, country and sort order** (10 pages of 50). With `sort: both` you get up to 1,000 unique reviews (most recent + most helpful). Run several countries to get more. This Actor does not get around that limit, and we would rather tell you than pretend.

**Does it scrape Google Play?**
No, Apple App Store only (iPhone, iPad, Apple TV apps listed in the App Store).

**Why are there no reviews for an app in some country?**
Reviews are per country. Small apps often have no written reviews outside their home market, and some apps are not sold everywhere. You get `NO_DATA` with a note, and no review charges.

**Do I need a proxy?**
No setup needed. The Apify datacenter proxy (included) is on by default. Apple's feed occasionally returns an empty page from some IP addresses; the Actor retries with a new IP and marks the result `PARTIAL` if a page still could not be read. If you turn the proxy off, this is more likely.

**Is the review text translated?**
No. You get the original text as written in that storefront.

**Is this legal?**
The Actor reads public data from Apple's public endpoints. Reviewer nicknames are personal data, so they are off by default. If you turn them on, you are responsible for processing them lawfully (for example under the GDPR). Check Apple's terms for your use case.

### Limits

- Up to 500 reviews per app, country and sort order (Apple's limit); up to 200 apps, 50 search terms and 60 countries per run.
- Ratings without text are not in Apple's feed, so `ratingCount` in the app record is usually much higher than the number of reviews you can download.
- Review dates are the last time the review was edited (Apple's `updated` field), converted to UTC.
- Search uses Apple's search API in the first country you list and returns the top matches, which may differ from the App Store app.

### Related atlasdata actors

**Ad library scrapers (competitor ad tracking)**

- [Google Ads Transparency Scraper & Ad Library API](https://apify.com/atlasdata/google-ads-transparency-scraper-reliable)
- [TikTok Ads Library Scraper & TikTok Ads API](https://apify.com/atlasdata/tiktok-ad-library-scraper-reliable)
- [Facebook Ads Library Scraper & Meta Ads API](https://apify.com/atlasdata/facebook-ad-library-scraper-reliable)
- [LinkedIn Ads Library Scraper & API](https://apify.com/atlasdata/linkedin-ad-library-scraper-reliable)

**Job data scrapers**

- [Indeed Jobs Scraper & API - 60 Countries](https://apify.com/atlasdata/indeed-jobs-scraper-reliable)
- [Google Jobs Scraper & API - Salary & Apply Links](https://apify.com/atlasdata/google-jobs-scraper-reliable)
- [Glassdoor Jobs Scraper & API - Salaries & Ratings](https://apify.com/atlasdata/glassdoor-jobs-scraper-reliable)

**Search and SEO**

- [Google Trends Scraper & API - No 429 Errors](https://apify.com/atlasdata/google-trends-scraper-reliable)

# Actor input Schema

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

App Store URLs (https://apps.apple.com/us/app/name/id123456789), numeric app ids (324684580) or bundle ids (com.spotify.client). One per line.

## `searchTerms` (type: `array`):

App names or keywords, looked up with Apple's search in the first country below. The top results are added to the apps list.

## `maxAppsPerSearch` (type: `integer`):

How many of the top search results to scrape for each search term.

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

2-letter country codes, e.g. us, gb, de, fr, dk, jp. Each storefront has its own reviews. If empty, the country in the app URL is used, otherwise us.

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

Stop after this many reviews for each app in each country. 0 = everything Apple's feed returns (up to 500 per sort order).

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

Most recent reviews, most helpful reviews, or both (up to 1,000 unique reviews per app and country).

## `ratings` (type: `array`):

Keep only reviews with these star ratings, e.g. 1 and 2 for complaints. Empty = all ratings. Only kept reviews are charged.

## `reviewedAfter` (type: `string`):

A date (2026-01-31) or relative period (7 days, 4 weeks, 3 months). Older reviews are skipped and not charged.

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

Turn off to get only app details (ratings count, average rating, version, price, genre...).

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

One record per app and country with average rating, rating count, version, release notes, price, developer, genres and more.

## `includeAuthor` (type: `boolean`):

Off by default (data minimisation). Turn on to add the reviewer's App Store nickname and profile link. You are responsible for handling this personal data lawfully (e.g. GDPR).

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

Apify datacenter proxy is used by default and is enough for Apple. The last retry always goes direct.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
  ],
  "maxAppsPerSearch": 1,
  "countries": [
    "us"
  ],
  "maxReviewsPerApp": 100,
  "sort": "mostRecent",
  "includeReviews": true,
  "includeAppDetails": true,
  "includeAuthor": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

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

No description

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

No description

## `summary` (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/spotify-music-and-podcasts/id324684580"
    ],
    "countries": [
        "us"
    ],
    "maxReviewsPerApp": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("atlasdata/app-store-reviews-scraper-reliable").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/spotify-music-and-podcasts/id324684580"],
    "countries": ["us"],
    "maxReviewsPerApp": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("atlasdata/app-store-reviews-scraper-reliable").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/spotify-music-and-podcasts/id324684580"
  ],
  "countries": [
    "us"
  ],
  "maxReviewsPerApp": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call atlasdata/app-store-reviews-scraper-reliable --silent --output-dataset

```

## MCP server setup

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

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/XHY2fdNpOH40IPbz0/builds/A9WOBtynS1Itf7mhd/openapi.json
