# App Store Reviews Scraper (`originalvi/app-store-reviews-scraper`) Actor

Scrape iOS App Store reviews and app details for any app by id, URL, or name — ratings, review text, version, helpful votes, across 20+ countries.

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

## Pricing

from $1.00 / 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/platform/actors/running/actors-in-store#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

## App Store Reviews Scraper — iOS reviews & ratings across 20+ countries

Pull **iOS App Store reviews** and **app details** for any app — by numeric id, App Store URL, or just the app's name. Get real user ratings, review titles and text, the app version each review was left on, helpful-vote counts, and full app metadata, across **20+ country stores**.

No login, no API key. Fast and reliable — reads Apple's own public feeds.

### What you get

One dataset item per review:

```json
{
  "appId": "570060128",
  "appName": "Duolingo - Language Lessons",
  "reviewId": "14278057385",
  "userName": "Maddox hodge",
  "rating": 5,
  "title": "Best app in the world",
  "review": "I got super premium with my mom but I wish that there were more languages…",
  "appVersion": "9.1.62",
  "helpfulVotes": 4,
  "totalVotes": 5,
  "updatedAt": "2026-07-08T06:38:10-07:00",
  "reviewUrl": "https://itunes.apple.com/us/review?id=570060128&type=Purple",
  "country": "us",
  "status": "SUCCEEDED"
}
```

Plus (optional) one `APP_DETAILS` item per app:

```json
{
  "type": "APP_DETAILS",
  "appId": "570060128",
  "appName": "Duolingo - Language Lessons",
  "developer": "Duolingo, Inc.",
  "averageUserRating": 4.7,
  "userRatingCount": 1723004,
  "version": "9.1.62",
  "currentVersionReleaseDate": "2026-07-01T00:00:00Z",
  "primaryGenre": "Education",
  "price": 0,
  "formattedPrice": "Free",
  "appUrl": "https://apps.apple.com/us/app/duolingo/id570060128",
  "iconUrl": "https://.../512x512.png"
}
```

### How to scrape App Store reviews

1. Paste **app ids or App Store URLs** — or just type app **names** and let the Actor find them.
2. Pick the **country store** (reviews are country-specific) and how many reviews you want.
3. Sort by **most recent** or **most helpful**.
4. Click **Start** and export as JSON, CSV, or Excel — or pull via API.

### Input

| Field | Description |
|---|---|
| `appIds` | App Store ids or URLs, one per line (e.g. `570060128` or the full `apps.apple.com/...` link) |
| `searchTerms` | Or just app names — the Actor finds the matching app for you |
| `maxAppsPerSearchTerm` | Top N matching apps per search term (default 1) |
| `country` | Which country's App Store to read (default US) — reviews are country-specific |
| `maxReviewsPerApp` | Cap per app (default 200, up to ~500 available) |
| `sortBy` | Most recent or most helpful |
| `includeAppDetails` | Add the per-app metadata item (default on) |
| `proxyConfiguration` | Apify Proxy settings (defaults are fine) |

### Pricing

You pay a small fee **per review delivered** — $1.00 per 1,000 reviews plus a few cents of platform usage. App-detail items and apps with no reviews are free. No subscriptions, no minimums.

### Use cases

- **App developers** — monitor your own reviews and triage bugs by app version; catch a broken release within hours.
- **Competitor research** — see what users love and hate about rival apps before building your roadmap.
- **ASO & marketing agencies** — track sentiment and rating trends for client apps across countries.
- **Product & UX teams** — mine feature requests and complaints at scale, feed them into your backlog automatically.
- **LLM sentiment analysis** — reviews drop straight into a prompt; classify complaints, cluster feature requests, summarize churn reasons.

### Run it from your own code

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("originalvi/app-store-reviews-scraper").call(run_input={
    "searchTerms": ["Duolingo"],
    "country": "us",
    "maxReviewsPerApp": 300,
    "sortBy": "mostRecent",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item.get("rating"):
        print(item["rating"], "★", item["title"])
```

Works the same with the JavaScript `apify-client`, raw HTTP API, or no-code tools (Make, Zapier, n8n).

### FAQ

**How many reviews can I get per app?**
Apple's public feed exposes roughly the **500 most recent reviews per country**. Run the same app across several `country` stores to multiply coverage — an app popular in 10 countries yields up to ~5,000 recent reviews.

**Can I get reviews from the UK / German / Japanese store?**
Yes — set `country` per run. Reviews are fully separate per country store.

**Do I need the app's numeric id?**
No. Put the app's name in `searchTerms` and the Actor resolves it via Apple's search. Use `maxAppsPerSearchTerm` to pull several matching apps at once (e.g. every "meditation" app).

**Does this include Google Play reviews?**
No — iOS App Store only, which keeps it fast and reliable.

**Is this allowed?**
The Actor reads Apple's own public RSS/JSON feeds — the same data visible on any app's store page. Reviewer names are public usernames chosen by the reviewers.

**Can I monitor reviews automatically?**
Yes — schedule the Actor daily with `sortBy: mostRecent`, then diff by `reviewId` or wire a webhook to Slack. Each run costs only what it returns.

### More Actors by this developer

- [Google Trends Explorer](https://apify.com/originalvi/google-trends-explorer) — is interest in your app's niche rising or fading?
- [Google News Scraper](https://apify.com/originalvi/google-news-scraper) — press coverage for any app or company
- [Hacker News Scraper](https://apify.com/originalvi/hacker-news-scraper) — what developers are saying
- [eBay Sold Listings Scraper](https://apify.com/originalvi/ebay-sold-listings) — real sold prices + price statistics
- [Website Screenshot Pro](https://apify.com/originalvi/website-screenshot-pro) — pixel-perfect full-page screenshots

### Found a problem?

Open an issue on the **Issues** tab and I'll fix it fast — usually within a day.

# Actor input Schema

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

One per line. Accepts a numeric App Store id (e.g. `324684580`), an `id324684580` string, or a full App Store URL (e.g. `https://apps.apple.com/us/app/duolingo/id570060128`).

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

Don't know the id? Enter app names and the actor finds the matching app(s) automatically.

## `maxAppsPerSearchTerm` (type: `integer`):

How many top-matching apps to scrape for each search term above.

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

Which country's App Store to read reviews from. Reviews are country-specific.

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

Upper limit of reviews per app. Apple exposes at most ~500 recent reviews per country via the public feed.

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

Most recent, or most helpful (highest voted).

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

Push one APP\_DETAILS item per app (rating, rating count, version, developer, description, icon, screenshots).

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

Proxies to use. The default Apify Proxy works well for the App Store API — you rarely need to change this.

## Actor input object example

```json
{
  "appIds": [
    "https://apps.apple.com/us/app/duolingo/id570060128"
  ],
  "maxAppsPerSearchTerm": 1,
  "country": "us",
  "maxReviewsPerApp": 200,
  "sortBy": "mostRecent",
  "includeAppDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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": [
        "https://apps.apple.com/us/app/duolingo/id570060128"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("originalvi/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": ["https://apps.apple.com/us/app/duolingo/id570060128"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("originalvi/app-store-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "https://apps.apple.com/us/app/duolingo/id570060128"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call originalvi/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=originalvi/app-store-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/EKTIYjJ8qyx6jjXlG/builds/GIKQiUGO0Au3dhKFZ/openapi.json
