---
title: ToolRouter — Tool Detail
description: Detailed documentation for a ToolRouter tool including skills, parameters, and examples.
url: https://toolrouter.com/tools/app-review-analysis
---
# App Review Analysis

Mine App Store and Google Play reviews to find what users love, hate, and where competitors fall short. Clusters themes with AI, tracks sentiment over time, and compares apps.

- **Version:** 0.03
- **Categories:** analytics, marketing, ai
- **Homepage:** https://toolrouter.com/tools/app-review-analysis
- **Workflow:** aggregate_reviews → sentiment_trends → cluster_themes → compare_competitors

## Skills (4)

### Aggregate Reviews (`aggregate_reviews`)

Fetch and normalize App Store and Play Store reviews across one or more apps so you can analyze one consistent review dataset.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `targets` | array | No | Apps to aggregate reviews for. Omit to use saved ios_app_id and/or play_store_app_id defaults. |
| `country` | string | No | Country code used for review fetching. Defaults to "us". [default: "us"] |
| `language` | string | No | Language code for Play Store review fetching. Defaults to "en". [default: "en"] |
| `sort` | string | No | Review ordering: "recent" or "helpful". Defaults to "recent". (recent, helpful) [default: "recent"] |
| `limit_per_target` | number | No | Maximum reviews to fetch per app target. Defaults to 50 and caps at 200. [default: 50] |

**Returns:** Unified review dataset with normalized review rows, per-app summaries, and aggregate sentiment and rating stats

**Examples:**

*Aggregate Spotify reviews across iOS and Android:*

```json
{
  "targets": [
    {
      "platform": "ios",
      "app_id": "324684580",
      "label": "Spotify iOS",
      "role": "primary"
    },
    {
      "platform": "android",
      "app_id": "com.spotify.music",
      "label": "Spotify Android",
      "role": "primary"
    }
  ],
  "country": "us",
  "limit_per_target": 20
}
```

*Aggregate reviews for one iOS app:*

```json
{
  "targets": [
    {
      "platform": "ios",
      "app_id": "com.spotify.client",
      "label": "Spotify App Store",
      "role": "primary"
    }
  ],
  "country": "us",
  "sort": "helpful",
  "limit_per_target": 25
}
```

### Cluster Themes (`cluster_themes`)

Cluster reviews into what users love and hate so you can spot feature opportunities, recurring pain points worth solving, and the biggest product signals.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `targets` | array | No | Apps to analyze. Omit to use saved ios_app_id and/or play_store_app_id defaults. |
| `country` | string | No | Country code used for review fetching. Defaults to "us". [default: "us"] |
| `language` | string | No | Language code for Play Store review fetching. Defaults to "en". [default: "en"] |
| `sort` | string | No | Review ordering: "recent" or "helpful". Defaults to "recent". (recent, helpful) [default: "recent"] |
| `limit_per_target` | number | No | Maximum reviews to fetch per app before sampling for analysis. Defaults to 50. [default: 50] |
| `max_themes` | number | No | Maximum number of themes to return. Defaults to 6 and caps at 10. [default: 6] |
| `focus` | string | No | Optional angle for clustering such as bugs, onboarding, pricing, ads, or retention. |

**Returns:** Theme clusters with evidence, severity, cross-app impact, and prioritized actions grounded in the sampled reviews

**Examples:**

*Cluster recurring themes for Spotify reviews:*

```json
{
  "targets": [
    {
      "platform": "ios",
      "app_id": "324684580",
      "label": "Spotify iOS",
      "role": "primary"
    },
    {
      "platform": "android",
      "app_id": "com.spotify.music",
      "label": "Spotify Android",
      "role": "primary"
    }
  ],
  "country": "us",
  "limit_per_target": 25,
  "max_themes": 5
}
```

*Cluster bug-focused themes for one Android app:*

```json
{
  "targets": [
    {
      "platform": "android",
      "app_id": "com.spotify.music",
      "label": "Spotify Android",
      "role": "primary"
    }
  ],
  "country": "us",
  "focus": "bugs, crashes, playback issues, and ads",
  "limit_per_target": 30
}
```

### Sentiment Trends (`sentiment_trends`)

Track sentiment, rating mix, and recurring positive and negative terms over time so you can spot improving or declining review momentum.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `targets` | array | No | Apps to analyze. Omit to use saved ios_app_id and/or play_store_app_id defaults. |
| `country` | string | No | Country code used for review fetching. Defaults to "us". [default: "us"] |
| `language` | string | No | Language code for Play Store review fetching. Defaults to "en". [default: "en"] |
| `sort` | string | No | Review ordering: "recent" or "helpful". Defaults to "recent". (recent, helpful) [default: "recent"] |
| `limit_per_target` | number | No | Maximum reviews to fetch per app target. Defaults to 50. [default: 50] |
| `bucket` | string | No | Time bucket for the trend series: day, week, or month. Defaults to week. (day, week, month) [default: "week"] |

**Returns:** Sentiment and rating trend series with per-app direction changes plus the terms driving positive and negative feedback

**Examples:**

*Track weekly sentiment trends for Spotify reviews:*

```json
{
  "targets": [
    {
      "platform": "ios",
      "app_id": "324684580",
      "label": "Spotify iOS",
      "role": "primary"
    },
    {
      "platform": "android",
      "app_id": "com.spotify.music",
      "label": "Spotify Android",
      "role": "primary"
    }
  ],
  "country": "us",
  "limit_per_target": 30,
  "bucket": "week"
}
```

