# App Review Intelligence: Compare App Store & Google Play Apps (`precious_bathmat/app-review-intelligence`) Actor

Compare your app with competitors on the App Store and Google Play. Ratings, review trends, top complaints and praise, lowest rated versions and developer reply rates, from real user reviews. Built for product, marketing and app agency teams.

- **URL**: https://apify.com/precious\_bathmat/app-review-intelligence.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Review Intelligence: Compare Apps on the App Store & Google Play

Compare **your app and your competitors on the Apple App Store and Google Play** in one run. For every app you get the store rating, what recent reviews really say, whether ratings are **improving or declining**, the **top complaints and praise**, the **app versions users hate most**, and how often the developer replies.

Enter app names or store links. No API key, no developer account and no login needed.

### What does this do?

A 4.7 star store rating can hide a lot. Most of those ratings are years old, while this month's reviews may be full of billing complaints or crash reports after a bad release. This Actor reads the newest reviews from both stores, analyzes them, and gives you one clear report per app and store, ready to compare side by side.

```mermaid
flowchart LR
    A[Your app and<br/>competitors] --> B[Newest reviews from<br/>App Store and Google Play]
    B --> C[Ratings, trend, complaints,<br/>praise, versions, replies]
    C --> D[One report per app<br/>and store, side by side]
```

### Who is it for?

| You are | You use it to |
|---|---|
| **Product managers** | See what users complain about after each release and which version caused it |
| **App marketers and ASO specialists** | Track how your ratings compare with competitors and find messaging angles |
| **App development agencies** | Win clients with an instant review audit of their app against rivals |
| **Customer support leads** | Measure developer reply rates and the issues driving 1 star reviews |
| **Investors and analysts** | Spot apps whose user sentiment is improving or falling apart |

### What data do you get?

One **app report** per app and store:

| Field | Meaning |
|---|---|
| `appName`, `developer`, `store`, `appUrl` | The app that was matched in each store |
| `storeRating`, `storeRatingCount`, `installs` | The public store rating (all time) |
| `reviewsAnalyzed`, `reviewsFrom`, `reviewsTo` | How many recent reviews were analyzed and the dates they cover |
| `averageRatingAnalyzed`, `ratingBreakdownAnalyzed` | Average and 1 to 5 star mix of those recent reviews |
| `negativeSharePercent`, `positiveSharePercent` | Share of 1-2 star and 4-5 star reviews |
| `last30DaysAverageRating`, `previous30DaysAverageRating`, `ratingTrend` | Improving, declining or stable, when reviews cover at least 60 days |
| `complaintThemes`, `praiseThemes` | Topics such as crashes, pricing, ads, login, refunds, ease of use, with share and a real example |
| `topComplaintPhrases`, `topPraisePhrases` | Most repeated two-word phrases |
| `lowestRatedVersions` | App versions with the worst average rating (10+ reviews) |
| `developerReplyRatePercent`, `developerReplyMedianHours` | How often and how fast the developer replies (Google Play) |

Turn on **Also return the individual reviews** to get every analyzed review in a separate **Reviews** table (rating, text, version, date, helpful votes, developer reply).

### Example: Duolingo vs Babbel vs Busuu

Real reports from a run in September 2026, 500 newest reviews per app and store:

| App | Store | Store rating | Recent reviews avg | 1-2 star share | Trend | Top complaint |
|---|---|---|---|---|---|---|
| Duolingo | App Store | 4.72 | 3.80 | 24.2% | not enough history | Ads (11.6%) |
| Duolingo | Google Play | 4.73 | 4.40 | 10.2% | not enough history | Ads (11.8%) |
| Babbel | App Store | 4.72 | 3.09 | 42.8% | improving | Price and subscription (19.6%) |
| Babbel | Google Play | 4.58 | 2.87 | 48.6% | **declining** | Price and subscription (24.3%) |
| Busuu | App Store | 4.71 | 4.53 | 7.8% | stable | Price and subscription (38.5%) |
| Busuu | Google Play | 4.65 | 4.37 | 10.8% | not enough history | Price and subscription (31.5%) |

