# App Store Reviews Scraper – Apple iOS Reviews, 150+ Countries (`dedicated_crest/app-store-reviews-scraper`) Actor

App Store reviews scraper for any iOS app: star rating, title, review text, author, app version and date from Apple's official reviews feed, 150+ countries. Filter by stars, date and keywords. App rating & details included. No login. $0.20/1,000.

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

## Pricing

$0.20 / 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 – Apple iOS Reviews, 150+ Countries

**Export Apple App Store reviews for any iOS app, in any country, for $0.20 per 1,000 reviews.** Give it App Store URLs, app IDs or just app names and get one row per review: star rating, title, full text, author, app version, date and helpful votes, plus the app's average rating, rating count, developer and genre.

- ✅ **Official source**: Apple's public customer-reviews feed and the iTunes Lookup/Search API
- ✅ **Multi-country in one run**: US, UK, DE, JP, BR… (150+ storefronts), most recent and/or most helpful
- ✅ **Filters before you pay**: star range, "only reviews since" date and keywords in title/text
- ✅ **No login, browser or proxy**. Pay per review saved, and it stops at your *Maximum cost per run*

**Try it now:** the input is pre-filled with Instagram (URL) and Duolingo (name only) in the US and UK stores, 50 reviews each. Click **Start**; the 200-review test run below took about 22 seconds.

### Real run results (18 Oct 2026)

Pre-filled input: Instagram + `duolingo`, countries `us` and `gb`, `maxReviewsPerApp: 50` (run `hZpL10OOjh1fMUAS3`, 22 seconds, 200 reviews from 4 app/country combinations). Two rows per combination:

| App | Store | Rating | Review title | Version | Date |
|---|---|---|---|---|---|
| Instagram | US | ★★★★★ | Disabled Instagram account | 451.0.0 | 2026-10-17 |
| Instagram | US | ★★★★★ | the best social networking | 451.0.0 | 2026-10-17 |
| Instagram | GB | ★★★★★ | Like a digital scrap book | 451.0.0 | 2026-10-17 |
| Instagram | GB | ★ | Suspended exile | 451.0.0 | 2026-10-16 |
| Duolingo: Learn Languages | US | ★★★★★ | 5/5 | 7.144.0 | 2026-10-17 |
| Duolingo: Learn Languages | US | ★ | Annoying streak freezes | 7.144.0 | 2026-10-17 |
| Duolingo: Language & Chess | GB | ★★★★★ | So good | 7.144.0 | 2026-10-17 |
| Duolingo: Language & Chess | GB | ★★★★★ | It’s so greatttt | 7.144.0 | 2026-10-17 |

### Use cases

- **Product managers & mobile teams**: find bugs, crashes and feature requests by version
- **Competitor & market research**: compare complaints and praise across rival apps and countries
- **ASO & app marketers**: track rating trends and review keywords
- **Customer-experience & VoC teams, agencies**: feed reviews into dashboards, sentiment and LLM analysis
- **AI agents & data pipelines**: clean, structured review data on a schedule

### Features