*Track monthly sentiment for one app using helpful reviews:*

```json
{
  "targets": [
    {
      "platform": "android",
      "app_id": "com.spotify.music",
      "label": "Spotify Android",
      "role": "primary"
    }
  ],
  "country": "us",
  "sort": "helpful",
  "limit_per_target": 40,
  "bucket": "month"
}
```

### Compare Competitors (`compare_competitors`)

Compare your app against competitors to find gaps worth exploiting — features users hate about them become opportunities for you.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `primary_target` | object | No | Your app to compare against competitors. Omit to use a saved default app when available. |
| `competitor_targets` | array | Yes | Competitor apps to compare against the primary app. |
| `country` | string | No | Country code used for review fetching. Defaults to "us". [default: "us"] |
| `language` | string | No | Language code for Play Store review fetching. Defaults to "en". [default: "en"] |
| `sort` | string | No | Review ordering: "recent" or "helpful". Defaults to "recent". (recent, helpful) [default: "recent"] |
| `limit_per_target` | number | No | Maximum reviews to fetch per app before sampling for analysis. Defaults to 50. [default: 50] |
| `focus` | string | No | Optional comparison angle such as pricing pain, onboarding, ad load, or feature depth. |

**Returns:** Competitor comparison with per-app strengths and weaknesses, the primary app’s wins and gaps, and concrete next moves

**Examples:**

*Compare Calm against Headspace using Play Store reviews:*

```json
{
  "primary_target": {
    "platform": "android",
    "app_id": "com.calm.android",
    "label": "Calm",
    "role": "primary"
  },
  "competitor_targets": [
    {
      "platform": "android",
      "app_id": "com.getsomeheadspace.android",
      "label": "Headspace",
      "role": "competitor"
    }
  ],
  "country": "us",
  "limit_per_target": 20
}
```

*Compare one iOS app against two competitors with a pricing focus:*

```json
{
  "primary_target": {
    "platform": "ios",
    "app_id": "324684580",
    "label": "Spotify iOS",
    "role": "primary"
  },
  "competitor_targets": [
    {
      "platform": "ios",
      "app_id": "1108187390",
      "label": "Apple Music",
      "role": "competitor"
    },
    {
      "platform": "ios",
      "app_id": "1452263949",
      "label": "YouTube Music",
      "role": "competitor"
    }
  ],
  "country": "us",
  "focus": "pricing, ads, premium conversion friction, and perceived value",
  "limit_per_target": 18
}
```

## Quick Start

```bash
# Via CLI
TOOLROUTER_API_KEY=tr_live_xxx npx -y toolrouter-mcp call app-review-analysis aggregate_reviews --targets [object Object],[object Object] --country us --limit_per_target 20

# Via REST API
curl -H "Authorization: Bearer tr_live_xxx" \
     -d '{"tool":"app-review-analysis","skill":"aggregate_reviews","input":{"targets":[{"platform":"ios","app_id":"324684580","label":"Spotify iOS","role":"primary"},{"platform":"android","app_id":"com.spotify.music","label":"Spotify Android","role":"primary"}],"country":"us","limit_per_target":20}}' \
     https://api.toolrouter.com/v1/tools/call
```

## Frequently Asked Questions

### Can I compare iOS and Android reviews together?

Yes. The review tools normalize App Store and Google Play feedback into one dataset, so you can compare platforms without manually merging exports.

### How many reviews should I pull for a useful analysis?

For a fast scan, `limit_per_target` around 50 is enough. If you want deeper theme coverage, 150 to 200 reviews per app gives the clustering tools more evidence to work with.

### How do I focus the analysis on one problem area?

Use `focus` in `cluster_themes` to narrow the analysis to things like pricing, ads, onboarding, bugs, or retention. That keeps the output centered on the issue you care about.

### Can it show whether sentiment is improving or slipping?

Yes. `sentiment_trends` tracks rating mix, sentiment score, and recurring terms over time, so you can see whether review momentum is moving up or down.

---

## Get Started with ToolRouter

**Already connected?** Call any tool with `use_tool({ tool, skill, input })`. Browse tools with `discover` or visit https://toolrouter.com/llms-full.txt

**New to ToolRouter?** Connect with one command (no API key needed — auto-provisions on first use):

```bash
# MCP (Claude Code, Codex CLI)
claude mcp add toolrouter -- npx -y toolrouter-mcp

# MCP (Cursor, Windsurf, Cline, VS Code, Gemini CLI, Claude Desktop)
{"mcpServers":{"toolrouter":{"command":"npx","args":["-y","toolrouter-mcp"]}}}

# Claude Chat / Claude Cowork / Claude Mobile — add as a connector:
# Settings → Connectors → Add custom connector → URL: https://api.toolrouter.com/mcp

# ChatGPT — add as an app:
# Settings → Apps → Advanced settings → enable Developer mode → Create app → MCP Server URL: https://api.toolrouter.com/mcp

# CLI (works instantly, no restart needed)
npx -y toolrouter-mcp tools                    # browse all tools
npx -y toolrouter-mcp search "seo"             # search by keyword
npx -y toolrouter-mcp call seo analyze_page --url https://example.com
```

Free tools work immediately. For paid tools, visit https://toolrouter.com/claim to add credits.

All platforms: https://toolrouter.com/connect | Full catalog: https://toolrouter.com/llms-full.txt | Docs: https://toolrouter.com/docs