# App Store Reviews Scraper & Analyzer – iOS Complaints AI (`nebulosa/app-store-review-insights`) Actor

Scrape the latest public App Store reviews of any iOS app (yours or a competitor) in up to 15 countries and classify them with AI into bugs, crashes, feature requests, pricing/subscription, UX, ads and performance, with severity, version trends, quotes and the top fixes.

- **URL**: https://apify.com/nebulosa/app-store-review-insights.md
- **Developed by:** [Nebulosa Data](https://apify.com/nebulosa) (community)
- **Categories:** AI, Developer tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 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 & Analyzer – iOS Complaints AI

Scrape the latest public **App Store reviews** of any iOS app, yours or a competitor's, from up to 15 countries, and get them classified with AI into bugs, crashes, feature requests, pricing/subscription, UX, ads and performance. Each app gets severity, complaint share per version, real quotes and a ranked list of the fixes users ask for most. No App Store Connect access needed.

> **Need a done-for-you report?** [Revunda App Store complaint report, €19](https://revunda.xyz/apps/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-top): a short PDF with severity, version trend and the 10 fixes that matter most ([sample](https://revunda.xyz/apps/sample-report/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-top-sample)).

Find out what your App Store reviews actually complain about. Give this actor one or more App Store URLs (or numeric app IDs). It reads the latest **public** customer reviews from Apple's official RSS feed across up to 15 storefronts and classifies each review with AI (TypeSafe Jev) into:

- **Bugs**, **Crashes / freezes**, **Feature requests**, **Pricing / subscription**, **UX / design**, **Ads**, **Performance**
- 18 specific issues (login problems, lost data, trial charges, aggressive paywall, usage limits, redesign backlash, slow loading, battery drain, unresponsive support…)
- a **severity** score from 0 (no problem) to 3 (app unusable)

### Output

- One `review` item per review: country, rating, version, date, title, text, categories, issues, severity, method (`ai` or `keywords`). Reviewer names are not collected.
- One `summary` item per app: complaint categories with average severity, most affected versions and example quotes; complaint share per version; and **topFixes**, the 10 specific issues ranked by number of complaining reviews × severity.

### Input

| Field | Meaning |
|---|---|
| apps | App Store URLs or IDs, e.g. `https://apps.apple.com/us/app/duolingo-language-lessons/id570060128` |
| countries | storefront codes (default: us, gb, ca, au, de, fr, es, it, nl, br, mx, in, jp, se, pl) |
| maxReviewsPerApp / maxPerCountry | caps (Apple exposes ~500 most recent reviews per country) |
| onlyNegative | only 1-3 star reviews |
| useAi / typesafeApiKey | AI on/off; your own key lifts the 300 AI calls/run cap |

Empty input runs a small demo on Duolingo.

### Example input

```json
{
  "apps": ["https://apps.apple.com/us/app/duolingo-language-lessons/id570060128"],
  "countries": ["us", "gb", "ca", "au"],
  "maxReviewsPerApp": 200,
  "maxPerCountry": 50,
  "onlyNegative": true,
  "useAi": true
}
```

### Example output (shortened)

One `review` row per review (a real row from a Duolingo test run):

```json
{"type": "review", "appId": "570060128", "appName": "Duolingo: Learn Languages", "reviewId": "14680863495",
 "country": "us", "rating": 5, "version": "7.144.0", "date": "2026-10-18", "title": "Amazing app",
 "text": "It makes me learn Spanish fun", "categories": [], "issues": [], "severity": 0, "method": "ai"}
```

Plus one `summary` row per app (also saved in the key-value store as `SUMMARY_<appId>`) with these fields: `appName`, `developer`, `currentVersion`, `allTimeRating`, `allTimeRatingCount`, `reviewsAnalysed`, `averageStars`, `complaintReviews`, `countries`, `categories[]` (reviews, avgSeverity, topVersions, example quotes), `versions[]` (avgStars, complaintSharePct) and `topFixes[]` (issue, fix, reviews, avgSeverity, score, examples). Export as JSON, CSV or Excel, or pull it through the Apify API.

### Pricing

Pay per event: **$0.02 per result** in the dataset (each `review` row and each per-app `summary` row), plus a tiny per-run start fee. Use `onlyNegative` and `maxReviewsPerApp` to keep runs small; 100 negative reviews of one app come to about $2. Current prices are on the Pricing tab.

### Limits

Apple's public feed only contains the most recent reviews, not the full history. AI can misclassify single reviews, so check the quotes. Not affiliated with Apple.

### Need a done-for-you report?

Prefer a finished PDF over a dataset? [Revunda](https://revunda.xyz/apps/) uses the same public App Store reviews and sends the report by email:

- **[App Store complaint report, €19 one-off](https://revunda.xyz/apps/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-report)**: what users complain about, how bad it is, which versions it hits and the 10 fixes that matter most. [See a real sample report](https://revunda.xyz/apps/sample-report/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-sample).
- **[Competitor Pack, €29](https://revunda.xyz/apps/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-competitor#competitor)**: your app plus up to 2 competitors, three full reports and a side-by-side summary of their top complaints.
- **[20 ready replies to your 1–2★ reviews, €9](https://revunda.xyz/apps/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-replies#replies)**: ready to paste into App Store Connect or Play Console.
- **[Weekly Monitor, €29/month](https://revunda.xyz/apps/monitor/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-monitor)**: weekly review digest for your app and up to 2 competitors, theme shifts vs last week and spike alerts. Cancel anytime.
- **Android app?** [Google Play complaint report, €9](https://revunda.xyz/apps/android/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-android).

Free examples: [App Store and Google Play complaint reports for popular apps](https://revunda.xyz/apps/reviews/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-reviews) · [app vs app comparisons](https://revunda.xyz/apps/compare/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-compare). Not sure yet? Run the [free complaint check](https://revunda.xyz/apps/check/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-check) or [export App Store or Google Play reviews to CSV](https://revunda.xyz/apps/review-export/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=readme-export) first.

### Pairs with

- [google-maps-review-insights](https://apify.com/nebulosa/google-maps-review-insights): AI analysis of Google Maps reviews with owner reply drafts
- [gbp-suspension-risk-audit](https://apify.com/nebulosa/gbp-suspension-risk-audit): Google Business Profile suspension risk score
- [restaurant-review-insights](https://apify.com/nebulosa/restaurant-review-insights): tag restaurant reviews by complaint type

### FAQ

#### How do I analyze App Store reviews of my app or a competitor?

Paste the App Store URL or numeric app ID, pick countries and run; read the top-fixes list first.

#### Do I need App Store Connect access?

No. Only public reviews are used, so it works for competitors too.

#### How many reviews does it read?

Apple exposes a limited number of the most recent reviews per country; the actor reads what is publicly available for each selected country.

#### Can I export App Store reviews to CSV, Excel or JSON?

Yes. Every run writes a dataset you can download as CSV, Excel, JSON or XML, or read through the Apify API. Schedule the actor to get a fresh export every day or week.

#### Does it scrape Google Play reviews too?

No, this actor reads iOS App Store reviews only. For Android apps, Revunda has a [free Google Play review export to CSV](https://revunda.xyz/apps/review-export/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=faq-play-export) and a [Google Play complaint report, €9](https://revunda.xyz/apps/android/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=faq-android).

#### What about Shopify App Store reviews?

Not in this actor. Revunda sells a [Shopify App Store category gap report](https://revunda.xyz/shopify/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=faq-shopify) for Shopify app developers, built from merchant reviews.

#### How much does a run cost?

$0.02 per dataset row (reviews plus one summary per app) and a tiny start fee. With `onlyNegative` on, you pay only for the 1–3★ reviews.

#### Can I track an app every week?

Yes. Schedule the actor in Apify Console and connect email, Slack or a webhook. For a finished weekly digest instead, see the [Revunda Weekly Monitor](https://revunda.xyz/apps/monitor/?utm_source=apify\&utm_medium=actor\&utm_campaign=app-store-review-insights\&utm_content=faq-monitor).

# Actor input Schema

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

e.g. https://apps.apple.com/us/app/duolingo-language-lessons/id570060128 or 570060128. Empty = demo on Duolingo.

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

App Store countries to read reviews from.

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

Apple's public feed exposes up to ~500 most recent reviews per country.

## `maxPerCountry` (type: `integer`):

Spread reviews across storefronts.

## `onlyNegative` (type: `boolean`):

Skip 4-5 star reviews.

## `useAi` (type: `boolean`):

If off, a keyword fallback is used.

## `typesafeApiKey` (type: `string`):

Optional. Your own TypeSafe key lifts the 300 AI calls per run cap.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/duolingo-language-lessons/id570060128"
  ],
  "countries": [
    "us",
    "gb",
    "ca",
    "au",
    "de",
    "fr",
    "es",
    "it",
    "nl",
    "br",
    "mx",
    "in",
    "jp",
    "se",
    "pl"
  ],
  "maxReviewsPerApp": 300,
  "maxPerCountry": 100,
  "onlyNegative": false,
  "useAi": true
}
```

# Actor output Schema

## `results` (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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nebulosa/app-store-review-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"] }

# Run the Actor and wait for it to finish
run = client.actor("nebulosa/app-store-review-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"
  ]
}' |
apify call nebulosa/app-store-review-insights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nebulosa/app-store-review-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/Xp9jHVqiKmXw5Fc9w/builds/UgGOdyHb3TNP02Yo8/openapi.json