- 📱 Input **App Store URLs, numeric IDs, or app names** (names are resolved via Apple's search API)
- 🌍 **Multiple countries per run** (`us`, `gb`, `ca`, `au`, `de`, `fr`, `in`, `jp`, `br`, …). Every storefront has its own reviews.
- 🔀 **Most recent**, **most helpful**, or **both** (deduplicated), for up to ~1,000 unique reviews per app and country
- ⭐ Filter by **min/max stars** (e.g. only 1–2★ complaints), **date** (only new reviews since…), and **keywords** in title/text
- 🏷️ Optional **app details** on every row: name, developer, bundle ID, genre, average rating, rating count, current version, App Store link
- ♻️ Deduplication, retries and cache-busting for Apple's occasionally empty feed pages
- 💵 Stops cleanly at your **Maximum cost per run**

### How to use it

1. Click **Try for free**.
2. Add apps (URL, ID or name) and countries.
3. Optionally set star, date or keyword filters.
4. Run, then export to CSV/Excel/JSON, or schedule weekly with *Only reviews since* and send new reviews to Slack, Sheets or your BI tool.

### Input example

```json
{
  "apps": ["https://apps.apple.com/us/app/instagram/id389801252", "duolingo"],
  "countries": ["us", "gb", "ca"],
  "sort": "both",
  "maxRating": 2,
  "maxItems": 2000
}
```

### Output example

Real output:

```json
{
  "reviewId": "14673400607",
  "appId": "389801252",
  "appName": "Instagram",
  "country": "us",
  "rating": 1,
  "title": "Late bonus",
  "text": "I haven’t gotten my bonus going on 2 months. My payment has been on pending for 2 months and no one can help me after getting a hold of a few people still nothing",
  "author": "dakweather",
  "authorUrl": "https://itunes.apple.com/us/reviews/id1321175659",
  "appVersion": "451.0.0",
  "date": "2026-10-16T13:14:57.000Z",
  "voteSum": 0,
  "voteCount": 0,
  "sortedBy": "mostrecent",
  "developer": "Instagram, Inc.",
  "bundleId": "com.burbn.instagram",
  "genre": "Photo & Video",
  "appAverageRating": 4.69067,
  "appRatingCount": 29605007,
  "appCurrentVersion": "451.0.0",
  "appUrl": "https://apps.apple.com/us/app/instagram/id389801252",
  "scrapedAt": "2026-10-17T17:28:05.695Z"
}
```

### Pricing

**Pay per event: $0.0002 per review** (**$0.20 per 1,000 reviews**), no start fee. App lookups and filtered-out reviews are free. Set a *Maximum cost per run* and the Actor stops cleanly when it's reached.

How that compares with other App Store review Actors on the Apify Store (free-tier list prices from the Store API, checked 18 Oct 2026):

| Actor | Price per 1,000 reviews | Start fee |
|---|---|---|
| **This Actor** | **$0.20** | none |
| App Store Reviews Scraper API (thewolves) | $0.10 | none |
| Fast App Store Reviews Scraper API (theagents) | $0.10 | none |
| App Reviews Scraper, Google Play & App Store (code-node-tools) | $0.50 | $0.00005 |
| Apple App Store Reviews API (johnvc) | $1.44 | $0.00005 |
| Apple App Store: Reviews, Apps, Charts & IAPs (sourabhbgp) | $2.00 | none |

A couple of Actors are cheaper per review. This one includes the app's rating, rating count, developer and genre on every row, and filters by stars, date and keyword before charging, so you pay only for the reviews you keep.

### Limits

Apple's public feed exposes up to 500 reviews per app, country and sort order (10 pages × 50), so the newest/most helpful ~1,000 per country. To collect more, add more countries, or schedule regular runs with *Only reviews since* to build a complete history over time.

### FAQ

**Is this legal?** The Actor reads Apple's publicly offered customer-reviews RSS feed and the public iTunes Search/Lookup API. No login, no private data. Use the data in line with Apple's terms and applicable privacy laws.

**Google Play?** Not included. Google Play has no official public reviews API without developer access to your own app.

**Is it affiliated with Apple?** No. This Actor is independent and not endorsed by Apple Inc.

**How do I find an app's ID?** It's the number after `id` in the App Store URL (e.g. `389801252` in `apps.apple.com/us/app/instagram/id389801252`). You can also just type the app name.

**Can I get only 1- and 2-star reviews?** Yes. Set `maxRating: 2` (and optionally `minRating: 1`). Filtered-out reviews are not charged.

**How do I monitor new reviews?** Schedule a daily run with *Only reviews since* set to a recent date and send results to Slack, Google Sheets or a webhook.

**How many reviews can I get?** Apple's public feed exposes up to 500 reviews per app, country and sort order. Add countries or use both sort orders to collect more; see *Limits* above.

### Related tools

Other Actors by the same developer that work well with this one:

- [GDELT News Scraper](https://apify.com/dedicated_crest/gdelt-news-monitor): add worldwide news coverage to your brand or competitor monitoring
- [Career Site Jobs API](https://apify.com/dedicated_crest/ats-career-jobs-scraper): see which roles an app company is hiring for
- [Bulk WHOIS & DNS Lookup](https://apify.com/dedicated_crest/domain-whois-dns-intel): tech stack and email setup of an app developer's website

# Actor input Schema

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

App Store URLs (https://apps.apple.com/us/app/instagram/id389801252), numeric app IDs (389801252) or app names to search (best match is used).

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

Two-letter App Store country codes. Reviews are per country, e.g. us, gb, ca, au, de, fr, in, jp, br.

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

Apple's feed returns up to 500 reviews per app, country and sort order. 'Both' combines the two lists (deduplicated).

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

Cap per app per country.

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

e.g. 1

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

e.g. 2 to collect only negative reviews

## `sinceDate` (type: `string`):

Skip reviews older than this date (great for scheduled runs).

## `keywords` (type: `array`):

Keep reviews whose title or text contains any of these, e.g. crash, login, price.

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

Add app name, developer, bundle ID, genre, overall rating & rating count, current version (1 lookup per app/country).

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

Stop after this many reviews. The run also stops cleanly when your Maximum cost per run is reached.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/instagram/id389801252",
    "duolingo"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "sort": "mostrecent",
  "maxReviewsPerApp": 50,
  "includeAppDetails": true,
  "maxItems": 1000
}
```

# Actor output Schema

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

Reviews with rating, title, text, author, app version, date, country and app details.

## `summary` (type: `string`):

Resolved app IDs and number of reviews saved per app and country.

# 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/instagram/id389801252",
        "duolingo"
    ],
    "countries": [
        "us",
        "gb"
    ],
    "maxReviewsPerApp": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("dedicated_crest/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": [
        "https://apps.apple.com/us/app/instagram/id389801252",
        "duolingo",
    ],
    "countries": [
        "us",
        "gb",
    ],
    "maxReviewsPerApp": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("dedicated_crest/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": [
    "https://apps.apple.com/us/app/instagram/id389801252",
    "duolingo"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "maxReviewsPerApp": 50
}' |
apify call dedicated_crest/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

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