# App Store Review Monitor (`begrit/appstore-review-monitor`) Actor

Fetch App Store customer reviews for any iOS app as clean structured JSON — ratings, review text, versions, multi-country breakdown and rating distribution. No login, no API key.

- **URL**: https://apify.com/begrit/appstore-review-monitor.md
- **Developed by:** [TTLAND](https://apify.com/begrit) (community)
- **Categories:** E-commerce, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Review Monitor

Fetch **App Store customer reviews for any iOS app** as clean, structured JSON — no login, no API key, no scraping headaches. Point it at an App Store URL (or numeric app ID) and get ratings, review text, app versions, per-country breakdowns and a rating distribution summary.

Works great as an **MCP tool for AI agents** (review analysis, sentiment monitoring, competitor research) and in **Make / n8n / Zapier** automation flows.

### What it does

- ✅ Reviews for **any public iOS app** — yours or a competitor's
- ✅ **Multi-country** in one run (`us`, `jp`, `gb`, … or `major10` for the 10 largest storefronts)
- ✅ Up to **500 most recent reviews per country** (Apple serves 10 pages × 50)
- ✅ Filter by **star rating** (e.g. only 1–2★ complaints)
- ✅ **Summary report**: total count, average rating, rating distribution, per-country counts
- ✅ Uses Apple's **official public RSS feed** — stable, legal, fast

### Input

```json
{
    "appId": "https://apps.apple.com/us/app/slack/id618783545",
    "countries": ["us", "jp", "de"],
    "maxPages": 2,
    "sortBy": "mostrecent",
    "minRating": 1,
    "maxRating": 5
}
````

| Field | Description |
|---|---|
| `appId` | App Store URL or numeric ID (`618783545`) |
| `countries` | 2-letter storefront codes. `["major10"]` = us, gb, jp, de, fr, ca, au, kr, br, in |
| `maxPages` | 1–10 pages per country, 50 reviews each |
| `sortBy` | `mostrecent` or `mosthelpful` |
| `minRating` / `maxRating` | keep only reviews in this star range |

### Output

Each review is one dataset item:

```json
{
    "country": "us",
    "reviewId": "14253813425",
    "rating": 2,
    "title": "Inconsistently works…",
    "text": "Constant issues with the iOS mobile app…",
    "author": "MassMangoMurder",
    "appVersion": "25.06.10",
    "updated": "2026-06-28T11:41:07-07:00",
    "voteSum": 0,
    "voteCount": 0
}
```

Plus a run summary in the key-value store (`OUTPUT`):

```json
{
    "appId": "618783545",
    "countries": { "us": 100, "jp": 100 },
    "totalReviews": 200,
    "averageRating": 3.12,
    "ratingDistribution": { "1": 62, "2": 19, "3": 28, "4": 16, "5": 75 }
}
```

### Use cases

- **Monitor your own app**: schedule daily runs, alert on new 1★ reviews
- **Competitor research**: what do users hate about the top apps in your niche?
- **AI agent tool (MCP)**: let your agent pull live review data and summarize pain points
- **ASO / product decisions**: rating distribution per country tells you where to localize next
- **Churn analysis**: cross-reference review complaints with your release versions

### FAQ

**Does it need my Apple credentials?** No. It reads Apple's public customer-review RSS feed.

**How fresh is the data?** The feed is the same one the App Store serves — effectively real time.

**Why max 500 reviews per country?** Apple's feed exposes the 10 most recent pages. For continuous history, schedule the actor daily and dedupe by `reviewId`.

**Android?** This actor is iOS/App Store only (Google Play uses a different pipeline).

# Actor input Schema

## `appId` (type: `string`):

Numeric App Store ID (e.g. 618783545) or a full App Store URL (e.g. https://apps.apple.com/us/app/slack/id618783545).

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

Two-letter App Store country codes (e.g. us, jp, gb). Use the single value "major10" to expand to the 10 largest storefronts.

## `maxPages` (type: `integer`):

1–10. Apple's RSS feed serves at most 10 pages (≈500 most recent reviews) per country.

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

Order of reviews in the feed.

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

Keep only reviews with at least this many stars (1-5).

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

Keep only reviews with at most this many stars (1-5).

## Actor input object example

```json
{
  "appId": "618783545",
  "countries": [
    "us"
  ],
  "maxPages": 1,
  "sortBy": "mostrecent",
  "minRating": 1,
  "maxRating": 5
}
```

# 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 = {
    "appId": "618783545",
    "countries": [
        "us"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("begrit/appstore-review-monitor").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 = {
    "appId": "618783545",
    "countries": ["us"],
}

# Run the Actor and wait for it to finish
run = client.actor("begrit/appstore-review-monitor").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 '{
  "appId": "618783545",
  "countries": [
    "us"
  ]
}' |
apify call begrit/appstore-review-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=begrit/appstore-review-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "App Store Review Monitor",
        "description": "Fetch App Store customer reviews for any iOS app as clean structured JSON — ratings, review text, versions, multi-country breakdown and rating distribution. No login, no API key.",
        "version": "1.0",
        "x-build-id": "ygRxHGfrKffVfjJyH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/begrit~appstore-review-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-begrit-appstore-review-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/begrit~appstore-review-monitor/runs": {
            "post": {
                "operationId": "runs-sync-begrit-appstore-review-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/begrit~appstore-review-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-begrit-appstore-review-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "appId"
                ],
                "properties": {
                    "appId": {
                        "title": "App ID or App Store URL",
                        "type": "string",
                        "description": "Numeric App Store ID (e.g. 618783545) or a full App Store URL (e.g. https://apps.apple.com/us/app/slack/id618783545)."
                    },
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "Two-letter App Store country codes (e.g. us, jp, gb). Use the single value \"major10\" to expand to the 10 largest storefronts.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPages": {
                        "title": "Max pages per country (50 reviews/page)",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "1–10. Apple's RSS feed serves at most 10 pages (≈500 most recent reviews) per country.",
                        "default": 1
                    },
                    "sortBy": {
                        "title": "Sort",
                        "enum": [
                            "mostrecent",
                            "mosthelpful"
                        ],
                        "type": "string",
                        "description": "Order of reviews in the feed.",
                        "default": "mostrecent"
                    },
                    "minRating": {
                        "title": "Min rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Keep only reviews with at least this many stars (1-5).",
                        "default": 1
                    },
                    "maxRating": {
                        "title": "Max rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Keep only reviews with at most this many stars (1-5).",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
