# Google Play Scraper (`donjuan_mime/google-play-scraper`) Actor

Scrape Google Play apps and reviews: ratings, installs, prices, developer contacts, review text, scores, and developer replies. No login or API key.

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

## Pricing

$0.50 / 1,000 items

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: apps, ratings, installs, and reviews

Google Play Scraper collects app details and user reviews from the Google Play Store. For every app you get the title, developer and contact details, category, rating, ratings by stars, install count, price, in-app purchases, content rating, version, update date, icon, and screenshots. For every review you get the reviewer, stars, text, helpful votes, app version, date, and the developer's reply.

You don't need a Google account, an API key, or any code. Add app IDs, Play Store links, or search terms, press **Start**, and download the results as JSON, CSV, Excel, XML, or HTML.

### What can you do with Google Play data?

- **Monitor your app's reviews.** Pull new reviews every day, catch bugs and complaints early, and see which version users are reviewing.
- **Analyze sentiment.** Feed review text and star ratings into your sentiment or topic analysis.
- **Track competitors.** Watch competitors' ratings, install counts, prices, and update cadence.
- **Research a market.** Search a category keyword and compare the top 30 apps side by side.
- **Generate leads.** Collect developer emails and websites for apps in your niche.
- **Do app store optimization (ASO).** See which apps rank for a search term and how they write their titles and descriptions.

### What data does Google Play Scraper extract?

| Group | Fields |
|---|---|
| App | app ID, URL, title, short description, full description, category, content rating, release date, last update, version, minimum Android version, icon, screenshots |
| Developer | name, developer ID, developer page, email, website |
| Ratings | average rating, number of ratings, number of written reviews, ratings by stars (1 to 5) |
| Installs | install bracket (for example 1,000,000,000+), minimum installs, Google Play's install count |
| Price | price, currency, free flag, in-app purchases and their price range, ads flag |
| Reviews | review ID, reviewer name and avatar, stars, text, helpful votes, app version, date, developer reply and its date |

### How to scrape Google Play

1. Open the actor and go to the **Input** tab.
2. Add app IDs (`com.spotify.music`), app links, or search queries.
3. Turn on **Include reviews** if you need them and set how many per app.
4. Pick the language and country you want to see Google Play in.
5. Press **Start**. When the run finishes, open the **Output** tab or press **Export**.

### Input

| Field | Type | Description |
|---|---|---|
| `appIds` | array of strings | Package names, the part after `id=` in a Play Store link. |
| `startUrls` | array | Links to Google Play app pages. |
| `searchQueries` | array of strings | Search terms. The actor scrapes the apps Google Play finds. |
| `maxAppsPerSearch` | integer | Apps to take from each search, up to 30. |
| `includeReviews` | boolean | Also scrape reviews, one dataset item per review. |
| `maxReviewsPerApp` | integer | The maximum number of reviews per app. |
| `reviewsSort` | string | `newest`, `most_relevant`, or `rating` (highest first). |
| `reviewsRating` | integer | Keep only reviews with this many stars, from 1 to 5. Leave empty for all. |
| `language` | string | Two-letter language code, for example `en` or `uk`. |
| `country` | string | Two-letter country code, for example `us` or `ua`. |
| `proxyCountryCode` | string | A country code such as `US` to use Apify residential proxy in that country. `None` uses Apify datacenter proxy. |

You need at least one of `appIds`, `startUrls`, or `searchQueries`.

#### Input example

```json
{
  "appIds": ["com.spotify.music", "com.mojang.minecraftpe"],
  "searchQueries": ["photo editor"],
  "maxAppsPerSearch": 10,
  "includeReviews": true,
  "maxReviewsPerApp": 500,
  "reviewsSort": "newest",
  "language": "en",
  "country": "us",
  "proxyCountryCode": "None"
}
```

### Output

The dataset holds two kinds of items, told apart by `type`. The **Apps** and **Reviews** views in the Output tab show each kind in its own table.

#### App example

A real item, with the description and links shortened:

```json
{
  "type": "app",
  "appId": "com.mojang.minecraftpe",
  "url": "https://play.google.com/store/apps/details?id=com.mojang.minecraftpe",
  "title": "Minecraft: Dream it, Build it!",
  "summary": "Millions of crafters have smashed billions of blocks! Now you can join the fun!",
  "description": "Dive into an open world of building, crafting, and survival in the ultimate sandbox adventure...",
  "developer": "Mojang",
  "developerId": "4772240228547998649",
  "developerUrl": "https://play.google.com/store/apps/dev?id=4772240228547998649",
  "developerEmail": "help@minecraft.net",
  "developerWebsite": "http://help.mojang.com",
  "category": "Arcade",
  "categoryId": "GAME_ARCADE",
  "score": 4.3040857,
  "ratingsCount": 5862656,
  "reviewsCount": 635123,
  "histogram": { "1": 627041, "2": 178108, "3": 271058, "4": 495277, "5": 4291160 },
  "installs": "50,000,000+",
  "minInstalls": 50000000,
  "maxInstalls": 99171536,
  "price": 6.99,
  "free": false,
  "currency": "USD",
  "inAppPurchases": true,
  "inAppPurchasesRange": "$0.99 - $49.99 per item",
  "containsAds": false,
  "contentRating": "Everyone 10+",
  "released": "Aug 15, 2011",
  "updatedISO": "2026-09-25T17:26:28.000Z",
  "version": "1.26.52.3",
  "androidVersion": "8.0",
  "icon": "https://play-lh.googleusercontent.com/...",
  "screenshots": ["https://play-lh.googleusercontent.com/..."],
  "input": "com.mojang.minecraftpe"
}
```

