# Google Play Store App Reviews Scraper (`scraptivo/playstore-app-reviews`) Actor

Collect Google Play Store app reviews by app ID or Play Store URL, with sort, star-rating, language, and country filters.

- **URL**: https://apify.com/scraptivo/playstore-app-reviews.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.97 / 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 Store App Reviews Scraper** collects reviews from the [Google Play Store](https://play.google.com) and turns them into structured data for product research, sentiment monitoring, and competitor analysis. Provide an app ID such as `com.whatsapp` or a Play Store URL, then export review text, star rating, date, thumbs-up count, and developer reply to JSON, CSV, or Excel. Use it to watch ratings, compare apps, and schedule recurring collection. Pricing is **$1.00 per 1,000 reviews**.

### What can you automate with Google Play Store App Reviews Scraper?

- **Collect reviews for one or many apps** — Enter package names and/or Play Store URLs in the same run.
- **Filter by stars and sort** — Keep 1-star complaints or newest reviews with `filterScore` and `sort`.
- **Match a storefront** — Set language and country codes such as `en` / `us`.
- **Include developer replies** — Reply text and reply time are on the same review row when Play publishes them.
- **Schedule recurring collection** — Run daily or weekly and push new reviews into Sheets, a CRM, or an alert workflow.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Product and UX researchers | Read newest reviews and star filters for your app or a competitor. |
| ASO and marketing teams | Track sentiment, thumbs-up counts, and reply rates by country. |
| Support leads | Find unanswered 1-star reviews and developer reply gaps. |
| Analysts | Export review text and scores for dashboards. |

### What data can you collect from Google Play?

| Data group | Example fields | How it helps |
|---|---|---|
| Review identity | `reviewId`, `reviewUrl`, `appId` | Identify each review and deduplicate with `reviewId`. |
| Content | `content`, `score`, `at`, `appVersion` | Read the comment, stars, date, and app version. |
| Reviewer | `userName`, `thumbsUpCount` | See who wrote it and how many users found it useful. |
| Developer reply | `replyContent`, `repliedAt` | Track whether the developer answered. |

`filterScore` is optional. Leave it empty for all star ratings. `maxItems` caps reviews across all apps in the run.

### How to use Google Play Store App Reviews Scraper

1. Open the [Google Play Store App Reviews Scraper](https://apify.com/scraptivo/playstore-app-reviews) on Apify.
2. Enter app IDs and/or Play Store URLs.
3. Set **Max items** (Console prefill is 50; `0` means unlimited), sort, and optional star filter.
4. Run the Actor — it writes one dataset row per review.
5. Export the dataset or connect it to your workflow.

```json
{
    "appIds": ["com.easybrain.arrow.puzzle.game"],
    "maxItems": 50,
    "sort": "NEWEST",
    "language": "en",
    "country": "us",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Example workflow

#### Monitor newest 1-star reviews for a competitor app

1. Schedule a daily run with the competitor `appIds`, `sort` = `"NEWEST"`, and `filterScore` = `1`.
2. Keep reviews from the last 24 hours using the `at` field.
3. Use `replyContent` to see whether the developer answered.
4. Send new records to Slack or a spreadsheet through a webhook after each run.
5. Deduplicate user-side against the stable `reviewId` field.

The Actor does not merge results across runs — those steps happen in your pipeline.

### Automate and integrate your results

- **Schedules** — Run **daily** with `sort` = `"NEWEST"` for new-review alerts, or **weekly** for a sentiment snapshot. Create a separate scheduled task per app.
- **Webhooks** — Push completed runs into Google Sheets, Make, Zapier, Slack, or a CRM.
- **Exports and API** — Download JSON, CSV, Excel, or HTML from the Apify Console, or start a run from the API:

```shell
curl -X POST "https://api.apify.com/v2/acts/scraptivo~playstore-app-reviews/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "appIds": ["com.easybrain.arrow.puzzle.game"],
    "maxItems": 50,
    "sort": "NEWEST",
    "language": "en",
    "country": "us"
  }'
