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

Scrape and collect Google Play Store app reviews easily.
Easily collect Google Play Store app reviews to uncover user insights, track feedback trends, and analyze ratings — all in one simple, automated scraper. Perfect for market research and app performance monitoring.

- **URL**: https://apify.com/fetchcraftlabs/playstore-reviews-scraper.md
- **Developed by:** [FetchCraft Labs](https://apify.com/fetchcraftlabs) (community)
- **Categories:** Integrations, SEO tools, Other
- **Stats:** 28 total users, 10 monthly users, 96.2% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.07 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Playstore Reviews Scraper

The Playstore Reviews Scraper gathers fresh public feedback directly from Google Play Store listings. Provide the store URL or app ID, choose how many reviews you need, and the Actor assembles a clean dataset with the latest comments, ratings, timestamps, and reviewer metadata. Each run can collect up to 25,000 records, giving you enough depth to spot sentiment shifts and emerging themes.

### What You Get

- **Complete review history** – capture both recent and legacy feedback to compare how sentiment evolves over time.
- **Structured insights** – every review includes rating, headline, body text, user name, version, locale, and date so you can filter by any dimension you care about.
- **Flexible slicing** – grab reviews for a single app, multiple locales, or specific time windows without manual copy-paste work.

### Popular Use Cases

- **Analytics & Dashboards** – feed the dataset into BI tools to monitor weekly satisfaction, highlight recurring bugs, or track the impact of releases.
- **Market & Product Research** – benchmark against competitors, uncover feature requests, and understand what’s resonating with different user segments.
- **Support & Operations** – surface critical issues faster by forwarding 1-star spikes to support teams or triaging feedback by keywords.
- **Growth & Marketing** – identify testimonials to spotlight in campaigns and watch how messaging changes user perception.

### Typical Workflow

1. Enter the Google Play Store URL or app ID you want to analyze.
2. Set how many reviews to gather (up to 25k) and choose optional filters like minimum rating or language.
3. Run the Actor and download the resulting dataset or stream it directly to your analytics stack.

### Example Outcomes

- Weekly sentiment tracker combining average rating, review volume, and top keywords for leadership reports.
- Competitive landscape comparison showing how users rate feature depth, stability, and support responsiveness across similar apps.
- AI-powered insights such as auto-generated release summaries, clustering feedback with LLMs, or training sentiment models tailored to your product language.
- Feature request backlog mined from “most helpful” reviews, prioritized by the number of mentions and star rating.

### Sample Output

```json
[
  {
    "appId": "com.supercell.clashroyale",
    "appUrl": "https://play.google.com/store/apps/details?id=com.supercell.clashroyale",
    "language": "en",
    "country": "us",
    "sort": "RELEVANT",
    "retrievedAt": "2025-10-27T17:52:19.392740+00:00",
    "reviewId": "623651c0-ff2c-4657-857a-049e192dd052",
    "userName": "Christian Monserrate",
    "userImage": "https://play-lh.googleusercontent.com/a-/ALV-UjX3Ua5_PcKGnGjVuC6GvJk-x2A3IiEuEFTJ-Lo9WPSwzJLVxT10",
    "score": 4,
    "content": "It's a great game overall, my biggest complaint is how pay to win the game can be, about 75 percent of the items in the shop are bought with money, which makes it so much easier to level up cards instantly. I don't like about paying for mobile games, so I've always been a free to play user. There's been some challenges against pay to win users, but nothing major if you manage to have good level cards",
    "thumbsUpCount": 1061,
    "appVersion": "120169008",
    "at": "2025-10-10T00:47:17"
  },
  {
    "appId": "com.supercell.clashroyale",
    "appUrl": "https://play.google.com/store/apps/details?id=com.supercell.clashroyale",
    "language": "en",
    "country": "us",
    "sort": "RELEVANT",
    "retrievedAt": "2025-10-27T17:52:19.392740+00:00",
    "reviewId": "a381c175-4824-4618-afb2-0064556dd913",
    "userName": "Lincoln M.",
    "userImage": "https://play-lh.googleusercontent.com/a/ACg8ocJzPmkCi6NFQYtG0MmfCNDE3miFaFvUXufNQ0BKLBXTuGKe-Q=mo",
    "score": 3,
    "content": "This game makes it so you fight in a regular match, but the player that you are fighting has a large number of cards you don't have. And when that happens, your cards don't really stand a chance. So that reason makes the game a lot harder to play and more frustrating for the players. But sometimes the matches that I play are still pretty fair, so that is why my rating is in the middle. So if the game made a change that you could be able to fight players that have the same cards that you have.",
    "thumbsUpCount": 17,
    "appVersion": "120169018",
    "at": "2025-10-22T04:15:59"
  },
  {
    "appId": "com.supercell.clashroyale",
    "appUrl": "https://play.google.com/store/apps/details?id=com.supercell.clashroyale",
    "language": "en",
    "country": "us",
    "sort": "RELEVANT",
    "retrievedAt": "2025-10-27T17:52:19.392740+00:00",
    "reviewId": "f4d2a001-44d0-4101-8174-592d89a361bd",
    "userName": "Radu Codreanu",
    "userImage": "https://play-lh.googleusercontent.com/a-/ALV-UjV-FOEgkqpZvfphc33Y5fvpO75MGI7AJD_6mzJ_nLU-mZFWZQ_z",
    "score": 3,
    "content": "Honestly I think the game was in a good spot and still is, but for whatever reason they decided to add... merge tactics (of all things) to it, instead of maybe improving on the clan gameplay? And they locked away the ranked mode which was really fun. One step forward, two steps back. The matchmaking feels better overall though for some time now.",
    "thumbsUpCount": 152,
    "appVersion": "120169008",
    "at": "2025-10-16T16:49:47"
  },
  {
    "appId": "com.supercell.clashroyale",
    "appUrl": "https://play.google.com/store/apps/details?id=com.supercell.clashroyale",
    "language": "en",
    "country": "us",
    "sort": "RELEVANT",
    "retrievedAt": "2025-10-27T17:52:19.392740+00:00",
    "reviewId": "3e1bb50e-bed8-4ad1-aaff-a9370e0b3dc2",
    "userName": "Eluen Rodriguez V.",
    "userImage": "https://play-lh.googleusercontent.com/a-/ALV-UjVewaMhsZlqQU5W5e3uHvN0LCQ0rEX6nYBlsuxEbBk_ey2X5Z7S",
    "score": 4,
    "content": "I really like most of the changes that the game has made over the years, I just wish that it was more f2p friendly, bring back the season shop, but better, making it easier to get the things the shop had to offer, the evo shards, currencies, cards, it would be nice if they added elite wildcards too, but maybe it's too much to ask. But there's a lot of potential in that idea, bringing back the trading tokens or whatever, I think it would make everyone happy.",
    "thumbsUpCount": 2785,
    "appVersion": "110548000",
    "at": "2025-08-19T05:54:08"
  }
]
````

### Next Steps

- Schedule the Actor on Apify to keep your dataset refreshed automatically.
- Connect the output to Google Sheets, BigQuery, or your CRM to enrich existing workflows.
- Share the dataset with teammates so product, research, and marketing stay aligned on real user feedback.

# Actor input Schema

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

List of Google Play Store app URLs or app IDs to fetch reviews for.

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

Proxy settings for the actor. Disabled by default; enable Apify proxy only if your account includes access.

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

Maximum number of reviews to retrieve for each app (must be at least 1).

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

Two-letter language code passed to Google Play.

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

Two-letter country code passed to Google Play.

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

Sort reviews by NEWEST, RELEVANT, or RATING.

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

Select the exact star rating (1-5) that should be returned from the reviews.

## Actor input object example

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

# 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"
    ]
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Playstore Reviews Scraper",
        "description": "Scrape and collect Google Play Store app reviews easily.\nEasily collect Google Play Store app reviews to uncover user insights, track feedback trends, and analyze ratings — all in one simple, automated scraper. Perfect for market research and app performance monitoring.",
        "version": "0.5",
        "x-build-id": "xJjQyO9zahY345Svp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fetchcraftlabs~playstore-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fetchcraftlabs-playstore-reviews-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/fetchcraftlabs~playstore-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fetchcraftlabs-playstore-reviews-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/fetchcraftlabs~playstore-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fetchcraftlabs-playstore-reviews-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",
                "required": [
                    "appUrls"
                ],
                "properties": {
                    "appUrls": {
                        "title": "Google Play App URLs",
                        "type": "array",
                        "description": "List of Google Play Store app URLs or app IDs to fetch reviews for.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "https://play.google.com/store/apps/details?id=com.whatsapp"
                        ]
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for the actor. Disabled by default; enable Apify proxy only if your account includes access.",
                        "default": {
                            "useApifyProxy": false
                        }
                    },
                    "maxReviewsPerApp": {
                        "title": "Max Reviews Per App",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of reviews to retrieve for each app (must be at least 1).",
                        "default": 500
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Two-letter language code passed to Google Play.",
                        "default": "en"
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter country code passed to Google Play.",
                        "default": "us"
                    },
                    "reviewsSort": {
                        "title": "Reviews Sort Order",
                        "enum": [
                            "NEWEST",
                            "RELEVANT",
                            "RATING"
                        ],
                        "type": "string",
                        "description": "Sort reviews by NEWEST, RELEVANT, or RATING.",
                        "default": "NEWEST"
                    },
                    "ratingFilter": {
                        "title": "Rating To Include",
                        "enum": [
                            "",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5"
                        ],
                        "type": "string",
                        "description": "Select the exact star rating (1-5) that should be returned from the reviews.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
