# Google Play Store Reviews Scraper (`xtracto/google-play-reviews-scraper`) Actor

Get user reviews for any Android app on Google Play - rating, review text, author, date, thumbs-up count, app version, and developer reply. No account, no API key.

- **URL**: https://apify.com/xtracto/google-play-reviews-scraper.md
- **Developed by:** [Farhan Febrian Nauval](https://apify.com/xtracto) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 results

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

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Store Reviews Scraper

Collect **user reviews for any Android app** on the Google Play Store — without an account, an API key, or a browser. Give the actor an app's package name and it returns every review it can reach: the star rating, the full review text, the author, the date, how many people found it helpful, the app version it was left on, and the developer's reply where one exists.

### Why use this actor

- **No account, no API key, no login** — just paste an app ID and press Run.
- **Full review detail** — rating, complete review text, author name and avatar, exact date, thumbs-up count, and the app version reviewed.
- **Developer replies included** — capture the developer's response, who wrote it, and when.
- **Any app, any country, any language** — target any Play Store storefront and language.
- **Automatic pagination** — collects thousands of reviews across pages for you, with automatic retries.
- **Clean, stable JSON** ready for spreadsheets, dashboards, databases, or sentiment-analysis pipelines. Export to JSON, CSV, or Excel, and run it on a schedule.

### How it works

1. Find the app's **package name** — it's the part after `id=` in the Play Store URL. For `https://play.google.com/store/apps/details?id=com.spotify.music`, the package name is `com.spotify.music`.
2. Set the **country**, **language**, how to **sort** the reviews, and how many you want (or just use the prefilled example).
3. Press **Run**. Reviews stream into the dataset as they are collected and can be exported to JSON, CSV, or Excel.

You don't manage any scrapers, servers, or blocks — the actor handles the session setup, pagination, retries, and pacing for you.

### Input

```json
{
  "appId": "com.spotify.music",
  "country": "us",
  "language": "en",
  "sortBy": "newest",
  "maxReviews": 200
}
````

| Field | Type | Description |
|---|---|---|
| `appId` | string | **Required.** The app's Android package name, as shown after `id=` in the Play Store URL. Example: `com.spotify.music`. |
| `country` | string | Two-letter country code for the storefront, e.g. `us`, `gb`, `de`, `id`, `jp`. Default: `us`. |
| `language` | string | Language code for review text and developer replies, e.g. `en`, `de`, `fr`, `ja`, `id`. Default: `en`. |
| `sortBy` | string | `newest` (most recent first, default), `rating` (by star rating), or `relevance` (most helpful first). |
| `maxReviews` | integer | Maximum number of reviews to collect. The actor paginates automatically until it reaches this many or runs out. Default: 200. |
| `proxyConfiguration` | object | Optional. A residential proxy matched to your country improves reliability and avoids rate limits on large runs. |

### Output

Each review is one dataset record. Real output for `com.spotify.music` (`country: "us"`, `sortBy: "newest"`):

**A typical review:**

```json
{
  "_source": "S1-batchexecute",
  "_scrapedAt": "2026-07-15T17:59:05Z",
  "appId": "com.spotify.music",
  "country": "us",
  "language": "en",
  "reviewId": "4a8ce34e-1ea6-436d-ab8e-c0afdd32e045",
  "userName": "Godson Adjei",
  "userImage": "https://play-lh.googleusercontent.com/a/ACg8ocIJAuExJtIJK88QBVxcayYi6XoVY-GmFJ4wYbnOFJFqUKC0HQ=mo",
  "score": 5,
  "text": "one of the best apps for music, I really like it",
  "at": "2026-07-14T17:57:44Z",
  "atTimestamp": 1784051864,
  "thumbsUpCount": 0,
  "appVersion": "9.1.60.1970",
  "replyContent": null,
  "repliedAt": null,
  "replyAuthor": null
}
```

**A review with a developer reply:**

```json
{
  "_source": "S1-batchexecute",
  "_scrapedAt": "2026-07-15T17:59:05Z",
  "appId": "com.spotify.music",
  "country": "us",
  "language": "en",
  "reviewId": "2768c073-5104-484a-9bdc-7832051a524c",
  "userName": "Plegendry_22",
  "userImage": "https://play-lh.googleusercontent.com/a/ACg8ocKFhX3ZunlaNU8iYsiVURHPUHsKMgUIgSLIYzc-O4TUey03Bg=mo",
  "score": 2,
  "text": "it is fine but sometimes when l want to play some other song it start playing another song which really annoys me",
  "at": "2026-07-14T17:50:58Z",
  "atTimestamp": 1784051458,
  "thumbsUpCount": 0,
  "appVersion": "9.1.64.1676",
  "replyContent": "Hi. If you're on our free service, Smart Shuffle is on by default and adds songs to keep your queue fresh. For full control, check out our Premium plans at spotify.com/premium. If you've never had Premium before, you should be eligible for our trial.",
  "repliedAt": "2026-07-14T18:17:09Z",
  "replyAuthor": "Spotify AB"
}
```

| Field | Type | Description |
|---|---|---|
| `appId` | string | The app package name that was scraped. |
| `country` | string | Storefront country code used. |
| `language` | string | Language code used. |
| `reviewId` | string | Unique ID of the review. |
| `userName` | string | Display name of the reviewer. |
| `userImage` | string | URL of the reviewer's avatar. |
| `score` | integer | Star rating, 1 to 5. |
| `text` | string | Full review text. |
| `at` | string | Review date (UTC, ISO 8601). |
| `atTimestamp` | integer | Review date as a Unix timestamp (seconds). |
| `thumbsUpCount` | integer | How many people marked the review helpful. |
| `appVersion` | string | App version the review was left on (may be null). |
| `replyContent` | string | Developer's reply text, or null if none. |
| `repliedAt` | string | Date of the developer's reply (UTC, ISO 8601), or null. |
| `replyAuthor` | string | Name the developer replied under, or null. |
| `_source` | string | Which collection strategy produced the record. |
| `_scrapedAt` | string | When the record was collected (UTC, ISO 8601). |

### Notes & limits

- Reviews and developer replies are shown in the **language** you request; set `language` and `country` to match the audience you care about.
- Google serves reviews in pages; very large `maxReviews` values on popular apps take longer and benefit from a residential proxy.
- If an app ID doesn't exist in the chosen country, the actor emits a single record with an `_error` explaining why.

### Other Google Actors

| Actor | What it does |
| --- | --- |
| Google Trends Scraper | Trending searches by country + keyword interest over time. |
| Google Search Scraper | Organic search results for any query. |
| Google Images Scraper | Image search results. |
| Google Lens Scraper | Reverse image / visual search results. |
| Google Flights Scraper | Flight prices and itineraries. |

# Actor input Schema

## `appId` (type: `string`):

The Android package name of the app, as it appears in the Play Store URL after 'id='. Example: com.spotify.music (from https://play.google.com/store/apps/details?id=com.spotify.music).

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

Two-letter country code for the Play Store storefront, e.g. US, GB, DE, ID, JP. Reviews are drawn from this storefront.

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

Two-letter (or region) language code for review text and developer replies, e.g. en, de, fr, ja, id.

## `sortBy` (type: `string`):

Order in which reviews are collected. 'newest' returns the most recent reviews first, 'rating' orders by star rating, 'relevance' returns the reviews Google considers most helpful first.

## `maxReviews` (type: `integer`):

Maximum number of reviews to collect. The actor paginates automatically until this many are gathered or no more reviews are available.

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

Recommended for reliability and scale. A residential proxy matched to your country avoids per-IP rate limits. Small runs may work without one.

## Actor input object example

```json
{
  "appId": "com.spotify.music",
  "country": "us",
  "language": "en",
  "sortBy": "newest",
  "maxReviews": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "appId": "com.spotify.music",
    "country": "us",
    "language": "en",
    "sortBy": "newest",
    "maxReviews": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("xtracto/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 = {
    "appId": "com.spotify.music",
    "country": "us",
    "language": "en",
    "sortBy": "newest",
    "maxReviews": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("xtracto/google-play-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "appId": "com.spotify.music",
  "country": "us",
  "language": "en",
  "sortBy": "newest",
  "maxReviews": 200
}' |
apify call xtracto/google-play-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=xtracto/google-play-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Store Reviews Scraper",
        "description": "Get user reviews for any Android app on Google Play - rating, review text, author, date, thumbs-up count, app version, and developer reply. No account, no API key.",
        "version": "0.1",
        "x-build-id": "apvWEJeJ8YTedgd1C"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/xtracto~google-play-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-xtracto-google-play-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/xtracto~google-play-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-xtracto-google-play-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/xtracto~google-play-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-xtracto-google-play-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "appId"
                ],
                "properties": {
                    "appId": {
                        "title": "App ID (package name)",
                        "type": "string",
                        "description": "The Android package name of the app, as it appears in the Play Store URL after 'id='. Example: com.spotify.music (from https://play.google.com/store/apps/details?id=com.spotify.music).",
                        "default": "com.spotify.music"
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter country code for the Play Store storefront, e.g. US, GB, DE, ID, JP. Reviews are drawn from this storefront.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Two-letter (or region) language code for review text and developer replies, e.g. en, de, fr, ja, id.",
                        "default": "en"
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "newest",
                            "rating",
                            "relevance"
                        ],
                        "type": "string",
                        "description": "Order in which reviews are collected. 'newest' returns the most recent reviews first, 'rating' orders by star rating, 'relevance' returns the reviews Google considers most helpful first.",
                        "default": "newest"
                    },
                    "maxReviews": {
                        "title": "Maximum reviews",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of reviews to collect. The actor paginates automatically until this many are gathered or no more reviews are available.",
                        "default": 200
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Recommended for reliability and scale. A residential proxy matched to your country avoids per-IP rate limits. Small runs may work without one.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
