# App Store Review Miner (`muddy_snowshoe/app-store-review-miner`) Actor

Scrapes low-rated reviews from top-grossing App Store apps in a category, classifies recurring complaints into buckets, and ranks the biggest category-wide weaknesses.

- **URL**: https://apify.com/muddy\_snowshoe/app-store-review-miner.md
- **Developed by:** [해민 이](https://apify.com/muddy_snowshoe) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.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/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 Review Miner** finds the recurring complaints hiding inside the top-grossing apps of any App Store category. It pulls the current top-grossing chart for a category, fetches each app's most recent [App Store reviews](https://www.apple.com/app-store/), and classifies every low-rated (★3 or below) review into 13 complaint buckets (billing, crashes, sync, missing features, and more). The output is a ranked list of the biggest *category-wide* weaknesses — the gaps a smaller, cheaper, or friendlier competitor could exploit. Try it with any category (Productivity, Finance, Health, Games, ...) and any App Store country storefront.

### Why use App Store Review Miner?

If you're evaluating a "copy and improve by 10%" app idea, competitor research, or market due diligence, reading reviews one app at a time doesn't scale. This Actor automates that grind and gives you two things a single app's review page never shows:

- **Which complaints are structural** (show up across most of the category) vs. **which are one app's problem** — the former is where the real opportunity is.
- **Which apps have a "reputation drop"** — a recent review average meaningfully below their all-time store rating, meaning users are souring on them *right now*.

Runs on the Apify platform, so you get scheduling, an API, and result export for free — no local Node.js setup required.

### How to use App Store Review Miner

1. Click **Try for free**.
2. Set the **Category** (e.g. `fitness`, `productivity`, `finance` — or a raw numeric App Store genre ID) and the **Country** storefront (`us`, `kr`, `jp`, ...).
3. Optionally narrow the top-grossing **rank range** and how many **review pages** to sample per app.
4. Click **Start** and wait — a run over 30 apps with 2 review pages each typically finishes in a few minutes.
5. Open the **Dataset** tab for one row per app, or download the full markdown report from the **Key-value store** tab (`REPORT.md`).

### Input

| Field     | Type    | Default        | Description                                    |
| --------- | ------- | -------------- | ---------------------------------------------- |
| `genre`   | string  | `productivity` | Category name or numeric App Store genre ID    |
| `country` | string  | `us`           | Two-letter App Store storefront country code   |
| `from`    | integer | `1`            | Start of the top-grossing rank range           |
| `to`      | integer | `30`           | End of the top-grossing rank range (max 200)   |
| `pages`   | integer | `2`            | Review pages per app (50 reviews/page, max 10) |

Example input:

```json
{
    "genre": "fitness",
    "country": "us",
    "from": 1,
    "to": 30,
    "pages": 2
}
```

### Output

One dataset item per app:

```json
{
    "rank": 1,
    "name": "ChatGPT",
    "artist": "OpenAI OpCo, LLC",
    "storeRating": 4.83,
    "ratingCount": 9207009,
    "recentAvg": 4.28,
    "reputationDrop": false,
    "sampled": 50,
    "lowCount": 9,
    "topComplaints": ["crash/bug/error", "speed/performance/battery", "ads"],
    "buckets": { "crash/bug/error": 2, "speed/performance/battery": 1, "ads": 1 }
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The full markdown report (category-wide complaint ranking + per-app detail + sample low-rated review text) is saved to the run's key-value store under the key `REPORT.md`.

### Data table

| Field                         | Description                                                     |
| ----------------------------- | --------------------------------------------------------------- |
| `rank`                        | Position in the top-grossing chart                              |
| `storeRating` / `ratingCount` | All-time App Store rating and rating count                      |
| `recentAvg`                   | Average rating across the sampled recent reviews                |
| `reputationDrop`              | `true` if `recentAvg` is ≥0.7 below `storeRating`               |
| `lowCount` / `sampled`        | How many of the sampled reviews were ≤3★                        |
| `topComplaints` / `buckets`   | Complaint categories detected in low-rated reviews, with counts |

### Cost estimation

This Actor makes lightweight HTTP calls to Apple's public RSS/JSON endpoints — no browser, no proxy required. A typical run (30 apps × 2 review pages) uses well under the free Apify plan's monthly compute allowance.

### Tips

- Keep `pages` low (1-2) for a quick scan across many apps; raise it only when you've already narrowed down to a handful of apps you want deep review detail on.
- `to - from` above ~50 will take proportionally longer since each app is fetched with a short delay to stay within Apple's rate limits.

### FAQ & disclaimers

This Actor only reads Apple's public RSS and iTunes Lookup endpoints (the same feeds the App Store website itself uses) — no login, scraping of private data, or Terms of Service violation involved. Review text is reproduced only in short excerpts for research purposes. Found a bug or want a feature (e.g. Google Play support)? Open an issue on the Actor's Issues tab.

# Actor input Schema

## `genre` (type: `string`):

App Store genre to analyze — a category name (fitness, productivity, lifestyle, finance, ...) or a raw numeric genre ID (e.g. 6013).

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

Two-letter App Store country code, e.g. kr, us, jp.

## `from` (type: `integer`):

Start of the top-grossing rank range to sample.

## `to` (type: `integer`):

End of the top-grossing rank range to sample. The App Store RSS feed caps at 200.

## `pages` (type: `integer`):

How many pages of most-recent reviews to fetch per app (50 reviews per page, App Store caps at 10 pages).

## Actor input object example

```json
{
  "genre": "productivity",
  "country": "us",
  "from": 1,
  "to": 30,
  "pages": 2
}
```

# 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 = {
    "genre": "productivity"
};

// Run the Actor and wait for it to finish
const run = await client.actor("muddy_snowshoe/app-store-review-miner").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 = { "genre": "productivity" }

# Run the Actor and wait for it to finish
run = client.actor("muddy_snowshoe/app-store-review-miner").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 '{
  "genre": "productivity"
}' |
apify call muddy_snowshoe/app-store-review-miner --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fFy3rLGBWYx75TXii/builds/1UPJQXUXb6wUQJ6hh/openapi.json
