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

Extract source-backed review cards embedded in public Google Play app-page HTML. Dynamically loaded review archives and private endpoints are out of scope.

- **URL**: https://apify.com/googleapi/google-play-reviews-scraper.md
- **Developed by:** [Google API](https://apify.com/googleapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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.

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 this Actor does

Google Play Reviews Scraper collects review cards embedded in public Google Play app pages. Each dataset row contains a visible review and related app details from that page. The Actor does not access private review endpoints or return a complete review archive.

Google Play may load additional reviews only after opening its review dialog. Those reviews are not included unless they are present in the public page content the Actor can read. The `page` input is fixed at 1 because the public pages do not expose a stable review-page offset.

### Input

Provide app package IDs, public Google Play app URLs, or search terms. You can submit multiple app IDs or searches. `maxReviews` limits the review cards read per app page, `maxApps` limits apps found per search, and `maxItems` limits total dataset rows.

```json
{"appId":"com.spotify.music","maxReviews":25,"maxItems":100}
```

```json
{"searchTerms":["navigation","podcasts"],"maxApps":8,"maxItems":100,"locale":"en-US"}
```

| Input | Description | Default |
|---|---|---:|
| `appId` / `appIds` | One or more Google Play package IDs. | — |
| `startUrls` | Public app, search, or category pages. `sourceUrls` and `urls` are aliases. | — |
| `searchTerm` / `searchTerms` | Search terms used to discover apps. | — |
| `maxReviews` | Maximum review cards read per app page (1–5,000). | 50 |
| `maxApps` | Maximum app pages followed per search page (1–100). | 20 |
| `maxItems` | Maximum review records across the run (1–5,000). | 500 |
| `maxPages` | Maximum public pages fetched across submitted and discovered sources (1–100). | 20 |
| `deduplicate` | Remove repeated review records. | `true` |
| `locale` / `language` / `country` | Choose the Google Play language and storefront. | `en-US` / `en` / `US` |

`page` is fixed at `1`: Google Play does not provide a stable public review-page offset. The Actor reads only review cards visible in the fetched page content.

### Dataset output

Each row includes the app ID and review information such as `reviewId` when exposed, visible reviewer display label, rating, review title and text, date text, helpful count, app version, language, review images, and any public developer reply. App details from the same page can include title, developer, category, description, rating totals, downloads label, update notes, screenshots, and a compact Data safety summary.

Flat fields are available for tables, with nested `app`, `review`, `reviewer`, and `developerReply` objects for related values. Compatibility aliases such as `title`/`appTitle` and `text`/`reviewText` may also appear.

```json
{
  "appId": "com.example.reviews",
  "appTitle": "Example App",
  "reviewId": "source-review-id",
  "reviewerDisplayName": "Asha",
  "reviewScore": 5,
  "reviewDateText": "September 1, 2026",
  "reviewDatePrecision": "day",
  "reviewTitle": "Easy to use",
  "reviewText": "Great app and fast navigation.",
  "reviewHelpfulCount": 12,
  "hasDeveloperReply": true,
  "replyText": "Thanks for sharing your feedback."
}
```

Only values available on the public page are included. Relative date labels are preserved as text; an exact date is provided only when the source gives one. A visible reviewer name is a display label, not a verified identity. Missing reply or app details are not inferred.

You can download dataset results in JSON, CSV, Excel, or other formats supported by Apify. The run page also shows a summary and health information.

### Cost, coverage, and responsible use

Check the Actor's Pricing tab for current Actor and Apify platform charges. Search inputs first discover app pages, while app IDs and direct URLs target known apps. Start with small limits to see how many review cards are available for your chosen apps and market.

Results reflect public Google Play pages at run time and may vary by app, language, and country. Review bodies may contain personal information written by their authors. Use the data for a legitimate purpose, follow Google Play's terms and applicable privacy laws, and do not bypass access controls.

# Changelog

This Actor's version history is a separate document: https://apify.com/googleapi/google-play-reviews-scraper/changelog.md

# Actor input Schema

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

Public Google Play app detail, app search, or category pages. Detail pages are normalized to show their publicly embedded review cards.

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

A Google Play package ID such as com.spotify.music.

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

Up to 50 Google Play package IDs.

## `searchTerm` (type: `string`):

Search public Google Play app results, then inspect the linked app pages for review cards.

## `searchTerms` (type: `array`):

Up to 20 public Google Play app searches.

## `url` (type: `string`):

One public Google Play source URL (compatibility input).

## `sourceUrls` (type: `array`):

Compatibility list of public Google Play URLs.

## `urls` (type: `array`):

Compatibility list of public Google Play URLs.

## `locale` (type: `string`):

Google Play display locale, for example en-US.

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

Two-letter language code used for hl.

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

Two-letter Google Play country code used for gl.

## `location` (type: `string`):

Compatibility alias for country.

## `page` (type: `integer`):

Google Play public review HTML currently exposes no stable page offset. Only page 1 is supported; use multiple app IDs or start URLs to add apps.

## `maxPages` (type: `integer`):

Maximum total Google Play HTML pages fetched across start sources and discovered app detail pages. Google Play search offsets are not treated as pagination because the public page ignored start=30 during inspection.

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

Maximum review cards parsed from each fetched app detail HTML page. This is not a total-review archive limit; only cards in the public HTML are available.

## `maxApps` (type: `integer`):

Maximum app detail links followed from each public search page.

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

Global limit for valid, deduplicated review records in the dataset.

## `maxResults` (type: `integer`):

Compatibility alias for maxItems. Do not set both unless the values agree.

## `deduplicate` (type: `boolean`):

Remove repeated source review IDs, or records matching by app, date, rating, text, and helpful count when no source ID is exposed.

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

Optional Apify Proxy for permitted public Google Play requests. Residential proxies may help with access variability; the Actor does not bypass CAPTCHA or sign-in controls.

## `requestTimeoutSecs` (type: `integer`):

Maximum duration of one public HTML request.

## `maxRequestRetries` (type: `integer`):

Finite retries for transient network and server errors.

## `requestDelayMs` (type: `integer`):

Respectful delay between sequential public-page requests.

## `maxResponseBytes` (type: `integer`):

Discard responses larger than this bounded size.

## Actor input object example

```json
{
  "locale": "en-US",
  "language": "en",
  "country": "US",
  "page": 1,
  "maxPages": 20,
  "maxReviews": 50,
  "maxApps": 20,
  "maxItems": 500,
  "deduplicate": true,
  "requestTimeoutSecs": 30,
  "maxRequestRetries": 1,
  "requestDelayMs": 500,
  "maxResponseBytes": 2500000
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `runHealth` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/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 '{}' |
apify call googleapi/google-play-reviews-scraper --silent --output-dataset

```

## MCP server setup

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