# App Store Review Tracker (`arched_friend/appstore-review-tracker`) Actor

Track App Store customer reviews for any app and country. Catch every new review as it lands, watch competitor apps, filter by rating or keyword, and chart rating trends over time, straight from Apple's own feed.

- **URL**: https://apify.com/arched\_friend/appstore-review-tracker.md
- **Developed by:** [Peach O](https://apify.com/arched_friend) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 app checkeds

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?

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 Review Tracker: Never Miss a Review

**Catch every new App Store review the moment it lands, for your app and your competitors.**

Pulls customer reviews for any app, in any country store, straight from Apple's own feed. Filter by star rating or keyword, watch competitors alongside your own app, and schedule it to get a clean stream of new reviews with no repeats.

Built for app teams, ASO and marketing agencies, and product managers who need to hear what users are saying without checking by hand.

### How it works

```mermaid
flowchart LR
    A[App name, id or URL] --> B[Resolve on the App Store]
    B --> C[Pull reviews per country]
    C --> D{Filter by rating,<br/>keyword, date}
    D --> E{New since last run?}
    E -->|yes| F[(Your feed)]
    E -->|seen before| G[Skipped]
```

It reads Apple's public review feed and app lookup, so there is no scraping to break, no proxy to pay for, and nothing that trips a bot blocker. It just keeps working.

### Built for monitoring

```mermaid
flowchart TD
    A[Schedule it daily] --> B[Only new reviews since last run]
    B --> C[New 1 star review]
    B --> D[Competitor rating drops]
    B --> E[A bug named again and again]
    C & D & E --> F[Act before it spreads]
```

Turn on `onlyNewReviews` and schedule the Actor. It remembers what it has already shown you and reports only what is new, so each run is a clean list of fresh reviews rather than the same 500 every time.

### Input

```json
{
  "apps": ["monzo", "revolut", "https://apps.apple.com/gb/app/starling-bank/id956806430"],
  "countries": ["us", "gb"],
  "onlyNewReviews": true,
  "maxReviewsPerApp": 200
}
```

| Option | Does |
| --- | --- |
| `apps` | Required. App names, numeric ids, or App Store URLs. Names resolve to the best match. |
| `countries` | Two letter store codes. Each app is checked in each, since reviews differ by store. |
| `onlyNewReviews` | Report only reviews not seen on a previous run. The monitoring switch. |
| `maxReviewsPerApp` | Up to Apple's cap of 500 most recent per country. |
| `minRating` and `maxRating` | Narrow to a star band. Set 1 to 2 to watch complaints. |
| `searchQuery` | Keep only reviews mentioning a feature or bug. |
| `since` | Keep only reviews on or after a date. |

### Output

One row per review, ready to chart or route.

```json
{
  "appName": "Revolut: Send, spend and save",
  "country": "us",
  "rating": 5,
  "title": "Sent money to Chile",
  "text": "Very fast (in minutes) and easy!",
  "author": "mariflyaa",
  "appVersion": "10.142",
  "updated": "2026-09-01T07:36:51-07:00",
  "appAverageRating": 4.72,
  "appRatingCount": 71747,
  "appStoreUrl": "https://apps.apple.com/us/app/revolut-send-spend-and-save/id932493382"
}
```

The run summary carries the rating distribution and averages per app, so you can chart trends over time:

```json
{
  "appName": "Revolut: Send, spend and save",
  "country": "us",
  "averageRating": 4.8,
  "ratingCounts": { "1": 2, "2": 0, "3": 0, "4": 2, "5": 46 },
  "negativeCount": 2,
  "positiveCount": 48
}
```

Export to JSON, CSV or Excel, or send it to Slack, a sheet or your support desk.

### Watch complaints only

```json
{
  "apps": ["your-app"],
  "countries": ["us", "gb"],
  "minRating": 1,
  "maxRating": 2,
  "onlyNewReviews": true
}
```

Scheduled daily, this pings you with every new one and two star review across both stores, and nothing else. A one star bug report you answer within hours reads very differently to the next person deciding whether to download.

### Run it as an API

```bash
curl -X POST "https://api.apify.com/v2/acts/arched_friend~appstore-review-tracker/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apps": ["monzo"], "countries": ["gb"], "minRating": 1, "maxRating": 2}'
```

Schedule it, wire the output into Slack or a support tool, and a new complaint reaches the right person the same day.

### Common questions

**How many reviews can it pull?**
Apple serves the 500 most recent reviews per app per country. For monitoring that is plenty, because each scheduled run only needs to catch what arrived since the last one.

**Does it cover competitors?**
Yes. List as many apps as you like. Watching a rival's rating slide, or the feature their users keep asking for, is often worth more than reading your own.

**Which countries are supported?**
Every App Store country. Reviews are specific to each store, so a US and a UK run return different reviews for the same app.

**Does it need an Apple developer account or API key?**
No. It uses Apple's public review feed and app lookup. Nothing to set up, nothing to authenticate.

**How fresh is the data?**
It reads the live feed every run. `onlyNewReviews` compares against what it saw last time, so scheduling it hourly or daily gives a near live stream of new reviews.

**What about Google Play?**
This Actor covers the Apple App Store. Ask if you want Google Play added.

### Related products

- **Website Lead Extractor** to find contact details for the companies behind the apps
- **Tech Stack Checker** to see what technology an app maker runs on the web
- **Lead Enrichment Pipeline** to turn a list of companies into qualified, contactable leads

# Actor input Schema

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

One entry per app. Use the app name, its numeric App Store id, or a full App Store URL. Names are resolved to the best match.

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

Two letter App Store country codes. Each app is checked in each country, since reviews differ by store.

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

Apple serves the 500 most recent reviews per country at most. Lower this for faster, cheaper runs.

## `onlyNewReviews` (type: `boolean`):

Remembers which reviews it has already returned and reports only the new ones next time. Turn this on and schedule the Actor to get a clean feed of new reviews with no repeats.

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

Most recent first, or most helpful first.

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

Keep only reviews at or above this rating. Set both bounds to 1 and 2 to watch complaints.

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

Keep only reviews at or below this rating.

## `searchQuery` (type: `string`):

Keep only reviews whose title or body contains this text, for example a feature name or bug.

## `since` (type: `string`):

Keep only reviews updated on or after this date, for example 2026-08-01.

## Actor input object example

```json
{
  "apps": [
    "monzo"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "maxReviewsPerApp": 200,
  "onlyNewReviews": false,
  "sortBy": "mostrecent",
  "minRating": 1,
  "maxRating": 5
}
```

# Actor output Schema

## `reviews` (type: `string`):

One row per review, across every requested app and country.

## `runSummary` (type: `string`):

Per app rating distribution, averages and counts, plus any apps that could not be found.

# 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": [
        "monzo",
        "revolut",
        "https://apps.apple.com/gb/app/starling-bank/id956806430"
    ],
    "countries": [
        "us",
        "gb"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("arched_friend/appstore-review-tracker").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": [
        "monzo",
        "revolut",
        "https://apps.apple.com/gb/app/starling-bank/id956806430",
    ],
    "countries": [
        "us",
        "gb",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("arched_friend/appstore-review-tracker").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": [
    "monzo",
    "revolut",
    "https://apps.apple.com/gb/app/starling-bank/id956806430"
  ],
  "countries": [
    "us",
    "gb"
  ]
}' |
apify call arched_friend/appstore-review-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arched_friend/appstore-review-tracker"
        }
    }
}

```

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/SDeKBTVMJloqjub12/builds/dxO2GcNKdzNQDbgqg/openapi.json