```

Deduplicate user-side with `reviewId`.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---:|---|---|
| `appIds` | array | No | — | Play package names such as `com.whatsapp`. |
| `startUrls` | array | No | — | Play Store app URLs; app IDs are read from the URL. |
| `maxItems` | integer | No | `0` | Cap reviews across all apps; Console prefill is 50. |
| `sort` | string | No | `NEWEST` | `NEWEST`, `MOST_RELEVANT`, or `RATING`. |
| `filterScore` | integer | No | — | Only this star rating (1–5). Omit for all ratings. |
| `language` | string | No | `en` | Play `hl` code such as `en` or `de`. |
| `country` | string | No | `us` | Play `gl` code such as `us` or `gb`. |
| `proxyConfiguration` | object | No | Residential | Apify proxy settings. |

Provide `appIds`, `startUrls`, or both.

### Output example

```json
{
    "reviewId": "ea7487e4-0e14-4ec9-9027-cb967b3dcf5d",
    "userName": "Alex Bruinekool",
    "content": "New widget on Android shows a loading screen for about 1 min every time I want to click on it...",
    "score": 1,
    "thumbsUpCount": 2,
    "at": "2026-07-30T09:06:32+00:00",
    "replyContent": "Hi. We'd recommend restarting your device to see if that makes any difference...",
    "repliedAt": "2026-07-30T15:32:03+00:00",
    "appVersion": "9.1.68.1888",
    "appId": "com.spotify.music",
    "appUrl": "https://play.google.com/store/apps/details?id=com.spotify.music",
    "reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=ea7487e4-0e14-4ec9-9027-cb967b3dcf5d"
}
```

### How much does it cost to scrape Google Play reviews?

Billing is pay-per-event. A one-time **Actor Start** fee of **$0.00005** applies per run. Each review is one `dataset-item` event at **$1.00 per 1,000 reviews**.

A 50-review test costs about **$0.05** plus Actor Start. A 1,000-review run costs about **$1.00** plus Actor Start. Apify plan discounts may reduce these prices. Platform compute and proxy usage are billed separately on your Apify plan.

### Reliability and responsible use

- **Proxy** — Residential proxies are recommended and are the default setting.
- **Conditional fields** — `replyContent` is empty when the developer has not replied. Star filter is applied only when `filterScore` is set.
- **Public data** — The Actor collects publicly visible reviews from Google Play.
- **Responsible use** — Only use the data in ways that comply with Google Play terms of service and applicable law.

### Frequently asked questions

#### Can I scrape Google Play reviews by app ID or URL?

Yes. Use `appIds` such as `com.whatsapp`, Play Store URLs in `startUrls`, or both in one run.

#### Can I schedule Google Play Store App Reviews Scraper to run automatically?

Yes. Open the **Scheduler** tab in Apify Console and set a daily cadence with `sort` = `"NEWEST"` for new-review alerts.

#### What counts as one result?

One review written to the dataset is one billable result at **$1.00 per 1,000 reviews**, plus Actor Start.

#### Why are some fields empty?

Developer replies are omitted when Play has no reply. Some reviewers hide a photo. `filterScore` hides other star ratings when it is set.

#### How do I avoid duplicate records?

Within one run, reviews are unique by `reviewId`. Across runs the Actor appends results. When you combine datasets, keep the first row for each `reviewId`.

#### Do I need a proxy?

Use Apify residential proxies. If a run returns unusually few reviews, confirm that `proxyConfiguration` uses the RESIDENTIAL group.

### Related Scraptivo automations

- [Trustpilot Scraper](https://apify.com/scraptivo/trustpilot-scraper) — collect Trustpilot reviews for the same brand-monitoring workflow.
- [TripAdvisor Reviews Scraper](https://apify.com/scraptivo/tripadvisor-reviews-scraper) — add travel and local-business reviews.
- [YouTube Comment Scraper](https://apify.com/scraptivo/youtube-comment-scraper) — collect video comments alongside app-store feedback.
- [Reddit Comment Scraper](https://apify.com/scraptivo/reddit-comment-scraper) — monitor community discussion about the same apps.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.

# Actor input Schema

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

Google Play package names to scrape reviews for (e.g. com.whatsapp, com.spotify.music). Use this and/or Start URLs.

## `startUrls` (type: `array`):

Google Play app detail page URLs (e.g. https://play.google.com/store/apps/details?id=com.whatsapp). App IDs are extracted automatically.

## `maxItems` (type: `integer`):

Maximum number of reviews to scrape across all apps (0 = unlimited)

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

How to order reviews returned by Google Play

## `filterScore` (type: `integer`):

Only return reviews with this star rating (1–5). Leave empty or omit for all ratings.

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

Review language code (Play Store hl parameter), e.g. en, en-US, es, de, fr

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

Country / storefront code (Play Store gl parameter), e.g. us, gb, de, in

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

Proxy settings. Apify Residential proxies are recommended for reliable access.

## Actor input object example

```json
{
  "appIds": [
    "com.easybrain.arrow.puzzle.game"
  ],
  "startUrls": [
    {
      "url": "https://play.google.com/store/apps/details?id=com.easybrain.arrow.puzzle.game"
    }
  ],
  "maxItems": 50,
  "sort": "NEWEST",
  "language": "en",
  "country": "us",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset containing scraped Google Play app reviews

## `runStats` (type: `string`):

Aggregate scrape statistics 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 = {
    "appIds": [
        "com.easybrain.arrow.puzzle.game"
    ],
    "startUrls": [
        {
            "url": "https://play.google.com/store/apps/details?id=com.easybrain.arrow.puzzle.game"
        }
    ],
    "maxItems": 50,
    "language": "en",
    "country": "us",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/playstore-app-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 = {
    "appIds": ["com.easybrain.arrow.puzzle.game"],
    "startUrls": [{ "url": "https://play.google.com/store/apps/details?id=com.easybrain.arrow.puzzle.game" }],
    "maxItems": 50,
    "language": "en",
    "country": "us",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/playstore-app-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 '{
  "appIds": [
    "com.easybrain.arrow.puzzle.game"
  ],
  "startUrls": [
    {
      "url": "https://play.google.com/store/apps/details?id=com.easybrain.arrow.puzzle.game"
    }
  ],
  "maxItems": 50,
  "language": "en",
  "country": "us",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/playstore-app-reviews --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/playstore-app-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/6aaDdiB9GtX7fpzEu/builds/e0X57yguswBZnOUmc/openapi.json