All three show about 4.7 stars in the stores. The newest reviews tell a very different story: nearly half of Babbel's recent Google Play reviews are 1 or 2 stars, version 22.9.0 averaged 1.76 stars, and the developer replies to 84% of reviews, typically within about 15 hours.

#### Sample output (JSON)

```json
{
  "app": "Babbel",
  "store": "Google Play",
  "appName": "Babbel - Learn Languages",
  "storeRating": 4.58,
  "storeRatingCount": 1129458,
  "reviewsAnalyzed": 500,
  "reviewsFrom": "2026-05-12T22:03:20.553Z",
  "reviewsTo": "2026-09-14T21:07:11.799Z",
  "averageRatingAnalyzed": 2.87,
  "negativeSharePercent": 48.6,
  "last30DaysAverageRating": 2.04,
  "previous30DaysAverageRating": 2.31,
  "ratingTrend": "declining",
  "complaintThemes": [
    {
      "theme": "Price and subscription",
      "reviews": 59,
      "sharePercent": 24.3,
      "example": "You have to buy a minimum of a 3 month subscription for $50 or go with a year for $100. You cant go month to month…"
    }
  ],
  "topComplaintPhrases": [
    { "phrase": "first lesson", "reviews": 7 },
    { "phrase": "without paying", "reviews": 5 }
  ],
  "lowestRatedVersions": [
    { "version": "22.9.0", "reviews": 17, "averageRating": 1.76, "negativeSharePercent": 88.2 }
  ],
  "developerReplyRatePercent": 84,
  "developerReplyMedianHours": 15.2
}
```

### How to use it

1. Enter your app and competitors, one per line. Any of these work:
   - an app name: `Duolingo`
   - an App Store link: `https://apps.apple.com/us/app/duolingo-language-lessons/id570060128`
   - a Google Play link or package name: `com.duolingo`
2. Choose the stores, country and how many recent reviews to analyze.
3. Click **Start**. Compare the reports in the table, or export to Excel, CSV or JSON.

**Tip:** schedule a monthly run for your app and your top three competitors to watch ratings and complaints over time.

### Popular comparisons

Ready to run audits:

