# App Store Reviews Scraper + Insights - Multi-Country iOS (`brazen_kraken/app-store-reviews-insights`) Actor

Scrape iOS App Store reviews from up to 50+ countries at once, plus AI-free insights: rating mix, rating by app version, top complaint and praise phrases. Search apps by name or paste URLs.

- **URL**: https://apify.com/brazen_kraken/app-store-reviews-insights.md
- **Developed by:** [joyfull news](https://apify.com/brazen_kraken) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 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/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 + Insights — Multi-Country iOS Reviews & Complaint Analysis

**Get iOS App Store reviews from many countries in one run — and see what users actually complain about.** Paste App Store URLs, app IDs or just app names, pick countries, and get every available review plus a per-app **insights report**: rating mix, **rating by app version**, and the **top complaint and praise phrases** pulled from 1–2★ and 4–5★ reviews.

✅ Search apps by name or keyword ✅ 50+ country App Stores in one run ✅ Most recent **and** most helpful reviews, de-duplicated ✅ Complaint & praise themes — no AI cost ✅ Export to CSV, Excel, JSON, Google Sheets, Slack

### 🎯 Who uses it

- **Product managers & app developers** — find the bugs and missing features users mention most, and see if your latest version improved ratings.
- **Competitor research** — search a keyword like `habit tracker` and analyze the top 20 apps' complaints to find gaps you can win on.
- **Agencies & ASO consultants** — build review reports for clients in minutes.
- **Customer support & QA** — monitor new 1★ reviews daily.
- **Investors & analysts** — track sentiment across countries and versions.

### 📊 What you get

#### Reviews

| Field | Example |
|---|---|
| App name, ID, developer, genre | Duolingo — `570060128` |
| Country | `gb` |
| Stars | `2` |
| Title & review text | "Too many ads" — "…" |
| App version reviewed | `7.146.0` |
| Date | `2026-10-28` |
| Helpful votes | `12` |
| Store rating & rating count | `4.72` — `5,542,684` |

#### Insights (one per app)

| Field | Example |
|---|---|
| Reviews analyzed | `400` |
| Average rating in sample vs. overall store rating | `4.03` vs `4.72` |
| Rating distribution | 5★ 197 · 4★ 108 · 3★ 38 · 2★ 23 · 1★ 34 |
| Share of 1–2★ reviews | `0.14` |
| **Rating by app version** | 7.146.0 → 4.06 ★ |
| **Top complaint phrases** | "watching ads", "free trial", "pay wall" |
| **Top praise phrases** | "language learning", "fun way" |

### 🚀 How to use it

1. **Add apps** — App Store URLs (`https://apps.apple.com/us/app/duolingo-language-lessons/id570060128`), app IDs (`570060128`) or names (`Duolingo`).
2. **Or add search terms** — e.g. `budget app` with *Apps per search term* = 10 to analyze a whole niche.
3. **Pick countries** — `us`, `gb`, `ca`, `au`, `de`, `fr`, `in`, `br`, `jp`…
4. **Filter (optional)** — star ratings (e.g. only 1–2★), last N days.
5. **Run** and export, or schedule it daily to monitor new reviews.

#### Example: competitor complaint analysis

```json
{
  "searchTerms": ["habit tracker"],
  "appsPerSearchTerm": 10,
  "countries": ["us", "gb", "ca", "au"],
  "outputType": "insights"
}
```

#### Example: daily new 1–2★ reviews for your app

```json
{
  "apps": ["570060128"],
  "countries": ["us", "gb"],
  "ratings": ["1", "2"],
  "newerThanDays": 1,
  "outputType": "reviews"
}
```

### 💰 Pricing

**$0.30 per 1,000 results** plus a small per-run start fee. Reviews removed by your filters are free. 1,000 reviews + insights for one app ≈ $0.30.

### ❓ FAQ

**How many reviews can I get?**
Apple's public review feed gives up to 500 reviews per country per sort order. With "most helpful" on, you get up to ~1,000 unique reviews per country — add more countries to get more.

**Where do the insights come from?**
Simple, transparent phrase counting on the review text (no AI, no extra cost). Complaint phrases come from 1–2★ reviews, praise phrases from 4–5★.

**Does it support Google Play?**
Not yet — iOS App Store only. Open an issue if you need it.

**Can I monitor reviews automatically?**
Yes — schedule a daily run with *Only reviews from the last N days* = 1 and send results to Slack or email via Apify integrations.

**Does it work with AI agents?**
Yes, via the Apify API and MCP server, with a full output schema.

### ⚖️ Legal

Uses Apple's official public customer-review RSS feed and iTunes Search/Lookup APIs. Collects only public review content and the public reviewer nickname shown on the App Store.

### 💬 Support

Want Google Play, more fields or a new insight? Open an issue on the **Issues** tab — we reply within 1–2 days.

# Actor input Schema

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

App Store URLs (https://apps.apple.com/us/app/duolingo/id570060128), numeric app IDs (570060128) or app names ("Duolingo").

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

Find apps by keyword, e.g. "habit tracker". Combine with "Apps per search term" to analyze a whole category of competitors.

## `appsPerSearchTerm` (type: `integer`):

How many top search results to include for each search term.

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

Two-letter App Store country codes, e.g. us, gb, ca, au, de, fr, in, br, jp. Each country has its own reviews.

## `maxReviewsPerCountry` (type: `integer`):

Apple's public feed returns up to 500 reviews per country for each sort order.

## `includeMostHelpful` (type: `boolean`):

Fetch both the most recent and the most helpful reviews (de-duplicated) to get up to ~2x more reviews per country.

## `ratings` (type: `array`):

Only keep reviews with these star ratings. Leave empty for all.

## `newerThanDays` (type: `integer`):

0 = any date.

## `outputType` (type: `string`):

Reviews, per-app insights, or both.

## `maxConcurrency` (type: `integer`):

How many requests run in parallel. The default is fine for most runs.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/duolingo-language-lessons/id570060128"
  ],
  "appsPerSearchTerm": 1,
  "countries": [
    "us",
    "gb",
    "ca",
    "au"
  ],
  "maxReviewsPerCountry": 500,
  "includeMostHelpful": true,
  "newerThanDays": 0,
  "outputType": "both",
  "maxConcurrency": 4
}
```

# Actor output Schema

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

Table of App Store reviews.

## `insights` (type: `string`):

Per-app rating mix, rating by version and top complaint / praise phrases.

## `allFields` (type: `string`):

No description

# 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/duolingo-language-lessons/id570060128"
    ],
    "countries": [
        "us",
        "gb",
        "ca",
        "au"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("brazen_kraken/app-store-reviews-insights").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/duolingo-language-lessons/id570060128"],
    "countries": [
        "us",
        "gb",
        "ca",
        "au",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("brazen_kraken/app-store-reviews-insights").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/duolingo-language-lessons/id570060128"
  ],
  "countries": [
    "us",
    "gb",
    "ca",
    "au"
  ]
}' |
apify call brazen_kraken/app-store-reviews-insights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brazen_kraken/app-store-reviews-insights"
        }
    }
}
```

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/hjxLkiYQddV5eQZXm/builds/xKJWyBIiuiU1Zmk0F/openapi.json
