# Google Play Reviews Scraper & Exporter + AI Review Analysis (`spokentext/google-play-reviews`) Actor

Google Play reviews scraper and exporter with AI review analysis: get reviews for any app, language and country, plus a report of themes, problems and bugs, feature requests and praise, with exact counts and quotes. Developer replies included. Pay per review.

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

## Pricing

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

### What is Google Play Reviews Scraper + AI Insights?

**Google Play Reviews Scraper + AI Insights** gets the **reviews of any Android app** on Google Play, in the languages and country you choose, and turns them into a **report your product team can act on**. For each app, you get:

- every review, with its rating, text, app version, date, helpful votes and the **developer's reply**
- an **AI insights report**: the main themes, **problems and bugs**, **feature requests** and praise
- for each item of the report, **how many reviews mention it**, their average rating and real quotes
- ratings by app version, to see whether the latest release made things better or worse

It is built for product managers, app marketers, ASO specialists and agencies who read reviews every week and want the patterns, not just the rows.

### Why use it?

- **The report is checkable.** The AI only groups reviews; every count, share and quote is computed from the actual reviews, so you can open the ones behind each figure.
- **Reviews and analysis in one run.** No export to a spreadsheet, no copy-paste into a chatbot.
- **Up to 5,000 reviews per app and language**, newest first.
- **Developer replies included**, to see which complaints get an answer.
- **Weekly monitoring.** Set **Only reviews newer than** and a schedule to pay only for new reviews.
- **No login, no proxy.** Reviews come from Google Play's public store pages.

Because it runs on Apify, you also get scheduling, API access, integrations (Make, Zapier, n8n, Google Sheets, Slack) and exports to JSON, CSV or Excel.

### What data do you get?

| Data | Where |
|---|---|
| Rating, text, version, date, language, helpful votes, link | One row per review |
| Developer reply and its date | One row per review |
| App name, developer | On every review row |
| Summary for a product manager | Insights report |
| Themes, with sentiment | Insights report |
| Problems and bugs | Insights report |
| Feature requests | Insights report |
| Praise | Insights report |
| Rating distribution, share of 1 and 2 star reviews, ratings by version | Insights report |

### How to use it

1. Paste one or more **Google Play links** (or package names, such as `com.duolingo`).
2. Choose the **country** and the **review languages**, such as en, fr, de or pt-br.
3. Set the **maximum reviews per app and language**.
4. Keep the **AI insights report** on, and choose its language.
5. Click **Start**. The **Output** tab shows the reviews and links to each app's report.
6. For weekly monitoring, save the run as a task, set **Only reviews newer than**, and add a schedule.

### How much does it cost?

| | Price (Bronze) |
|---|---|
| Per review | $0.0001 |
| Per AI insights report (one per app) | $0.10 |

Silver and Gold tiers pay less. Examples at the Bronze price:

| Usage | Cost |
|---|---|
| 100 reviews of one app, with a report | $0.11 |
| 1,000 reviews of one app, with a report | $0.20 |
| 5 competitor apps, 200 reviews each, with reports | $0.60 |

The free Apify plan works the same way, with one AI report per run. Reports that fail are not charged.

### Input example

```json
{
    "apps": ["https://play.google.com/store/apps/details?id=com.duolingo"],
    "country": "us",
    "languages": ["en"],
    "maxReviewsPerLanguage": 100,
    "insights": true,
    "insightsLanguage": "English"
}
```

### Output example

Real results for the input above, captured on 2026-11-03.

#### Insights report (excerpt)

```json
{
    "appName": "Duolingo: Learn Languages",
    "developer": "Duolingo",
    "storeRating": 4.75,
    "installs": "500,000,000+",
    "reviewsAnalysed": 100,
    "averageRating": 4.33,
    "ratingDistribution": { "1": 8, "2": 4, "3": 5, "4": 13, "5": 70 },
    "lowRatingShare": 12,
    "summary": "Most reviewers praise Duolingo as an accessible, effective way to learn languages, often highlighting its easy lessons and broad course selection. [...] A smaller group says learning outcomes are weak or lessons contain errors, while complaints also cover chess, energy mechanics, intrusive design, and device heating.",
    "problems": [
        {
            "name": "Poor learning outcomes",
            "reviews": 6,
            "shareOfReviews": 6,
            "averageRating": 1.67,
            "examples": [
                { "rating": 2, "quote": "just like game but not really good for english learning" }
            ]
        },
        {
            "name": "Incorrect or broken lessons",
            "reviews": 3,
            "shareOfReviews": 3,
            "averageRating": 1.67,
            "examples": ["..."]
        }
    ],
    "featureRequests": [
        { "name": "Add mini-games or challenges", "reviews": 1, "shareOfReviews": 1, "averageRating": 3, "examples": [{ "rating": 3, "quote": "could be more fun like adding mini games or challenges." }] }
    ],
    "praise": [
        { "name": "Easy language learning", "reviews": 11, "shareOfReviews": 11, "averageRating": 4.55, "examples": ["..."] }
    ],
    "byVersion": [
        { "version": "6.103.6", "reviews": 78, "averageRating": 4.44 },
        { "version": "6.101.2", "reviews": 5, "averageRating": 4.8 }
    ],
    "isAiGenerated": true
}
```

