# Google Play Scraper - Android Apps & Reviews (`swerve/google-play-scraper`) Actor

Scrape Google Play (Android) reviews and app details. Paste Play Store URLs or package IDs, or search by keyword. Reviews include rating, text, author, date, helpful votes, app version and developer replies. App details include developer, category, rating, installs, price, version and description.

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

## Pricing

from $5.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Play Scraper — Android Apps & Reviews

Scrape the **Google Play Store**: user reviews and full app metadata. Paste Play Store URLs or package IDs, or search by keyword. Runs on Google Play's own public data — **no login, no API key, no proxy needed**.

Unlike Apple's store, Google Play exposes **thousands of reviews per app** (paginated deep), so this is the place to build large review datasets.

### What you can do with it

- Collect thousands of reviews for any Android app
- Monitor ratings, complaints and feature requests over time
- Read developer replies alongside the reviews
- Analyze a competitor's reviews and version history
- Build an app-intelligence / ASO dataset (search a keyword, get every app's installs, rating and details)

### Input

| Field | What it does | Example |
|-------|--------------|---------|
| **Google Play URLs or package IDs** | The apps to scrape. | `https://play.google.com/store/apps/details?id=com.spotify.music` or `com.spotify.music` |
| **Search terms** | Or find apps by keyword instead of pasting URLs. | `meditation`, `budget tracker` |
| **What to return** | "App reviews" (one row per review) or "App details only" (one row per app). | App reviews |
| **Max reviews per app** | Optional cap. Leave blank for all available. | `2000` |
| **Sort reviews by** | Newest, rating, or most helpful. | Newest |
| **Country / Language** | Storefront and language codes. | `us` / `en` |

### Output

**App reviews mode** — one row per review, with the app's details attached:

```json
{
  "appId": "com.spotify.music",
  "appName": "Spotify: Music and Podcasts",
  "appDeveloper": "Spotify AB",
  "appScore": 4.33,
  "appUrl": "https://play.google.com/store/apps/details?id=com.spotify.music",
  "reviewId": "e1a2...",
  "rating": 5,
  "title": null,
  "text": "amazing",
  "userName": "A Google user",
  "reviewDate": "2026-07-06T09:12:00.000Z",
  "thumbsUp": 3,
  "reviewAppVersion": "8.9.72.492",
  "replyText": null,
  "replyDate": null,
  "reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=e1a2...",
  "scrapedAt": "2026-07-07T08:05:00.000Z"
}
````

**App details mode** — one row per app: developer, category, rating, ratings count, installs, price, in-app purchases, ad-supported, content rating, Android version, current version, release/update dates, summary, description, icon and URL.

Fill rates on the core review fields (rating, text, author, date, app name/ID) and on app metadata are ~100%.

### How it works

Uses the maintained open-source google-play-scraper engine, which talks to Google Play's public web endpoints. Reviews are paginated via Google's continuation token, so large apps yield thousands of reviews. No proxy is required; you can add one only for very large runs.

### Limits

- Reviews are returned newest-first (or by rating / helpfulness); very old reviews may not all be reachable.
- Google Play only (not the Apple App Store — see the companion **App Store Scraper**).

### Pricing

Pay per result. You only pay for the reviews or apps you actually get.

# Actor input Schema

## `appUrls` (type: `array`):

Paste Google Play app URLs or package IDs — e.g. https://play.google.com/store/apps/details?id=com.facebook.katana or com.facebook.katana. Leave empty and use search terms instead.

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

Or find apps by keyword — e.g. meditation, budget tracker, chess. Each term returns the top matching apps.

## `resultType` (type: `string`):

Reviews: one row per user review (with the app's details attached). Apps: one row per app with full metadata (name, developer, rating, installs, price, version, description).

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

Cap reviews collected per app. Leave blank for all available (Google Play exposes thousands per popular app).

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

Newest, highest rating, or most helpful.

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

2-letter country code for the storefront — e.g. us, gb, de, br. Default us.

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

2-letter language code — e.g. en, es, de, pt. Default en.

## `searchLimit` (type: `integer`):

How many apps to return per search term (max 250).

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

Cap on total rows (reviews or apps). Leave blank for everything.

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

Optional. Google Play works without a proxy; add one only for very large runs to avoid rate limits.

## Actor input object example

```json
{
  "appUrls": [
    "https://play.google.com/store/apps/details?id=com.spotify.music"
  ],
  "searchTerms": [],
  "resultType": "reviews",
  "maxReviewsPerApp": 200,
  "reviewSort": "newest",
  "country": "us",
  "language": "en",
  "searchLimit": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "appUrls": [
        "https://play.google.com/store/apps/details?id=com.spotify.music"
    ],
    "searchTerms": [],
    "maxReviewsPerApp": 200,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("swerve/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 = {
    "appUrls": ["https://play.google.com/store/apps/details?id=com.spotify.music"],
    "searchTerms": [],
    "maxReviewsPerApp": 200,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("swerve/google-play-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "appUrls": [
    "https://play.google.com/store/apps/details?id=com.spotify.music"
  ],
  "searchTerms": [],
  "maxReviewsPerApp": 200,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call swerve/google-play-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=swerve/google-play-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Scraper - Android Apps & Reviews",
        "description": "Scrape Google Play (Android) reviews and app details. Paste Play Store URLs or package IDs, or search by keyword. Reviews include rating, text, author, date, helpful votes, app version and developer replies. App details include developer, category, rating, installs, price, version and description.",
        "version": "0.1",
        "x-build-id": "ARFX15Cod3mubFW5c"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/swerve~google-play-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-swerve-google-play-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/swerve~google-play-scraper/runs": {
            "post": {
                "operationId": "runs-sync-swerve-google-play-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/swerve~google-play-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-swerve-google-play-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "appUrls": {
                        "title": "Google Play URLs or package IDs",
                        "type": "array",
                        "description": "Paste Google Play app URLs or package IDs — e.g. https://play.google.com/store/apps/details?id=com.facebook.katana or com.facebook.katana. Leave empty and use search terms instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Or find apps by keyword — e.g. meditation, budget tracker, chess. Each term returns the top matching apps.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultType": {
                        "title": "What to return",
                        "enum": [
                            "reviews",
                            "apps"
                        ],
                        "type": "string",
                        "description": "Reviews: one row per user review (with the app's details attached). Apps: one row per app with full metadata (name, developer, rating, installs, price, version, description).",
                        "default": "reviews"
                    },
                    "maxReviewsPerApp": {
                        "title": "Max reviews per app",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap reviews collected per app. Leave blank for all available (Google Play exposes thousands per popular app)."
                    },
                    "reviewSort": {
                        "title": "Sort reviews by",
                        "enum": [
                            "newest",
                            "rating",
                            "helpfulness"
                        ],
                        "type": "string",
                        "description": "Newest, highest rating, or most helpful.",
                        "default": "newest"
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "2-letter country code for the storefront — e.g. us, gb, de, br. Default us.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "2-letter language code — e.g. en, es, de, pt. Default en.",
                        "default": "en"
                    },
                    "searchLimit": {
                        "title": "Apps per search term",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "How many apps to return per search term (max 250).",
                        "default": 20
                    },
                    "maxItems": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap on total rows (reviews or apps). Leave blank for everything."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Optional. Google Play works without a proxy; add one only for very large runs to avoid rate limits.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
