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

Export Apple App Store and Google Play user reviews as clean, normalized JSON — rating, title, text, author, date, app version and helpful votes — for any list of apps.

- **URL**: https://apify.com/receptional\_blender/app-store-reviews.md
- **Developed by:** [Assia Fadli](https://apify.com/receptional_blender) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

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

Export **user reviews** from the **Apple App Store** and **Google Play** as clean, normalized JSON — in a single run, for any list of apps. Every review comes back with the same flat shape (rating, title, text, author, date, app version, helpful votes and a sentiment hint), so results drop straight into a spreadsheet, database or BI tool.

Great for **release monitoring** (catch regressions after an update), **competitor tracking**, **voice-of-customer** research and **support triage**. Run it on a schedule to turn review streams into a living dataset.

- **App Store** reviews come from Apple's public **RSS customer-reviews JSON** feed — no API key, capped at ~500 reviews per app (10 pages), always most-recent.
- **Google Play** reviews are fetched with [`google-play-scraper`](https://www.npmjs.com/package/google-play-scraper) and paginate beyond that.
- **No LLM key, no proxy, no login required.**

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `appStoreAppIds` | array of strings | `[]` | Numeric Apple iTunes app IDs, e.g. `"310633997"`. Aliased as `iosAppIds`. |
| `googlePlayAppIds` | array of strings | `[]` | Google Play package names, e.g. `"com.whatsapp"`. Aliased as `androidAppIds`. |
| `country` | string | `"us"` | Two-letter country / storefront code (aliased as `countryCode`). |
| `lang` | string | `"en"` | Two-letter language code for Google Play (aliased as `language`). |
| `maxReviewsPerApp` | integer | `200` | Max reviews per app (aliased as `maxReviews`). App Store RSS is limited to ~500. |
| `sort` | enum | `"newest"` | `newest`, `rating`, or `helpful` (`helpful` = Google Play only; App Store is always most-recent). |

Provide at least one of `appStoreAppIds` or `googlePlayAppIds`. Original field names from compatible actors are accepted, so existing input configs keep working.

#### Example input

```json
{
    "appStoreAppIds": ["310633997"],
    "googlePlayAppIds": ["com.whatsapp"],
    "country": "us",
    "lang": "en",
    "maxReviewsPerApp": 200,
    "sort": "newest"
}
```

### Output

Each dataset item is one review (`recordType: "review"`):

```json
{
    "recordType": "review",
    "store": "app_store",
    "appId": "310633997",
    "appName": "WhatsApp Messenger",
    "reviewId": "1234567890",
    "userName": "Jane Doe",
    "rating": 5,
    "title": "Works great",
    "text": "Love the new update!",
    "date": "2026-07-10T12:34:56.000Z",
    "thumbsUp": 3,
    "version": "2.26.1",
    "url": "https://apps.apple.com/us/review?id=...",
    "sentiment": "positive"
}
```

| Field | Description |
|-------|-------------|
| `recordType` | Always `"review"`. |
| `store` | `"app_store"` or `"google_play"`. |
| `appId` | The app id you supplied. |
| `appName` | Resolved human-readable app title. |
| `reviewId` | Stable review id (or `null`). |
| `userName` | Review author display name (or `null`). |
| `rating` | Star rating `1`–`5` (or `null`). |
| `title` | Review title (or `null`; App Store only). |
| `text` | Review body (or `null`). |
| `date` | ISO 8601 timestamp (or `null`). |
| `thumbsUp` | Helpful / vote count (`0` when unavailable). |
| `version` | App version reviewed (or `null`). |
| `url` | Link to the review (or `null`). |
| `sentiment` | Heuristic: `positive` (rating ≥ 4), `negative` (≤ 2), else `neutral`. |

### Pricing (pay-per-event)

This actor uses the **pay-per-event** model with a single event, **`review-scraped`**, charged once per review delivered to the dataset. You only pay for reviews you actually receive — apps that return no reviews or fail to load cost nothing.

### Notes & limitations

- Apple's RSS feed returns at most ~500 reviews per app (10 pages) and always sorts by most recent; the `sort` option only affects Google Play.
- `thumbsUp` for App Store reviews reflects the RSS vote count and may be `0` when unavailable.
- A single app failing (network or an invalid id) is logged and the run continues with the next app.

### License

MIT © Assia Fadli

# Actor input Schema

## `appStoreAppIds` (type: `array`):

Numeric Apple iTunes app IDs, e.g. "310633997" (WhatsApp). Find it in the App Store URL: apps.apple.com/app/id<number>.

## `googlePlayAppIds` (type: `array`):

Google Play package names, e.g. "com.whatsapp". Optional — leave empty to scrape App Store only.

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

Two-letter country code selecting the storefront (e.g. "us", "gb", "de").

## `lang` (type: `string`):

Two-letter language code used for Google Play reviews (e.g. "en").

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

Maximum number of reviews to fetch per app. The App Store RSS feed is capped at ~500 (10 pages); Google Play paginates further.

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

How to sort reviews. "helpful" applies to Google Play only; the App Store feed is always most-recent.

## Actor input object example

```json
{
  "appStoreAppIds": [
    "310633997",
    "324684580"
  ],
  "googlePlayAppIds": [
    "com.whatsapp",
    "com.spotify.music"
  ],
  "country": "us",
  "lang": "en",
  "maxReviewsPerApp": 200,
  "sort": "newest"
}
```

# 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 = {
    "appStoreAppIds": [
        "310633997"
    ],
    "googlePlayAppIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("receptional_blender/app-store-reviews").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 = {
    "appStoreAppIds": ["310633997"],
    "googlePlayAppIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("receptional_blender/app-store-reviews").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 '{
  "appStoreAppIds": [
    "310633997"
  ],
  "googlePlayAppIds": []
}' |
apify call receptional_blender/app-store-reviews --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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