#### Review example

```json
{
  "type": "review",
  "reviewId": "e69559f3-df39-46b7-b01f-b75c35f1685a",
  "appId": "com.spotify.music",
  "appTitle": "Spotify: Music and Podcasts",
  "userName": "Stephen M",
  "userImage": "https://play-lh.googleusercontent.com/...",
  "score": 4,
  "text": "Really enjoy using the app it was easy to build some great playlists...",
  "thumbsUp": 0,
  "appVersion": "9.1.90.2270",
  "createdAtISO": "2026-10-17T15:02:22.000Z",
  "replyText": "Hi! We appreciate your feedback. Our catalog depends on rights holders and can vary by country...",
  "replyDateISO": "2026-10-17T20:52:01.000Z",
  "input": "com.spotify.music"
}
```

#### Output fields

| Field | Description |
|---|---|
| `type` | `app` or `review`. |
| `score` | For an app, the average rating. For a review, the stars the reviewer gave. |
| `installs`, `minInstalls`, `maxInstalls` | The bracket Google Play shows, its lower bound, and Google Play's own install count. |
| `price` | `0` for free apps, in the currency of the chosen country. |
| `version`, `androidVersion` | `Varies with device` when the app ships different builds per device. |
| `released` | The release date as Google Play prints it. Some apps don't show one. |
| `updatedISO`, `createdAtISO`, `replyDateISO` | ISO 8601 times in UTC. |
| `replyText` | The developer's public reply to a review, when there is one. |
| `input` | The app ID, link, or search query that found the item. |

### Language and country

Google Play shows different things in different places, and the actor follows the `language` and `country` you set:

- App titles and descriptions come in the chosen language when the developer translated them.
- Prices and currency follow the country. An app missing in that country is skipped and noted in the log.
- Google Play shows reviews written in the chosen language, so `language: "uk"` gives you Ukrainian reviews.
- Search ranking differs by country.

### Limits

- Google Play's web search returns up to 30 apps per query. Use several specific queries to cover a market.
- Reviews have no fixed cap. In our tests the actor read 2,000 Spotify reviews in about 3 seconds with no duplicates.
- Each app is scraped once per run, even when several inputs find it.

### How much does it cost?

You pay $0.50 per 1,000 dataset items. An app is one item and each review is one item, so 10 apps with 100 reviews each cost $0.505. The actor runs without a browser, so runs finish in seconds and use little memory.

### Export and integrations

Download the results from the **Output** tab, send them to Google Sheets, Slack, Zapier, or Make through Apify integrations, schedule daily runs to track new reviews, or start runs from your own code:

```bash
curl -X POST "https://api.apify.com/v2/acts/<username>~google-play-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"appIds": ["com.spotify.music"], "includeReviews": true, "maxReviewsPerApp": 200}'
```

### FAQ

#### Do I need a Google account?

No. The actor reads public Google Play pages the way a logged-out visitor sees them.

#### Can I get only negative reviews?

Yes. Set `reviewsRating` to `1` or `2`. Run it once per star count to collect several ratings.

#### Why do I see reviews in only one language?

Google Play shows reviews in the language you browse in. Set `language` to the language you want, or run the actor once per language.

#### Can I scrape the App Store too?

Not with this actor. It covers Google Play only.

#### Is it legal to scrape Google Play?

The actor collects only public data that anyone can see without logging in. Reviews include reviewer names, which count as personal data in many places, so make sure you have a legitimate reason to collect them and follow the GDPR and other laws that apply to you. If you're not sure, ask a lawyer.

### Disclaimer

This actor is provided as is, without warranty. You're responsible for how you use it and for following Google's terms of service and the laws that apply to you. Google isn't affiliated with this actor.

# Actor input Schema

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

Package names of the apps, the part after id= in the Play Store link, for example com.spotify.music.

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

Links to Google Play app pages, for example https://play.google.com/store/apps/details?id=com.spotify.music.

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

Search Google Play for apps and scrape the ones it finds.

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

The maximum number of apps to take from each search query. Google Play shows up to 30 apps per search.

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

Also scrape each app's reviews, one dataset item per review.

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

The maximum number of reviews to scrape from each app.

## `reviewsSort` (type: `string`):

The order Google Play lists reviews in.

## `reviewsRating` (type: `integer`):

Keep only reviews with this number of stars, from 1 to 5. Leave empty for all ratings.

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

Two-letter language code (en, uk, de, ...). It sets the language of app texts and which reviews Google Play shows.

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

Two-letter country code (us, ua, de, ...). It sets prices, currency, availability, and search ranking.

## `proxyCountryCode` (type: `string`):

Two-letter country code (US, DE, ...) to use Apify residential proxy in that country. "None" uses Apify datacenter proxy.

## Actor input object example

```json
{
  "appIds": [
    "com.spotify.music"
  ],
  "maxAppsPerSearch": 30,
  "includeReviews": true,
  "maxReviewsPerApp": 100,
  "reviewsSort": "newest",
  "language": "en",
  "country": "us",
  "proxyCountryCode": "None"
}
```

# Actor output Schema

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

One item per app (type "app") and one per review (type "review").

# 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"
    ],
    "includeReviews": true,
    "maxReviewsPerApp": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("donjuan_mime/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 = {
    "appIds": ["com.spotify.music"],
    "includeReviews": True,
    "maxReviewsPerApp": 100,
}

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

```

## MCP server setup

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