- [Duolingo vs Babbel vs Busuu (language learning)](https://apify.com/precious_bathmat/app-review-intelligence/examples/duolingo-vs-babbel-vs-busuu-reviews)
- [Tinder vs Bumble vs Hinge (dating)](https://apify.com/precious_bathmat/app-review-intelligence/examples/tinder-vs-bumble-vs-hinge-reviews)
- [Calm vs Headspace vs Insight Timer (meditation)](https://apify.com/precious_bathmat/app-review-intelligence/examples/calm-vs-headspace-reviews)
- [DoorDash vs Uber Eats vs Grubhub (food delivery)](https://apify.com/precious_bathmat/app-review-intelligence/examples/doordash-vs-uber-eats-vs-grubhub-reviews)
- [MyFitnessPal vs Strava vs Fitbit (fitness)](https://apify.com/precious_bathmat/app-review-intelligence/examples/myfitnesspal-vs-strava-vs-fitbit-reviews)
- [Netflix vs Disney+ vs Hulu (streaming)](https://apify.com/precious_bathmat/app-review-intelligence/examples/netflix-vs-disney-plus-vs-hulu-reviews)
- [Cash App vs Chime vs Revolut (banking)](https://apify.com/precious_bathmat/app-review-intelligence/examples/cash-app-vs-chime-vs-revolut-reviews)
- [Uber vs Lyft vs Grab (ride hailing)](https://apify.com/precious_bathmat/app-review-intelligence/examples/uber-vs-lyft-vs-grab-reviews)
- [Temu vs SHEIN vs Amazon (shopping)](https://apify.com/precious_bathmat/app-review-intelligence/examples/temu-vs-shein-vs-amazon-reviews)
- [ChatGPT vs Claude vs Gemini (AI assistants)](https://apify.com/precious_bathmat/app-review-intelligence/examples/chatgpt-vs-claude-vs-gemini-reviews)
- [Notion vs Todoist vs Asana (productivity)](https://apify.com/precious_bathmat/app-review-intelligence/examples/notion-vs-todoist-vs-asana-reviews)

**Single app**

- [App Store review analysis for any app](https://apify.com/precious_bathmat/app-review-intelligence/examples/app-store-review-analysis)
- [Google Play review analysis for any app](https://apify.com/precious_bathmat/app-review-intelligence/examples/google-play-review-analysis)

#### Run it with the API

```bash
curl -X POST "https://api.apify.com/v2/acts/precious_bathmat~app-review-intelligence/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "apps": ["Duolingo", "Babbel", "Busuu"],
    "country": "us",
    "maxReviewsPerStore": 500
  }'
```

### Pricing

- **$0.03 per app report** (one app on one store)
- **$0.25 per 1,000 individual reviews**, only when you turn that option on

| Job | Cost |
|---|---|
| One app on both stores | $0.06 |
| Your app and 3 competitors on both stores | $0.24 |
| 4 apps on both stores with 500 reviews each included | $0.24 + $1.00 |

Apps that cannot be found are not charged, and nothing is delivered beyond the spending limit you set for a run.

### FAQ

**How many reviews can it analyze?**
Apple shares only the **500 most recent App Store reviews per country**. Google Play allows up to 5,000 per app here. Popular apps get hundreds of reviews a day, so for them the analysis covers the last few days; smaller apps can cover months. Every report shows `reviewsFrom` and `reviewsTo`.

**Why is the trend sometimes empty?**
Improving, declining or stable is only calculated when the analyzed reviews cover at least 60 days, with at least 10 reviews in each of the last two 30 day periods. Otherwise it would be guesswork.

**How are complaint and praise themes found?**
With English keyword lists for common topics (crashes and bugs, login, ads, pricing, refunds, speed, updates, support, connection, payments, privacy; ease of use, features, reliability, value, design). No AI service is used. Themes work best for English reviews.

**How does a name search pick the app?**
It looks at the top store search results and only accepts an app whose name or developer contains every word you typed. If nothing matches, the app is reported as not found and not charged. Use a store link to pick an exact app.

**Why is there no developer reply rate for the App Store?**
Apple's public review feed does not include developer responses.

**Can I check other countries?**
Yes. Set the two letter country code, such as gb, de or in, and for Google Play the language code.

# Actor input Schema

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

One app per line. Use an app name (searched on each selected store), an App Store link or ID, or a Google Play link or package name such as com.duolingo. Add your competitors to compare them side by side.

## `stores` (type: `array`):

Stores to check when you enter an app name. Links and IDs always use their own store.

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

Two letter country code for the store, for example us, gb, de, in.

## `language` (type: `string`):

Two letter language code for Google Play reviews, for example en, es, de. Complaint and praise themes are detected in English.

## `maxReviewsPerStore` (type: `integer`):

The newest reviews are analyzed. Apple shares at most the 500 most recent App Store reviews per country; Google Play allows up to 5,000 here. More reviews reach further back in time.

## `includeReviews` (type: `boolean`):

Add every analyzed review as its own row (rating, text, version, date, developer reply). Charged per review.

## Actor input object example

```json
{
  "apps": [
    "Duolingo",
    "Babbel",
    "Busuu"
  ],
  "stores": [
    "appStore",
    "googlePlay"
  ],
  "country": "us",
  "language": "en",
  "maxReviewsPerStore": 500,
  "includeReviews": false
}
```

# Actor output Schema

## `reports` (type: `string`):

One row per app and store with ratings, trend, complaints, praise and versions.

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

Individual reviews, when "Also return the individual reviews" is on.

## `summary` (type: `string`):

Which store app each input matched, how many reviews were analyzed, and apps that were not 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": [
        "Duolingo",
        "Babbel",
        "Busuu"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/app-review-intelligence").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": [
        "Duolingo",
        "Babbel",
        "Busuu",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/app-review-intelligence").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": [
    "Duolingo",
    "Babbel",
    "Busuu"
  ]
}' |
apify call precious_bathmat/app-review-intelligence --silent --output-dataset

```

## MCP server setup

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

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/nvxL7BS7bfVbtXNtl/builds/0ANNnFPghI4bYYWUZ/openapi.json