| Report field | Meaning |
|---|---|
| `summary` | What users say, in a few sentences |
| `themes` | Main topics, with `sentiment` (positive, negative, mixed) |
| `problems` | Bugs, crashes and complaints |
| `featureRequests` | What users ask to add or change |
| `praise` | What users like most |
| `reviews`, `shareOfReviews` | How many of the analysed reviews mention the item, and their share |
| `averageRating` | Average stars of those reviews |
| `examples` | Quotes from real reviews, with their `reviewId` |
| `byVersion` | Reviews and average rating per app version |

#### One review

```json
{
    "appName": "Duolingo: Learn Languages",
    "rating": 5,
    "text": "great app i am enjoying learning so much 😁...it has so many fun games also it is very interactive",
    "version": "6.103.6",
    "date": "2026-11-03T06:51:19.240Z",
    "country": "us",
    "language": "en",
    "author": "Example User",
    "helpfulVotes": 0,
    "developerReply": null,
    "reviewUrl": "https://play.google.com/store/apps/details?id=com.duolingo&reviewId=9f6b6a08-3107-4eae-8a31-7cb3fbe759c6"
}
```

### Use cases

- **Product feedback:** a weekly list of the top problems and requests, with the reviews behind each one.
- **Release monitoring:** compare ratings by version right after an update.
- **Support follow-up:** find negative reviews with no developer reply.
- **Competitor research:** run your competitors' apps and see what their users complain about.
- **Agency reporting:** one report per client app, every week.

### FAQ

#### How reliable is the AI report?

The AI groups reviews and cites them by number; the Actor then counts and quotes them itself. A group with no real review behind it is dropped, so every figure matches reviews you can read in the dataset. Labels and the summary are AI-generated, which `isAiGenerated` states on every report.

#### Which AI is used?

OpenAI's `gpt-6-luna`, through OpenAI's API with storage switched off. Reviews are sent to it only to produce the report.

#### Why do I get different reviews per language?

Google Play groups reviews by the reviewer's language. List every language your users write in; the report understands all of them and is written in the language you set.

#### Is the reviewer's name included?

The public name shown on Google Play is included, as on Google's page; profile pictures are left out. If you do not need the name, drop the `author` column. You are responsible for using personal data lawfully, for example under the GDPR.

### Limits

- Up to 5,000 reviews per app and language, the most recent first.
- Up to 50 apps per run, and 1,000 reviews per report (the most recent).
- Google Play can change its pages; if a run fails, open an issue and it will be fixed.

### Other Actors you may find useful

| Actor | What it does |
|---|---|
| [App Store Reviews Scraper + AI Insights](https://apify.com/spokentext/app-store-reviews) | The same reviews and report for iPhone and iPad apps |
| [AI Share of Voice](https://apify.com/spokentext/ai-share-of-voice) | How often AI assistants recommend your brand |
| [Keyword Search Volume](https://apify.com/spokentext/keyword-search-volume) | Google search volume for your keywords |

### Run it from the API

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("spokentext/google-play-reviews").call(run_input={
    "apps": ["com.duolingo"],
    "languages": ["en", "fr"],
})
reports = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("INSIGHTS")["value"]
for report in reports:
    print(report["appName"], [problem["name"] for problem in report["problems"]])
```

This Actor is an independent tool. It is not affiliated with or endorsed by Google, OpenAI or the apps it reads; their names only describe the data it works with.

### Feedback

Something failed or gave a wrong result? Open an issue in the **Issues** tab of this page, with the error message from your results: every report is read and fixed. If the Actor saved you time, a rating helps others find it.

# Actor input Schema

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

Google Play links, such as https://play.google.com/store/apps/details?id=com.duolingo, or package names (com.duolingo). Up to 50 per run.

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

Two-letter country code of the Google Play store, such as us, gb or fr.

## `languages` (type: `array`):

Google Play groups reviews by language. Each language listed is fetched separately, such as en, fr, de or pt-br.

## `maxReviewsPerLanguage` (type: `integer`):

Newest first. Each review is charged.

## `newerThan` (type: `string`):

Skip older reviews, for example to fetch only the last week when the Actor runs on a schedule.

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

An AI report per app on the reviews fetched: themes, problems, feature requests and praise, each with the number of reviews and quotes. Charged once per app.

## `insightsLanguage` (type: `string`):

The language of the report's summary and labels, such as English, French or German. Reviews in any language are understood.

## Actor input object example

```json
{
  "apps": [
    "https://play.google.com/store/apps/details?id=com.duolingo"
  ],
  "country": "us",
  "languages": [
    "en"
  ],
  "maxReviewsPerLanguage": 100,
  "insights": true,
  "insightsLanguage": "English"
}
```

# Actor output Schema

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

No description

## `insights` (type: `string`):

No description

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

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

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

```

## MCP server setup

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

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/QUATcItu5MzBCj7b1/builds/1qPXv3OsHJcbh9FDC/openapi.json
