# Playstore Reviews Scraper (`scrapers-hub/playstore-reviews-scraper`) Actor

Google Play Store Reviews scraper to extract publicly available app reviews, ratings, reviewer names, review dates, developer responses, and app metadata 📱⭐ Perfect for sentiment analysis, app research, competitor analysis, and customer feedback insights.

- **URL**: https://apify.com/scrapers-hub/playstore-reviews-scraper.md
- **Developed by:** [Scrapers Hub](https://apify.com/scrapers-hub) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### What does Google Play Store Reviews Scraper do?

**Google Play Store Reviews Scraper** extracts user reviews from [Google Play Store](https://play.google.com) for any Android app — without the official API. Provide one or more app URLs or package IDs and get back structured review data including rating, content, date, thumbs-up count, and app version, all saved to an Apify dataset.

### Why scrape Google Play Store reviews?

User reviews are a goldmine of product intelligence. Businesses use them to track sentiment, benchmark competitors, identify feature requests, and respond to user feedback at scale. The official Google Play Developer API only returns reviews for apps you own — this Actor has no such restriction.

Key features:

- Scrape reviews for **any public Android app** — yours or a competitor's
- Filter by **star rating** (1–5) to focus on praise or complaints
- Sort by **newest**, **most relevant**, or **by rating**
- Supports **multiple apps** in a single run
- Uses **residential proxies** by default to avoid rate limiting
- **Live data push** — results appear in your dataset as they are scraped, not only at the end
- Built-in **3× retry** with exponential backoff on failed requests

### What data can Google Play Store Reviews Scraper extract?

| Field | Type | Description |
|-------|------|-------------|
| `reviewId` | String | Unique review identifier |
| `userName` | String | Display name of the reviewer |
| `userImage` | String | URL of the reviewer's profile picture |
| `score` | Integer | Star rating (1–5) |
| `content` | String | Full review text |
| `thumbsUpCount` | Integer | Number of helpful votes |
| `appVersion` | String | App version installed at time of review |
| `at` | String | ISO 8601 timestamp of the review |
| `appId` | String | App package ID (e.g. `com.whatsapp`) |
| `appUrl` | String | Direct URL to the app on Play Store |
| `language` | String | Language code used for the request |
| `country` | String | Country code used for the request |
| `sort` | String | Sort order used (NEWEST / RELEVANT / RATING) |
| `retrievedAt` | String | ISO 8601 timestamp when the review was scraped |

### How to scrape Google Play Store reviews

1. **Open the Actor** — Go to the Input tab in Apify Console.
2. **Add app URLs or IDs** — Paste full Play Store URLs like `https://play.google.com/store/apps/details?id=com.whatsapp`, or just the package ID like `com.spotify.music`.
3. **Set max reviews** — Choose how many reviews to collect per app (default: 500).
4. **Configure filters** — Optionally filter by star rating and set language/country.
5. **Run the Actor** — Click Start and watch reviews populate your dataset in real time.
6. **Download results** — Export as JSON, CSV, Excel, or XML from the Dataset tab.

### How much will it cost to scrape Google Play Store reviews?

This Actor uses Apify's compute units plus residential proxy bandwidth. A typical run collecting 500 reviews per app costs a fraction of a cent in compute. Residential proxy usage is metered separately based on data transferred. You can estimate costs in the Apify Console pricing calculator.

### Input

See the **Input** tab in Apify Console for the full configuration form. Key fields:

- **App URLs or IDs** — One or more Play Store URLs or package IDs (required)
- **Max Reviews Per App** — Cap the number of reviews per app (default: 500)
- **Language** — Two-letter language code, e.g. `en`, `de`, `fr` (default: `en`)
- **Country** — Two-letter country code, e.g. `us`, `gb`, `in` (default: `us`)
- **Sort Order** — `NEWEST`, `RELEVANT`, or `RATING` (default: `NEWEST`)
- **Rating Filter** — Optionally restrict to 1–5 star reviews only
- **Proxy Configuration** — Defaults to Apify residential proxies (recommended)

### Output

Results are saved to the default Apify **Dataset** and can be downloaded in JSON, CSV, HTML, or Excel format.

Example output item:

```json
{
  "reviewId": "gp:AOqpTOFmzGRgvCM9...",
  "userName": "Jane Smith",
  "userImage": "https://play-lh.googleusercontent.com/...",
  "score": 5,
  "content": "Absolutely love this app! Works flawlessly.",
  "thumbsUpCount": 42,
  "appVersion": "2.24.10.78",
  "at": "2024-10-15T08:23:11Z",
  "appId": "com.whatsapp",
  "appUrl": "https://play.google.com/store/apps/details?id=com.whatsapp",
  "language": "en",
  "country": "us",
  "sort": "NEWEST",
  "retrievedAt": "2024-10-16T12:00:00.000000Z"
}
```

### Tips

- **Language and country** affect which reviews are returned — use `en`/`us` for the broadest English results.
- For **sentiment analysis**, run two separate jobs: one with `ratingFilter: "1"` and one with `ratingFilter: "5"`.
- Scraping **competitors' reviews** is a common use case — just paste their Play Store URL.
- If you hit empty results, try switching the sort order to `RELEVANT`.

### FAQ, Disclaimers, and Support

**Is scraping Google Play Store reviews legal?**

> Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

**Why am I getting no results?**

Check that the package ID is correct and the app is publicly available in the selected country. Try setting `reviewsSort` to `RELEVANT` as some apps may have fewer newest reviews indexed.

**Can I scrape reviews in other languages?**

Yes — set `language` to any two-letter ISO code (e.g. `de` for German, `ja` for Japanese) and `country` accordingly.

**How do I access results programmatically?**

Use the **API tab** in Apify Console to get a dataset endpoint URL. You can integrate it with Zapier, Make, or any HTTP client.

For bugs or feature requests, use the **Issues** tab on this Actor's page.

# Actor input Schema

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

List of Google Play Store app URLs or package IDs to scrape reviews from.

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

Maximum number of reviews to collect per app.

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

Two-letter language code for reviews (e.g. en, de, fr, es, pt).

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

Two-letter country code for reviews (e.g. us, gb, de, br, in).

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

Sort order for reviews.

## `ratingFilter` (type: `string`):

Only return reviews with this star rating. Leave empty to return all ratings.

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

Proxy settings. Residential proxies are recommended to avoid rate limiting.

## Actor input object example

```json
{
  "appUrls": [
    "https://play.google.com/store/apps/details?id=com.whatsapp",
    "com.spotify.music"
  ],
  "maxReviewsPerApp": 500,
  "language": "en",
  "country": "us",
  "reviewsSort": "NEWEST",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "appUrls": [
        "https://play.google.com/store/apps/details?id=com.whatsapp",
        "com.spotify.music"
    ],
    "maxReviewsPerApp": 500,
    "language": "en",
    "country": "us",
    "reviewsSort": "NEWEST",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers-hub/playstore-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 = {
    "appUrls": [
        "https://play.google.com/store/apps/details?id=com.whatsapp",
        "com.spotify.music",
    ],
    "maxReviewsPerApp": 500,
    "language": "en",
    "country": "us",
    "reviewsSort": "NEWEST",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers-hub/playstore-reviews-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.whatsapp",
    "com.spotify.music"
  ],
  "maxReviewsPerApp": 500,
  "language": "en",
  "country": "us",
  "reviewsSort": "NEWEST",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapers-hub/playstore-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0AHhz60Y4gvzSPhLQ/builds/z5D4dSEril1gt05iA/openapi.json
