# Google Play Scraper: Reviews & App Health Report (`brainfoods_studio/google-play-scraper`) Actor

Google Play reviews and app details, plus an App health report: which release hurt the rating, top complaints, developer reply rate. No login. $0.30 per 1,000 reviews, less on paid plans. For ASO, product teams and competitor research.

- **URL**: https://apify.com/brainfoods_studio/google-play-scraper.md
- **Developed by:** [Brainfoods Studio](https://apify.com/brainfoods_studio) (community)
- **Categories:** Developer tools, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.15 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

> **Fashionably late, and we brought a gift.** Other scrapers hand you a pile of reviews. We hand you the pile and the answer: which release hurt the rating, and what people are actually upset about.

**Google Play Scraper** gets app details and reviews for any Google Play app, in any country and language, and turns them into an **App health report**: which release hurt your rating, what people complain about, how fast the developer replies, and where the rating is heading. Download it as JSON, CSV or Excel.

**No login · No API key · $0.30 per 1,000 reviews, less on paid plans · Independent tool, not affiliated with Google**

### What does Google Play Scraper do?

- **App details**: title, developer, rating, number of ratings, the 1–5★ histogram, installs, genre, price, last update and version.
- **Reviews, up to 20,000 per app**, with the app version each was written on, the developer's reply and its date, and Google's aspect ratings.
- **The App health report**: release impact, complaint themes, reply analytics and the rating trend, in one row per app.
- **Free detail rows** behind the report: one per app version and one per complaint theme, with the most-liked reviews for each.
- **Monitor mode**: only new reviews on each run, with the 1–2★ ones sent to Slack first.

### Who is it for?

- **Product and mobile teams** finding out which release hurt the rating, before the next one ships.
- **ASO and growth marketers** tracking ratings, complaint themes and competitors' changes.
- **Support and community teams** measuring how fast, and how often, angry reviews get a reply.
- **Investors and analysts** comparing app health across a category with the same rules for every app.

### Use cases

| You want to | What to set |
| --- | --- |
| Know which release hurt your rating | `healthReport`, with at least 500 reviews |
| Read what 1–2★ reviewers say | `stars` set to `[1, 2]` |
| Compare your app with 5 competitors | 6 `apps`, with `healthReport` on |
| Pull app details for a list of apps | `includeReviews` set to `false` |
| Get new bad reviews in Slack every morning | `monitorKey` and `deliveryWebhookUrl`, on a daily schedule |

### The App health report

A spreadsheet of 2,000 reviews still leaves the real question open: what changed, and why? The report answers it for each app, from the reviews in your run.

| Part | What it tells you |
| --- | --- |
| **Release impact** | Average rating and 1-star share for every app version. A release that drops the rating by 0.3 or more, or raises the 1-star share by 10 points, is flagged. |
| **Complaint themes** | Crashes, login, ads, pricing, performance, updates, UI, support, privacy, notifications, data loss and connectivity. Each comes with its share of negative reviews and whether it's rising in the last 30 days. |
| **Developer responsiveness** | Reply rate, overall and on 1–2★ reviews, and the median time to reply. |
| **Rating trend** | The last 30 days against the 30 before, plus up to 12 weekly averages. |
| **Google's aspect answers** | How reviewers answered Google's quick questions on stability, usability, performance, visual appeal, ads and battery, counted per answer. |

Each report starts with one sentence your team can paste into a status update:

```text
Rating 3.83. Worst release 9.1.94.1923 (3.18★, 31.6% 1★). Top complaint: pricing and subscription (33.2% of negative reviews).
```

That is Spotify's real headline from 5,000 reviews on 1 November 2026. When the reviews reach back far enough, the headline also compares the last 30 days with the 30 before.

Parts with too little data are left out of that sentence instead of guessed. Free `version` and `theme` rows carry the detail behind it, with the most-liked negative reviews for each theme so you can read them yourself.

Of the 173 Google Play actors on the Apify Store we checked on 1 November 2026, we found none that computes release impact, complaint themes or reply analytics. They return raw reviews.

### What we measured

Live runs on Apify Proxy, 1 November 2026, newest 5,000 reviews per app:

| Check | Result |
| --- | --- |
| Spotify, release impact | 9.1.92 averaged 3.87★ over 2,685 reviews, down from 4.32★ on 9.1.90: flagged as a regression. A smaller build, 9.1.94.1923, sat at 3.18★ with 31.6% 1★ |
| Spotify, responsiveness | the developer replied to 14% of reviews and 35.5% of 1–2★ reviews, with a median reply time of 5.4 hours |
| Duolingo | 4.44★, no regressions across 10 releases, top complaint pricing and subscription (14.2% of negative reviews), no developer replies |
| Speed | 10,000 reviews and 2 reports in 186 seconds (about 3,200 reviews per minute) |
| Version coverage | 88.4% of reviews carry the app version they were written on |
| Theme accuracy | we hand-read 40 random negative reviews: 51 of 60 theme tags were right (85%). Most misses are passing mentions, like "I enjoy no ads, but…" |

Themes come from fixed word lists, in English. They are a fast, repeatable signal, not a replacement for reading the reviews they point to.

### Reviews, with the details that matter

Every review row has the rating, text, date, thumbs-up count, the developer's reply and its date, the app version, and Google's aspect answers when the reviewer gave them. Filter by stars, sort by newest, most relevant or rating, and fetch up to 20,000 reviews per app.

The app row has the title, developer, rating, number of ratings, the 1–5★ histogram, installs, genre, price, content rating, last update and version.

### Watch an app for new reviews

Set a `monitorKey` and each run delivers only the reviews that are new since the last run with the same key. Add a `deliveryWebhookUrl` and new reviews are sent there, the 1–2★ ones first. The first run sets the baseline and sends no alert. In monitor mode, the health report covers the new reviews only.

### Built to finish the run

- Every request runs in a warmed-up session with its own cookies and proxy address, and requests are paced.
- Rate limits and block pages are retried with a growing pause. A session that stops working is replaced.
- **A failed app never fails the run.** An app that doesn't exist gets an error row, and every other app still finishes.

### How to use the Google Play scraper

1. Click **Try for free**.
2. Enter up to 50 **apps**, as package names like `com.spotify.music` or Play Store URLs.
3. Set the **country** and **language**, and how many reviews you want per app.
4. Switch on **App health report** if you want the analysis. It reads at least 500 reviews per app.
5. Click **Start**, then download the dataset as JSON, CSV or Excel, or run the actor from the [Apify API](https://docs.apify.com/api/v2) or on a schedule.

#### Input example

```json
{
  "apps": ["com.spotify.music"],
  "country": "US",
  "language": "en",
  "maxReviewsPerApp": 1000,
  "sort": "newest",
  "healthReport": true
}
```

#### More ready-to-run inputs

| Use case | Input |
| --- | --- |
| App details only, several apps | `{"apps": ["com.spotify.music", "com.netflix.mediaclient"], "includeReviews": false}` |
| Only 1★ and 2★ reviews | `{"apps": ["com.spotify.music"], "stars": [1, 2], "maxReviewsPerApp": 500}` |
| Reviews from Germany, in German | `{"apps": ["com.spotify.music"], "country": "DE", "language": "de"}` |
| Daily watch for new reviews | `{"apps": ["com.spotify.music"], "monitorKey": "spotify-us"}` |

#### Use it from an AI agent

Add the actor to any MCP client (Claude, Cursor, VS Code and others) through Apify's hosted MCP server:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=brainfoods_studio/google-play-scraper"
    }
  }
}
```

Then ask in plain words: *"Run a health report on the Spotify app in the US and tell me which release hurt the rating most and what people complain about."* See [Apify's MCP docs](https://docs.apify.com/platform/integrations/mcp).

### Integrations

Everything runs on Apify, so it plugs into the tools you already use:

- **Apify API and SDKs** (JavaScript, Python) to start runs and read results from your own code.
- **Schedules** to check apps daily or weekly. Monitor mode then returns only new reviews.
- **Make, Zapier and n8n** to send reviews to Google Sheets, Jira, a helpdesk or a database without writing code.
- **Webhooks and Slack** to get the newest 1–2★ reviews as a message.
- **MCP** for Claude, Cursor and other AI agents, as shown above.

See [Apify integrations](https://docs.apify.com/platform/integrations).

### What you get

| Row type | One row per | Main columns |
| --- | --- | --- |
| `app` | app | `title`, `developer`, `score`, `ratingsCount`, `stars1`–`stars5`, `installs`, `genre`, `updated`, `version` |
| `review` | review | `score`, `text`, `date`, `thumbsUp`, `appVersion`, `replyText`, `replyDate`, `aspects`, `themes` |
| `report` | app, with the health report on | `headline`, `ratingChange`, `worstRelease`, `topComplaint`, `risingComplaint`, `replyRate`, `medianReplyHours`, `weeklyRatings`, `googleAspects`, `lowSample` |
| `version` | app version with 10+ reviews (free) | `reviews`, `avgScore`, `oneStarShare`, `deltaVsPrevious`, `regression` |
| `theme` | complaint theme (free) | `mentions`, `shareOfNegative`, `last30ShareOfNegative`, `prev30ShareOfNegative`, `exampleReviewIds` |
| `summary` | app (free) | `reviews`, `avgScore`, `firstDate`, `lastDate` |
| `error` | failed step | `stage`, `errorKind`, `message` |

The app row for Spotify on 1 November 2026: 4.35★ from 36,573,245 ratings, 1,000,000,000+ installs, Music & Audio, updated Oct 23, 2026. Its reviews carry versions like `9.1.94.1929`.

### Pricing

| Result | Free plan | Bronze | Silver | Gold and up |
| --- | --- | --- | --- | --- |
| App details, per app | $0.002 | $0.0015 | $0.0012 | $0.001 |
| Review | $0.0003 | $0.00025 | $0.0002 | $0.00015 |
| App health report, per app | $0.05 | $0.04 | $0.035 | $0.03 |
| Alert, per alert sent | $0.01 | $0.01 | $0.01 | $0.01 |

- **Charged only after your results are saved.** Never for error rows, version rows, theme rows or summaries.
- **The report needs at least 20 reviews.** Below that, there's no report and no charge.
- Reviews you filter out by stars are never charged.
- **Never past your spending limit.** When the limit is reached, the actor stops fetching, and the run still succeeds.
- **No extra start fee.** Only Apify's standard run start charge of $0.00005 applies.

What typical runs cost, before the start charge:

| Run | Free plan | Bronze |
| --- | --- | --- |
| 10 apps, details only | $0.02 | $0.015 |
| 1 app, details and 200 reviews | $0.062 | $0.052 |
| 1 app, details, 500 reviews and the health report | $0.20 | $0.17 |
| 1 app, 5,000 reviews | $1.50 | $1.25 |

### FAQ

#### Do I need a Google account or an API key?

No. You only need an Apify account. Click **Try for free**, enter a package name like `com.spotify.music` and start.

#### How are complaint themes found?

Each theme has a fixed word list. "Crashes" matches words like crash, freeze, bug and won't open; "ads" matches ad, ads and advert, but not "add" or "padding". A review can count toward several themes. The rules are the same on every run, so this month's numbers compare with last month's.

#### Is the report written by an AI model?

No. Every number comes from counting and averaging the reviews in your run, with fixed rules. The headline sentence is built from those numbers.

#### How many reviews does the report need?

At least 20 for a report, and the actor reads at least 500 per app when the report is on. With fewer than 100 reviews, the report is marked `lowSample`. The 30-day change needs at least 10 reviews on each side.

#### Can I get reviews from another country or language?

Yes. Set `country` and `language`, for example `GB` and `en`, or `BR` and `pt`. Google decides which reviews it shows for each pair.

### Legal note

This actor reads public Google Play pages. It does not solve captchas and does not try to get around anti-bot checks. It respects Google's rate limits by waiting and backing off. Use the data in line with Google's terms, reviewers' privacy and the laws where you live.

### More from Brainfoods Studio

- [Google Trends Scraper](https://apify.com/brainfoods_studio/google-trends-scraper): interest over time for up to 100 keywords on one 0–100 scale, plus regions, related queries and trending now.
- [Google News Scraper](https://apify.com/brainfoods_studio/google-news-scraper): articles by search, topic or top stories, past the 100-article cap, with real publisher URLs.
- [Google Ads Transparency Scraper](https://apify.com/brainfoods_studio/google-ads-transparency-scraper): every ad a brand runs on Google, by name, ID or website, with dates, countries and ad text.

### Support

We're the new kids on this Store, so every issue gets an answer from the people who wrote the code. Found a problem, or need a field we don't return yet? Open an issue in the **Issues** tab. And if this actor saved you an afternoon, a review helps the next person find it.

Built and maintained by Brainfoods Studio.

# Changelog

This Actor's version history is a separate document: https://apify.com/brainfoods_studio/google-play-scraper/changelog.md

# Actor input Schema

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

Apps to scrape, up to 50. Give package names like com.spotify.music or Google Play URLs. Duplicates are removed.

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

Two-letter country code of the Play Store, for example US, GB or IN. Prices, availability and reviews differ by country.

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

Two-letter language code for app texts and review translations, for example en, de or fr.

## `includeDetails` (type: `boolean`):

Add one app row per app: title, developer, rating, rating histogram, installs, category, price, content rating and more. Charged per app.

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

Add review rows with text, rating, date, app version, developer reply and Google's aspect ratings. Charged per review.

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

Stop collecting reviews for an app once this many are delivered. Reviews removed by the star filter do not count. With the health report on, at least 500 are collected.

## `sort` (type: `string`):

Which reviews Google returns first. Newest first is best for monitoring and for the health report.

## `stars` (type: `array`):

Keep only reviews with these ratings, as a list of numbers from 1 to 5, for example \[1, 2]. Leave empty for all. Reviews that are filtered out are not delivered and not charged.

## `healthReport` (type: `boolean`):

Adds a report per app: rating trend, the release that hurt ratings most, complaint themes and which are rising, how fast and how often the developer replies, Google's aspect ratings, and a one-line headline. Also adds free version and theme rows and tags every review with its themes. Turns reviews on and collects at least 500 reviews per app. Charged once per app that has at least 20 reviews.

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

Apps processed in parallel, 1 to 8. The default of 2 is the safest; higher is faster but more likely to be rate-limited by Google.

## `proxyConfiguration` (type: `object`):

Apify Proxy is strongly recommended. Datacenter is tried first; residential is used automatically after repeated 429s if your plan has it.

## `monitorKey` (type: `string`):

Turns on monitor mode. Reviews are remembered under this name, and later runs with the same name return only reviews you haven't seen. The health report then covers only those new reviews. Use one name per schedule.

## `deliveryWebhookUrl` (type: `string`):

Optional. A Slack incoming-webhook URL or any HTTPS endpoint. When a monitored run finds new reviews, it posts a short alert with a link to the results, 1 and 2 star reviews first. Charged as one alert per run that sends one. Stored encrypted and hidden from logs, because a webhook URL works like a password.

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music"
  ],
  "country": "US",
  "language": "en",
  "includeDetails": true,
  "includeReviews": true,
  "maxReviewsPerApp": 40,
  "sort": "newest",
  "healthReport": false,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All rows: app details, reviews, the App health report with its version and theme rows, a free summary row per app, and error rows for any app or page that failed.

## `stats` (type: `string`):

Requests, successes, rate limits, retries, session changes and a summary of rows and charges for this run.

# 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": [
        "com.spotify.music"
    ],
    "maxReviewsPerApp": 40,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("brainfoods_studio/google-play-scraper").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": ["com.spotify.music"],
    "maxReviewsPerApp": 40,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("brainfoods_studio/google-play-scraper").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": [
    "com.spotify.music"
  ],
  "maxReviewsPerApp": 40,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call brainfoods_studio/google-play-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brainfoods_studio/google-play-scraper"
        }
    }
}
```

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/JSpcUk33nalMbNr39/builds/LMxCRDCr0Qgo6k6Zh/openapi.json
