# Google Play Scraper - Reviews, App Details & Search (`kmscrape/google-play-reviews-scraper`) Actor

Scrape Google Play Store reviews (filter by star rating, country, language, newest), full app details (installs, rating histogram, developer contact, version) and app search results. Fast, no login. Sibling of our Apple App Store Reviews Scraper.

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

## Pricing

from $1.00 / 1,000 results

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?

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 Reviews Scraper

Find public Google Play listings and collect app details and user reviews. Search by app name, provide Android package names, or use Play Store URLs. No Google login is needed.

### What it does

For each app, the Actor can write a listing row and recent review rows. Reviews include reviewer name, rating, review text, thumbs-up count, version, timestamps, and a direct Play Store URL. Search terms resolve to app IDs and use the same detail and review flow. Invalid app IDs and fetch failures are reported as free error rows.

### Use cases

- App review monitoring
- ASO and competitor research
- Customer sentiment and product feedback analysis
- Review feeds for AI agents and MCP workflows

### Input examples

```json
{
  "appIds": [
    "com.spotify.music",
    "https://play.google.com/store/apps/details?id=com.google.android.youtube"
  ],
  "searchTerms": ["habit tracker"],
  "maxAppsPerSearch": 10,
  "includeAppDetails": true,
  "includeReviews": true,
  "maxReviewsPerApp": 100,
  "reviewSort": "NEWEST",
  "minRating": 1,
  "maxRating": 5,
  "country": "us",
  "language": "en"
}
```

The prefilled input uses Spotify (`com.spotify.music`) and requests 50 reviews. `maxReviewsPerApp` defaults to 100. Search results are capped by `maxAppsPerSearch` for each term. Review sorting supports `NEWEST`, `RELEVANCE` (Google Play helpfulness order), or `RATING`. Rating filters are applied after fetching each page.

### Output examples

Trimmed app row captured from a real Google Play listing:

```json
{"type":"app","title":"Spotify: Music and Podcasts","appId":"com.spotify.music","url":"https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=us","developer":"Spotify AB","genre":"Music & Audio","installs":"1,000,000,000+","score":4.347788,"ratings":36454023,"reviews":1855601,"price":0,"free":true,"offersIAP":true}
```

Trimmed review row captured from the package output:

```json
{"type":"review","reviewId":"a6790361-24ea-41bd-b9e1-291843b6607d","appId":"com.spotify.music","userName":"Muhammad Musadugr93jvudoneofhbizowhbk forn","score":5,"text":"fantastic","thumbsUp":0,"version":"9.1.88.2204","date":"2026-10-08T17:15:11.232Z","replyText":null,"replyDate":null,"url":"https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=a6790361-24ea-41bd-b9e1-291843b6607d","country":"us","language":"en"}
```

Each app row and each review row is billed as one result. Summary and error rows are free.

### Pricing

$1.00 per 1,000 results. App and review rows are both counted as results; summary and error rows are not charged.

### Limits

Google Play controls which public reviews are available for each app and region. The Actor paginates until the requested maximum is reached or the package returns no next page. It caps `maxReviewsPerApp` at 5,000. Google may rate-limit requests or change its public pages; requests retry with backoff and a 20-second timeout, but availability is not guaranteed.

Runs are sequential with a short pause between requests. Large searches or high review limits take longer.

### FAQ

**Can I use a Play Store URL?** Yes. Provide a URL containing the app's `id` query parameter, or provide the package name directly.

**Does search also fetch reviews?** Yes, if `includeReviews` is enabled. Search results are capped per term by `maxAppsPerSearch`.

**Can I collect only details or only reviews?** Yes. Toggle `includeAppDetails` and `includeReviews` independently.

**How does relevance sorting work?** It uses Google Play's helpfulness order.

**How are ratings filtered?** `minRating` and `maxRating` keep matching 1-to-5-star reviews after pages are retrieved. If many results do not match, more pages may be needed.

**Is there an Apple App Store version?** Yes: [kmscrape/app-store-reviews-scraper](https://apify.com/kmscrape/app-store-reviews-scraper).

# Actor input Schema

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

Provide Android package names such as com.spotify.music, or Google Play URLs containing an id parameter.

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

Search Google Play for app names and scrape matching app rows and reviews when enabled.

## `maxAppsPerSearch` (type: `integer`):

Maximum search results to use for each term.

## `includeAppDetails` (type: `boolean`):

Write one app row for each app with its public listing details.

## `includeReviews` (type: `boolean`):

Fetch and write public user reviews for each app.

## `maxReviewsPerApp` (type: `integer`):

Maximum review rows to write per app.

## `reviewSort` (type: `string`):

Order reviews by newest, relevance (helpfulness), or rating.

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

Only include reviews with at least this many stars. Optional.

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

Only include reviews with at most this many stars. Optional.

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

Two-letter storefront country code used for search, app details and reviews.

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

Language code used for search, app details and reviews.

## Actor input object example

```json
{
  "appIds": [
    "com.spotify.music"
  ],
  "maxAppsPerSearch": 10,
  "includeAppDetails": true,
  "includeReviews": true,
  "maxReviewsPerApp": 50,
  "reviewSort": "NEWEST",
  "country": "us",
  "language": "en"
}
```

# Actor output Schema

## `results` (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 = {
    "appIds": [
        "com.spotify.music"
    ],
    "maxReviewsPerApp": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("kmscrape/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"],
    "maxReviewsPerApp": 50,
}

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

```

## MCP server setup

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