# Google Play Store Reviews Scraper API | $0.10/1K (`angaba92/google-play-reviews-scraper`) Actor

Scrape Google Play Store reviews from up to 20 Android apps per run. Get ratings, text, authors, likes, app versions and developer replies. $0.10 per 1,000 reviews. Export CSV, JSON, Excel or API.

- **URL**: https://apify.com/angaba92/google-play-reviews-scraper.md
- **Developed by:** [Andres Garcia-Baquero Leon](https://apify.com/angaba92) (community)
- **Categories:** Developer tools, Automation, Integrations
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 google play reviews

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Play Reviews Scraper

Extract **raw Google Play Store reviews from up to 20 apps in one run** and export them to JSON, CSV, Excel, XML, RSS, or the Apify API.

Enter Android package names or Google Play URLs. The Actor paginates each app independently and returns one dataset item per unique review, including rating, text, author, avatar, date, likes, app version, and developer reply.

> **Launch price:** $0.10 per 1,000 delivered reviews. A 100-review test run costs $0.01005 including the Actor-start event.

Need iPhone or iPad reviews instead? Use the [Apple App Store Reviews Scraper](https://apify.com/angaba92/apple-app-store-reviews-scraper), with the same multi-app input and per-review price.

| Platform | Actor | Multi-app | Rating filters | Price |
|---|---|---:|---:|---:|
| Android / Google Play | This Actor | Yes | Yes | $0.10/1K reviews |
| iOS / Apple App Store | [Apple App Store Reviews Scraper](https://apify.com/angaba92/apple-app-store-reviews-scraper) | Yes | Yes | $0.10/1K reviews |

### Why use this Actor?

| Manual collection | Google Play Reviews Scraper |
|---|---|
| Copy reviews one by one | Up to 50,000 reviews per run |
| Lose stable review IDs | Every row includes `reviewId` |
| Developer replies require extra work | Reply text, author, and date included |
| Hard to reproduce locale settings | Explicit language and country inputs |
| Custom export code required | CSV, JSON, Excel, XML and API exports |

The Actor returns source data without sentiment analysis, scoring, or opinionated classification. You receive flexible raw reviews for your own analytics pipeline.

### Example output

```json
{
  "appId": "com.spotify.music",
  "appUrl": "https://play.google.com/store/apps/details?id=com.spotify.music",
  "reviewId": "ad1d9be2-0959-4e98-8229-ee3ee4d9df0e",
  "authorName": "Angel Mead (Willow)",
  "authorAvatarUrl": "https://play-lh.googleusercontent.com/a-/...",
  "rating": 3,
  "text": "I love music...",
  "thumbsUp": 41,
  "reviewTimestamp": 1775779464,
  "reviewDate": "2026-04-09T22:44:24Z",
  "appVersion": "9.1.36.1948",
  "language": "en",
  "country": "US",
  "developerReply": {
    "author": "Spotify AB",
    "text": "Hi. We'll pass this on to the ads team...",
    "replyTimestamp": 1775819853,
    "replyDate": "2026-04-10T09:57:33Z"
  }
}
```

The values above are an abbreviated real response shape. Review text and URLs are not synthesized.

### Output fields

| Field | Type | Description |
|---|---|---|
| `appId` | string | Android package name |
| `appUrl` | string | Canonical Google Play details URL |
| `reviewId` | string | Stable Google Play review identifier |
| `authorName` | string/null | Public reviewer display name |
| `authorAvatarUrl` | string/null | Public reviewer avatar URL |
| `rating` | integer | Star rating from 1 to 5 |
| `text` | string/null | Review body |
| `thumbsUp` | integer/null | Helpful-vote count |
| `reviewTimestamp` | integer/null | Review time as Unix epoch seconds |
| `reviewDate` | string/null | Review time in UTC ISO 8601 format |
| `appVersion` | string/null | App version associated with the review |
| `language` | string | Requested Google Play language |
| `country` | string | Requested Google Play country |
| `developerReply` | object/null | Developer name, reply text, epoch, and UTC date |

### Input

| Field | Required | Default | Description |
|---|---|---|---|
| `appIds` | No | Spotify | Up to 20 package names or full Google Play URLs |
| `maxResultsPerApp` | No | `100` | Maximum matching unique reviews for each app, 1-50,000 |
| `sort` | No | `newest` | `newest`, `most_relevant`, or `rating` |
| `language` | No | `en` | Language code such as `en`, `es`, or `pt-BR` |
| `country` | No | `US` | Two-letter country code such as `US`, `ES`, or `DE` |
| `minRating` | No | `1` | Minimum star rating |
| `maxRating` | No | `5` | Maximum star rating |

No input is technically required so Apify health checks can run safely. Empty input uses a public Spotify listing and returns data.

### Input examples

#### Get the newest 1,000 reviews for each of two apps

```json
{
  "appIds": ["com.whatsapp", "com.spotify.music"],
  "maxResultsPerApp": 1000,
  "sort": "newest",
  "language": "en",
  "country": "US"
}
```

#### Get negative reviews in Spanish

```json
{
  "appIds": ["https://play.google.com/store/apps/details?id=com.spotify.music"],
  "maxResultsPerApp": 500,
  "sort": "newest",
  "language": "es",
  "country": "ES",
  "minRating": 1,
  "maxRating": 2
}
```

Rating filters are applied after each Google Play page is fetched. A narrow filter may require more source pages than the final number of results.

### How to use

1. Open the Actor and click **Try for free**.
2. Paste an Android package name or Google Play app URL.
3. Choose review count, sort order, locale, and optional rating range.
4. Click **Start**.
5. Open the **Dataset** tab and export to CSV, JSON, Excel, XML, RSS, or access the dataset through the Apify API.

If the Actor saved you time, please leave an honest review on its Apify Store page. Feedback about missing fields or difficult inputs is equally useful and helps improve the product.

### Pricing

The launch target is **$0.0001 per delivered review** using Apify Pay Per Event.

You pay for dataset rows, not requested rows or source pages. If your run budget is reached, the Actor stops before delivering unpaid reviews.

Examples at the launch target:

| Delivered reviews | Result charge |
|---:|---:|
| 100 | $0.01 |
| 1,000 | $0.10 |
| 10,000 | $1.00 |

Apify platform charges and plan rules may also apply. Check the live Pricing tab for the authoritative current price.

### Use cases

- **Product teams:** collect user complaints and feature requests for downstream analysis.
- **App developers:** track review changes after releases.
- **Market researchers:** compare ratings and review language across competing apps.
- **Customer support:** identify reviews with developer responses.
- **Data teams:** create reproducible review datasets by locale.
- **Agencies:** export client app feedback to Google Sheets, BI tools, or warehouses.

### Integrations

Use Apify integrations to send reviews to:

- Google Sheets
- Make
- Zapier
- n8n
- Slack
- Webhooks
- Airbyte
- LangChain or custom RAG pipelines
- Any application through the Apify REST API

### Technical behavior

- Uses Google Play's internal review RPC (`UsvDTd`).
- Does not require Google login or user-provided cookies.
- Does not require a proxy under normal conditions.
- Requests up to 150 source reviews per page.
- Deduplicates by `reviewId` across all pages.
- Stops if a page repeats IDs, preventing silent pagination loops.
- Retries transient 403, 408, 429, and 5xx responses with exponential backoff.
- Pushes results incrementally, so completed pages remain available if a later page fails.
- Couples each dataset write to the `review` billing event atomically.

Google Play is an external service and may change its internal protocol. Runs can also return fewer reviews than requested when an app has limited public review history for the selected locale.

### FAQ

#### Can I use a full Google Play URL?

Yes. The Actor extracts the `id` query parameter automatically. Package names such as `com.spotify.music` also work directly.

#### Does it support every public Android app?

It is designed for public listings that expose reviews in Google Play. Removed, private, region-blocked, or review-free apps may return no rows.

#### Are the reviews unique?

Yes. The Actor deduplicates every page by Google Play's stable `reviewId`. It also stops if pagination unexpectedly repeats a page.

#### Can I fetch only one-star reviews?

Yes. Set both `minRating` and `maxRating` to `1`.

#### Why can a filtered run fetch many pages?

Google applies sort and locale at the source. Rating ranges are filtered locally, so the Actor keeps paginating until it collects the requested number, exhausts the source, reaches the budget, or detects repetition.

#### Does it include developer responses?

Yes, when Google Play returns one. The nested object includes developer name, reply text, Unix timestamp, and ISO date.

#### Does it perform sentiment analysis?

No. It intentionally returns raw source data. You can classify or summarize it with your preferred model or analytics stack.

#### Do I need a proxy or Google account?

No proxy, login, cookies, or Google API key are required for normal runs.

#### Can I schedule recurring collection?

Yes. Use Apify Schedules and store `reviewId` in your downstream system to identify newly observed reviews.

### Troubleshooting

| Problem | Explanation / solution |
|---|---|
| No results | Confirm the app is public and has reviews in the selected country/language |
| Fewer results than requested | The review history or selected rating range may be exhausted |
| Invalid app ID warning | Use a package name or URL containing `?id=package.name` |
| Run stops after a repeated page | Pagination returned no new IDs; stopping prevents duplicate charges |
| Run stops at a round budget boundary | `maxTotalChargeUsd` was reached; increase the run budget if desired |
| Temporary HTTP error | The Actor retries transient errors automatically; rerun if Google remains unavailable |

### Responsible use

Only collect public data and comply with applicable laws, Google Play terms, privacy rules, and your intended use. Do not use this Actor to harass reviewers or build sensitive personal profiles.

# Actor input Schema

## `appIds` (type: `array`):

Up to 20 Android package names or full Google Play URLs. One run can collect several apps.

## `maxResultsPerApp` (type: `integer`):

Maximum matching unique reviews returned for each app.

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

Order used by Google Play before rating filters are applied.

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

Google Play language code, such as en, es or pt-BR.

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

Two-letter Google Play country code.

## `minRating` (type: `integer`):

Return reviews with at least this many stars.

## `maxRating` (type: `integer`):

Return reviews with no more than this many stars.

## Actor input object example

```json
{
  "appIds": [
    "com.spotify.music",
    "com.whatsapp"
  ],
  "maxResultsPerApp": 100,
  "sort": "newest",
  "language": "en",
  "country": "US",
  "minRating": 1,
  "maxRating": 5
}
```

# Actor output Schema

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

Dataset rows containing review IDs, ratings, text, authors, dates, versions 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 = {
    "appIds": [
        "com.spotify.music",
        "com.whatsapp"
    ],
    "maxResultsPerApp": 100,
    "sort": "newest",
    "language": "en",
    "country": "US",
    "minRating": 1,
    "maxRating": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("angaba92/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 = {
    "appIds": [
        "com.spotify.music",
        "com.whatsapp",
    ],
    "maxResultsPerApp": 100,
    "sort": "newest",
    "language": "en",
    "country": "US",
    "minRating": 1,
    "maxRating": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("angaba92/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 '{
  "appIds": [
    "com.spotify.music",
    "com.whatsapp"
  ],
  "maxResultsPerApp": 100,
  "sort": "newest",
  "language": "en",
  "country": "US",
  "minRating": 1,
  "maxRating": 5
}' |
apify call angaba92/google-play-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,angaba92/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/fVBankAZdlk9iRJtr/builds/aUHilVrS2SKuQNfsr/openapi.json
