# Google Play Scraper - App Reviews, Ratings, Installs, Details (`scrapefy/google-play-scraper`) Actor

Scrape public Google Play apps without login: reviews (newest, by stars, any language or country) and app details (rating, installs, price, developer). Paste app IDs or search.

- **URL**: https://apify.com/scrapefy/google-play-scraper.md
- **Developed by:** [Scrapify](https://apify.com/scrapefy) (community)
- **Categories:** Developer tools, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 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.

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 Scraper: app reviews, ratings, installs and app details

Get **public Google Play reviews and app details** without a login, cookies or proxy. Paste app IDs or Play Store links (or search by keyword), pick reviews, app details or both, and every review and every app comes back as one clean row: **reviews with star rating, text, date, thumbs-up count, app version and the developer's reply**, and **apps with title, developer, genre, rating, rating histogram, installs, price, last update, content rating, description, icon and screenshots**. Choose newest, most relevant or by-rating order, filter by star rating, and select the language and country of the store. Export to JSON, CSV or Excel, or call it from the API.

Use it for **app review monitoring and sentiment analysis, competitor and market research, ASO (app store optimization) data, product feedback mining, customer-support triage, churn and bug detection from 1-star reviews, and datasets for LLM and analytics pipelines**. Works with AI agents through the Apify MCP server. It reads only what Google Play shows to every visitor; images are returned as URLs and are not downloaded.

### Why this one

- **No login, no cookies, no proxy, no browser.** Plain HTTP requests to the public store, so runs are fast and cheap (about 100 reviews per request).
- **Reviews and app details in one Actor.** One mode switch: reviews, app details or both, priced separately.
- **Any language and country.** Set the store language (en, de, fr, es, pt, ja, ...) and country (US, GB, DE, BR, IN, ...); prices, installs text and review language follow.
- **Sort and filter.** Newest first, most relevant or by rating; optional single star rating (for example only 1-star reviews).
- **Find apps by keyword.** Search words return the top matching apps, scraped like the ones you list.
- **Never fails the whole run for one input.** A wrong id, a removed app or an empty search gets its own row with an `error` message and is **not charged**; the rest continue. A `RUN_SUMMARY` record lists reviews and apps per input.
- **Polite by design.** Pauses between requests, retries with backoff, and the run stops politely if Google keeps answering 403 or 429.

### Input

| Field | Meaning |
|---|---|
| App IDs or Google Play URLs | Package names (`com.spotify.music`) or `play.google.com/store/apps/details?id=...` links |
| Search queries | Optional keywords; the top apps (up to Max apps per search, 20 at most) are scraped |
| What to scrape | `reviews`, `appDetails` or `both` (default) |
| Max reviews per app | Default 100, max 10,000 |
| Review sort order | `newest` (default), `mostRelevant`, `rating` |
| Only reviews with this star rating | Optional, 1 to 5 |
| Language / Country | Store language code (default `en`) and country code (default `US`) |
| Use Apify proxy | Off by default; only if Google blocks your region |

### Output

**Review row:** `type: "review", appId, reviewId, userName, userImage, rating, text, date, thumbsUpCount, appVersion, replyText, replyDate, language, country, input, scrapedAt`.

**App row:** `type: "app", appId, url, title, summary, description (first 1,500 characters), developer, developerId, developerUrl, developerWebsite, developerEmail, genre, genreId, rating, ratingsCount, reviewsCount, histogram{1..5}, installs, installsMin, price, currency, free, offersIAP, containsAds, contentRating, released, updated, icon, headerImage, screenshots[], language, country, input, scrapedAt`.

**Error row:** `type: "error", appId, input, error, scrapedAt`. See `sample-output.json` for real rows.

Notes on the data:

- `date` and `updated` are UTC ISO timestamps; `released` is the store's own text in the chosen language.
- `installs` is the store's rounded bucket ("1,000,000,000+"); `installsMin` is the number.
- The app version number is not part of the public app page data; each review carries the `appVersion` it was written on.
- The same app listed twice in one run is scraped and charged once.

### Pricing

Pay per event: **$0.0001 per review** ($0.10 per 1,000 reviews), **$0.0003 per app-detail row** ($0.30 per 1,000 apps) plus a $0.00005 start event per run. Error rows are not charged. A run with 1 app and 100 reviews costs about one cent. See PRICING.md for the benchmark.

### Public data only

The Actor reads only the public store pages and the public review feed that Google Play shows without an account. It does **not** log in, use Google accounts or cookies, download images, or bypass CAPTCHAs. Reviews contain public user names and profile picture links; they are personal data under GDPR and similar laws. You are responsible for using the data in line with Google Play's terms of service, copyright law and applicable data-protection law.

### Notes and limits

- Google Play can change its page data without notice; this is not an official API.
- Search returns up to about 20 apps per keyword (one results page).
- Very large review pulls (thousands per app) may eventually be rate-limited by Google; the Actor backs off and stops politely.
- Ratings, installs and prices are the values at scrape time.

### FAQ

**How much does it cost?** $0.0001 per review and $0.0003 per app plus $0.00005 per run. 1,000 reviews = $0.10. Error rows are free.

**Do I need a Google account or API key?** No.

**Can I get only the newest reviews or only 1-star reviews?** Yes: sort "Newest first" and/or set the star rating filter.

**Which languages and countries are supported?** Any language and country code that the Google Play store supports.

**Which export formats are available?** JSON, CSV, Excel, XML, HTML or RSS from the Console or API, or integrations such as Make, Zapier, n8n and Google Sheets.

**Something broke or a field is missing?** Open an issue on the Actor's Issues tab with the run link.

### Use with AI agents / MCP

Agents can call this Actor through the [Apify MCP server](https://mcp.apify.com). Let the agent find it with the `search-actors` tool ("google play reviews scraper") and call it by name:

- Actor: `santis_hermes/google-play-scraper`
- Example prompt: "Get the 100 newest 1-star Google Play reviews of com.spotify.music."
- Minimal input:

```json
{
  "apps": ["com.spotify.music"],
  "mode": "reviews",
  "maxReviews": 100,
  "sort": "newest",
  "starFilter": 1
}
```

# Actor input Schema

## `apps` (type: `array`):

Package names such as com.spotify.music, or full Google Play links such as https://play.google.com/store/apps/details?id=com.whatsapp. One result set is returned per app.

## `searchQueries` (type: `array`):

Optional words to search in the Google Play app search, for example 'photo editor'. The top matching apps (up to 'Max apps per search') are then scraped like the apps above.

## `mode` (type: `string`):

Reviews returns user reviews, App details returns one row per app with rating, histogram, installs, price and developer, and both returns the two together. Each review and each app row is a separately priced event.

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

Maximum number of reviews returned for each app (about 100 per request). Keeps the cost of a run predictable because you are charged per review returned.

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

Newest first is best for monitoring new feedback. Most relevant is the order shown first on the Google Play page. Rating sorts by star rating.

## `starFilter` (type: `integer`):

Optional. Enter 1 to 5 to return only reviews with exactly that many stars, for example 1 to collect complaints. Leave empty for all ratings.

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

Google Play interface language code that selects the language of the store texts and the reviews shown, for example en, de, fr, es, pt, ja. Default is en.

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

Two-letter Google Play store country code, for example US, GB, DE, FR, BR, IN. It changes price, availability and the reviews shown. Default is US.

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

How many of the top search results to scrape for each search query (the Google Play results page lists up to about 20).

## `useProxy` (type: `boolean`):

Route requests through the Apify datacenter proxy. Not needed normally; turn it on only if Google Play starts answering with 403 or 429 from your region.

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music"
  ],
  "searchQueries": [],
  "mode": "both",
  "maxReviews": 100,
  "sort": "newest",
  "language": "en",
  "country": "US",
  "maxAppsPerSearch": 10,
  "useProxy": false
}
```

# Actor output Schema

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

All reviews as a table with the key columns.

## `apps` (type: `string`):

All app detail rows as a table with the key columns.

## `results` (type: `string`):

Every row with all fields.

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

Reviews and apps per input, errors, requests made and charged events.

# 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 = {
    "apps": [
        "com.spotify.music"
    ],
    "searchQueries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapefy/google-play-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 = {
    "apps": ["com.spotify.music"],
    "searchQueries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapefy/google-play-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 '{
  "apps": [
    "com.spotify.music"
  ],
  "searchQueries": []
}' |
apify call scrapefy/google-play-scraper --silent --output-dataset

```

## MCP server setup

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