# App Store Reviews Scraper: Ratings, Dev Replies, Multi-Country (`redfoxscout/app-store-reviews-scraper`) Actor

Scrape Apple App Store reviews for any iOS app by App Store ID or URL, from one or many country storefronts. Output rating, title, text, date, reviewer name and developer reply. Filter by date and stars before billing. Pay per review: $0.20 per 1,000.

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

## Pricing

from $0.15 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

Scrape **Apple App Store reviews** for any iOS app: **rating, title, text, date, reviewer name and developer reply**, from one or many App Store countries. It reads well past the 500 reviews the old RSS feed showed, newest first, with a **stop date** and **star filters**. **No login, no Apple account and no API keys.**

**Price: $0.20 per 1,000 reviews.** Failed apps and error rows are free. Apify's free plan ($5 monthly credit) covers about 25,000 reviews a month.

![App Store Reviews Scraper output for Spotify and Things 3 (US): 20 newest reviews each, with ratings, dates and developer replies](https://raw.githubusercontent.com/TikTop-Data/apify-store-assets/main/images/app-store-reviews-scraper-output.png)

### Questions it answers

- What are users saying about my app this week, and what do the 1 and 2-star reviews complain about?
- Which complaints get a developer reply, and what did the developer say?
- How does an app's reception differ between the US, UK and German App Stores?
- Which reviews were posted since a launch or an update date?

### Who uses this

- 📱 **App developers:** follow reviews and replies for your own app, country by country.
- 🧭 **Product and support teams:** group recurring complaints from low-star reviews.
- 📊 **Market researchers:** compare how one app is rated across storefronts.
- 🔎 **Competitive analysts:** put rival apps' ratings and reply habits side by side.

### Why this App Store Reviews Scraper

- 📜 **Deep paging:** pulls reviews far past the old 500-review limit. One test run returned 5,000 reviews for Spotify in the US.
- 💬 **Developer replies:** the reply text and date sit next to each review.
- 🌍 **Many storefronts:** one or many App Store countries per run.
- ⭐ **Star filter:** keep only the stars you choose, such as 1 and 2.
- 🛑 **Newest first with a stop date:** the run stops at the first review older than your date.
- 🧾 **Only what you pay for:** reviews removed by your filters are not billed.
- 🛡️ **Personal data removed:** email addresses and phone numbers in review text are replaced.

### How to use the App Store Reviews Scraper

1. Click **Try for free** (a free Apify account is enough).
2. Enter App Store IDs or app links, one per line (`324684580` or `https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580`).
3. Optional: choose countries, star ratings, a stop date and the sort order.
4. Set the maximum reviews per app and country, click **Start**, then download as JSON, CSV or Excel, or schedule the run.

### Input

| Field | Default | What it does |
|---|---|---|
| `apps` | – | App Store IDs or app links, one per line. |
| `countries` | `us` | Two-letter storefront codes, one per line (`us`, `gb`, `de`). Leave empty to use the country in an app link. |
| `sort` | Newest first | Newest first, or Apple's default order. The stop date needs newest first. |
| `ratings` | All stars | Keep only these star ratings, e.g. 1 and 2. |
| `postedAfter` | – | Keep reviews posted on or after this date. The run stops at the first older review. |
| `maxItems` | 100 | Reviews per app and country (max 20,000). |

Example (the input behind the output row below):

```json
{ "apps": ["324684580", "904237743"], "countries": ["us"], "maxItems": 20 }
```

### Output

One row per review. A real row from that run (text and reviewer name shortened):

```json
{
  "reviewId": "14532007047",
  "appId": "904237743",
  "appName": "Things 3",
  "developer": "Cultured Code GmbH & Co. KG",
  "country": "us",
  "rating": 5,
  "title": "Still the best",
  "text": "How doesn’t everyone own this?  I have been using this app for as long as...",
  "date": "2026-09-10T06:26:53Z",
  "isEdited": true,
  "userName": "J...",
  "developerResponse": "We're glad to hear you're enjoying Things 3!",
  "developerResponseDate": "2019-11-15T10:54:21Z",
  "appUrl": "https://apps.apple.com/us/app/id904237743",
  "searchQuery": "904237743 (US)"
}
```

Reviews without a reply have `developerResponse` and `developerResponseDate` set to null. Apple gives only a reply date, not when the reply was written. In a 5,000-review test, 71 replies were dated before their review, and all 71 were on edited reviews (`isEdited` true), because the review date moves when a review is edited.

### Example tasks

Ready-made inputs you can open, change and run:

- [Pull the latest 1-star Duolingo reviews from the US](https://apify.com/redfoxscout/app-store-reviews-scraper/examples/app-store-duolingo-us-one-star-reviews)

### Filters and storefronts

#### Filter before billing

Only reviews that match your star ratings and stop date are returned, and only returned reviews are billed. A star filter scans at most the greater of 2,000 and 20 times `maxItems` reviews per app and country. If that scan ends before your limit is reached, the run stops and the log says so.

#### Any App Store country

Enter one or many two-letter codes. Storefronts tested: us, gb, de and jp. An app that is not sold in a country gives one free error row that names the app and the country.

### How much does it cost?

$0.20 per 1,000 reviews.

- 100 reviews: about $0.02
- 10,000 reviews: about $2
- Failed apps, error rows and reviews removed by your filters: free

Apify's free plan gives $5 of credit every month, enough for about 25,000 reviews.

### FAQ

**Is this legal?** It reads reviews that Apple shows to anyone on public App Store pages. It needs no Apple account, no login and no cookies, and it reads no private data. Reviewer names are the public nicknames shown on the store, and email addresses and phone numbers written in review text are replaced. Review text belongs to its author, so check the rules that apply before you republish it.

**How many reviews can I get?** Up to 20,000 per app and country per run. In our test, one run read 5,000 reviews for Spotify in the US in about 8 minutes, with no rate-limit errors. We have not tested runs at the 20,000 limit. Apple keeps far more reviews for large apps: our estimate for Spotify in the US is about 124,000 (2026-10-08). A run stops when Apple has no more.

**Why is there no app version?** Apple's reviews data and the App Store page do not include the app version a reviewer used. We checked seven apps and found no version field in either, so this Actor cannot return one.

**Why does a run stop early?** A run stops when it reaches your maximum, passes your stop date (newest first), reaches the end of Apple's list, or hits the star-filter scan limit. If Apple keeps refusing requests after retries, the run ends with an error message and keeps the rows it already has.

### Related Actors

- [Company Social Links Finder](https://apify.com/redfoxscout/company-social-links): an app developer's official social profiles, plus its contact, careers and pricing pages, from its website.
- [RSS Feed Finder](https://apify.com/redfoxscout/rss-feed-finder): the RSS and Atom feeds of a developer's blog or release notes, so you can follow its updates.

# Actor input Schema

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

App Store IDs or app URLs, one per line, e.g. 324684580 or https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580.

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

Two-letter App Store country codes, one per line, e.g. us, gb or de; leave empty to use the country in an app URL, otherwise us.

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

Newest first lets the date filter stop the run early, e.g. for a daily watch; Apple's default order is not sorted by date.

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

Keep only reviews with these stars, e.g. 1 and 2 for complaints; leave empty for all ratings.

## `postedAfter` (type: `string`):

Keep only reviews posted on or after this date, e.g. 2026-09-01.

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

Stop each search after this many results.

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

How many searches run at once.

## Actor input object example

```json
{
  "apps": [
    "324684580"
  ],
  "countries": [
    "us"
  ],
  "sort": "recent",
  "maxItems": 100,
  "maxConcurrency": 3
}
```

# Actor output Schema

## `results` (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": [
        "324684580"
    ],
    "countries": [
        "us"
    ]
};

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

# Run the Actor and wait for it to finish
run = client.actor("redfoxscout/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": [
    "324684580"
  ],
  "countries": [
    "us"
  ]
}' |
apify call redfoxscout/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

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