# Google Play Reviews Scraper with AI Insights (`bozomalabs/google-play-reviews-scraper`) Actor

Scrape Apple App Store and Google Play reviews in one run: rating, title, text, version, date, helpful votes and developer replies. Filter by stars and date, choose countries, and add optional review insights (complaints, praise, feature requests, worst versions). Export to CSV, Excel or JSON.

- **URL**: https://apify.com/bozomalabs/google-play-reviews-scraper.md
- **Developed by:** [Bozoma Labs](https://apify.com/bozomalabs) (community)
- **Categories:** AI, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 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

## Google Play Reviews Scraper with AI Insights

Scrape Google Play reviews for any Android app. Paste package names or Play Store links, pick a country and language, filter by stars and date, and export clean rows to CSV, Excel, JSON or Google Sheets. Includes developer replies, app version and thumbs-up counts. Turn on **Insights** for a ready summary of what users complain about, what they love, what they ask for and which versions hurt the rating.

Built by **Bozoma Labs**. Public Play Store data only. No login, no browser, fast and cheap. Thousands of reviews per app, newest first.

### What you get

| Field | Description |
|---|---|
| platform | `googleplay` (or `appstore` for experimental input) |
| appId, appName | Store ID / package and app title |
| country | Store country the review came from |
| reviewId | Store review ID (used to dedupe) |
| rating | 1 to 5 stars |
| title | Review title (Play rarely has one) |
| text | Review text |
| reviewerName | Public display name (empty if you turn on "Omit reviewer names") |
| publishedDate | ISO date |
| appVersion | App version the reviewer used |
| helpfulVotes | Votes or thumbs up |
| replyText, replyDate | Developer reply (when "Include developer replies" is on) |
| reviewUrl | Link to the review when the store provides one |
| verified | Always empty; kept so exports match review analyzer templates |

The **Review Analyzer** view exports exactly: Rating, Review text, Title, Published date, Reviewer name, Verified.

### Insights add-on

With `insights: true`, each app gets one record in the `insights` dataset:

- average rating, star distribution and share of 1 to 2 star reviews
- top complaint phrases and top praise phrases (ranked against the opposite sentiment, so generic words drop out)
- feature requests ("please add", "wish it", "would be nice")
- lowest rated app versions (5+ reviews)
- monthly review count and average rating

Insights are computed from the reviews this run collected, with no external AI service, so they are fast and repeatable.

### Input example

```json
{
  "googlePlayApps": ["com.spotify.music", "https://play.google.com/store/apps/details?id=com.duolingo"],
  "maxReviewsPerApp": 500,
  "countries": ["us"],
  "language": "en",
  "stars": ["1", "2"],
  "dateFrom": "2026-09-01",
  "includeReplies": true,
  "insights": true
}
```

### Pricing

Pay per result:

- **$0.30 per 1,000 reviews** ($0.0003 per review)
- **$0.05 per app** for the Insights add-on (only if turned on and reviews were found)
- **$0.005** per run start

Example: 5 apps x 1,000 reviews with insights is about $1.75. Set a maximum cost per run in Apify and the Actor stops cleanly when it is reached.

### Limits to know

- **Google Play**: reviews come newest first, with developer replies. Use `dateFrom` to stop early on large apps.
- Star and date filters are applied after fetching, so heavily filtered runs read more pages, but you only pay for saved reviews.
- **App Store (experimental)**: Apple's public review feed currently returns no reviews, so App Store input only collects the roughly 10 reviews shown on each country's public app page. Treat it as a preview, not full coverage.

### Use cases

- Track competitor Android apps and spot their weak points
- Feed reviews into a spreadsheet, BI tool or your own analysis
- Monitor rating drops after a release (schedule this Actor daily with `dateFrom`)
- Mine feature requests for your roadmap

### FAQ

**Is this legal?** It collects publicly visible store reviews only, without logging in. You are responsible for how you use the data, including personal data rules such as GDPR. Turn on "Omit reviewer names" if you do not need names.

**Do I need a proxy?** Usually not.

**Support**: open an issue on the Actor's Issues tab.

# Actor input Schema

## `googlePlayApps` (type: `array`):

Google Play package names (e.g. com.spotify.music) or app URLs (https://play.google.com/store/apps/details?id=com.spotify.music).

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

Stop after this many reviews per app (after filters). 0 means no limit.

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

Two-letter store country codes. Google Play uses the first one. For experimental App Store input, each country adds about 10 reviews.

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

Language code for Google Play reviews, e.g. en, de, fr.

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

Keep only these star ratings. Leave empty for all.

## `dateFrom` (type: `string`):

Keep reviews published on or after this date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Keep reviews published on or before this date (YYYY-MM-DD).

## `includeReplies` (type: `boolean`):

Add replyText and replyDate columns with the developer reply.

## `omitReviewerNames` (type: `boolean`):

Leave reviewerName empty, for privacy-friendly exports.

## `insights` (type: `boolean`):

Per app: rating breakdown, monthly trend, top complaint and praise phrases, feature requests and lowest-rated versions, saved to the 'insights' dataset. Charged once per app.

## `appStoreApps` (type: `array`):

Experimental. Apple currently exposes only about 10 public reviews per app per country, so expect small results. Accepts App Store IDs or apps.apple.com URLs.

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

Usually not needed. Both stores serve public data without a proxy.

## Actor input object example

```json
{
  "googlePlayApps": [
    "com.spotify.music",
    "https://play.google.com/store/apps/details?id=com.duolingo"
  ],
  "maxReviewsPerApp": 200,
  "countries": [
    "us"
  ],
  "language": "en",
  "stars": [],
  "includeReplies": true,
  "omitReviewerNames": false,
  "insights": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One dataset item per review, including rating, text, date, app version, helpful votes and developer replies.

# 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 = {
    "googlePlayApps": [
        "com.spotify.music",
        "https://play.google.com/store/apps/details?id=com.duolingo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bozomalabs/google-play-reviews-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 = { "googlePlayApps": [
        "com.spotify.music",
        "https://play.google.com/store/apps/details?id=com.duolingo",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("bozomalabs/google-play-reviews-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 '{
  "googlePlayApps": [
    "com.spotify.music",
    "https://play.google.com/store/apps/details?id=com.duolingo"
  ]
}' |
apify call bozomalabs/google-play-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bozomalabs/google-play-reviews-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/0hPDSgEXqvldTNWqU/builds/uPkjkFWNldamXhj9c/openapi.json
