# Google Play Review Scraper (`mrdoe/google-play-review-scraper`) Actor

Returns reviews for any Google Play Store app, with ratings, full text, dates, helpful votes and developer replies. No login needed.

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

## Pricing

from $1.10 / 1,000 review returneds

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/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 Review Scraper — get any app's reviews with ratings, full text, dates and developer replies](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-play-review-scraper--hero.png)

### What does Google Play Review Scraper do?

Google Play Review Scraper returns reviews for any app on the Google Play Store as clean
structured data. For each review you get the star rating, full review text, the date it was
posted, how many people found it helpful, and the developer's own reply when there is one.
No login, no Google account needed.

### Why use Google Play Review Scraper?

- **No account needed** - works fully logged out, every run.
- **Full detail, not a summary** - complete review text, exact dates, helpful-vote counts and
  developer replies, not just a star average.
- **Any app** - just give it the package name from the app's own Play Store URL.
- **Three ways to sort** - most relevant, newest, or top rated, depending on what you need.
- **Multi-language** - read reviews from any Play Store language/region storefront.

### What makes this different

Most review lookups only show you the handful of reviews visible on an app's main Play Store
page. This Actor pages all the way through an app's reviews automatically, so you can pull
hundreds of real reviews - including the developer's own responses - in one run instead of
scrolling and copy-pasting by hand.

### Who uses Google Play Review Scraper?

- **App developers and product teams** - monitor what users are saying about your own app,
  including recent complaints and praise, without opening the Play Store every day.
- **Competitive analysts** - see exactly what users like and dislike about a competitor's app,
  straight from their own words.
- **Market researchers** - gauge real user sentiment and common complaints for any app or
  category before making a decision.
- **Customer support and QA teams** - catch recurring bug reports or feature requests showing
  up in reviews, with dates, so you can track if an issue is new or long-standing.

### How it works

![How Google Play Review Scraper turns an app ID into review data](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-play-review-scraper--how-it-works.png)

1. **Your input** - an app's package name, a sort order, and a language/region.
2. **The Actor collects it** - it reads the Play Store's own review data for that app, works
   fully logged out, and pages through automatically up to your limit.
3. **Your output** - one structured record per review, ready for a spreadsheet, dashboard or
   report.

### What data can you extract?

| Field | Description |
|---|---|
| `authorName` / `authorAvatarUrl` | The reviewer's display name and profile picture |
| `rating` | Star rating, 1 to 5 |
| `reviewText` | The full review text |
| `reviewDate` | When the review was posted (ISO timestamp) |
| `thumbsUpCount` | How many people marked this review as helpful |
| `developerReplyText` / `developerReplyDate` | The developer's own reply and when they posted it, when there is one |
| `appVersionAtReview` | The app version the reviewer had installed, when Google discloses it |
| `appId` / `country` / `sortedBy` | The app, language/region and sort order used for this run |
| `scrapedAt` | When this record was collected (ISO timestamp) |

### How to use Google Play Review Scraper

1. Open the Actor and go to the **Input** tab.
2. Enter an **App ID** - the package name from the app's Play Store URL (see the screenshot
   below).
3. Choose a **Sort by** order and, optionally, a **Language/region**.
4. Optionally set **Max results**.
5. Click **Start**.
6. Open the **Dataset** tab, or pull results via the API, once the run finishes.

![Google Play Review Scraper input form with app ID, sort order and language](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-play-review-scraper--input.png)

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `appId` | String | Yes | `"com.spotify.music"` | The app's package name, from its Play Store URL |
| `sortBy` | String | No | `"most_relevant"` | `"most_relevant"`, `"newest"` or `"top_rated"` |
| `country` | String | No | `"en"` | The Play Store language/region to read reviews from |
| `maxItems` | Integer | No | `50` | Maximum number of reviews to return |
| `proxyConfiguration` | Object | No | No proxy | Advanced - this works without a proxy for moderate volumes |

### Output Data

Each review produces one dataset record. Example:

```json
{
    "reviewId": "e1616c1e-090d-4730-9b50-6228add85b87",
    "appId": "com.spotify.music",
    "country": "en",
    "sortedBy": "newest",
    "authorName": "Arcadia Lamming",
    "rating": 1,
    "reviewText": "The ads are completely out of control now.",
    "reviewDate": "2025-07-25T16:02:47.000Z",
    "thumbsUpCount": 433,
    "developerReplyText": "Hey! We hear you, and we'll pass your feedback along to the Ads team.",
    "developerReplyDate": "2025-07-25T15:28:51.000Z",
    "appVersionAtReview": null,
    "scrapedAt": "2026-10-22T07:14:35.611Z"
}
```

![Sample dataset table from Google Play Review Scraper](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-play-review-scraper--output.png)
![Every output field labelled on one example record](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/google-play-review-scraper--fields.png)

### Usage Examples

- **Own-app monitoring** - run against your own app's ID on a schedule, sorted by `newest`,
  to catch new complaints or praise as they come in.
- **Competitor research** - run against a competitor's app sorted by `most_relevant` to see
  the reviews Google itself surfaces as most representative.
- **Feature-request mining** - sort by `top_rated` to see what happy users specifically call
  out as working well.
- **Multi-market check** - run the same app with different `country` values to compare
  sentiment across language/region storefronts.

### Tips for Best Results

- Find the exact `appId` from the app's own Play Store URL - it's the value after `id=`.
- `most_relevant` is Google's own blended relevance ranking - a good general-purpose default.
- Developer replies are genuinely absent on most reviews - `null` there just means the
  developer hasn't responded to that specific review.

### Known Limitations

- Returns the reviews Google's own Play Store currently discloses for the given app, language
  and sort order - not necessarily every review ever left.
- `appVersionAtReview` is only present when Google itself discloses it for that review.
- Reflects a snapshot at the time of the run; new reviews are posted continuously.

### Integrations

Connect Google Play Review Scraper to the rest of your stack via the [Apify API](https://docs.apify.com/api/v2),
[webhooks](https://docs.apify.com/platform/integrations/webhooks), scheduled runs, or directly
to Google Sheets, Make, and Zapier through Apify's built-in integrations.

### Export Formats

Download results as **JSON, CSV, Excel, or XML** from the Dataset tab, or fetch them
programmatically via the Apify API.

### Frequently Asked Questions

#### Do I need a Google account or to log in?

No. Every run works fully logged out.

#### Where do I find an app's App ID?

It's the package name in the app's Play Store URL, after `id=` - for example,
`com.spotify.music` for `https://play.google.com/store/apps/details?id=com.spotify.music`.

#### Can I get reviews in a specific language?

Yes - set `country` to the matching 2-letter language code (e.g. `"es"`, `"pt"`, `"de"`).

#### Can I schedule this to run automatically?

Yes, use Apify's built-in [Scheduler](https://docs.apify.com/platform/schedules) to re-check an
app's reviews on any interval you choose.

### Support

Found an issue or have a request? Open it on the Actor's **Issues** tab in the Apify Console.

### Legal / Responsible Use

You're responsible for using this Actor in compliance with applicable laws and the target
platform's terms of service. This Actor retrieves publicly viewable review information only;
it does not collect personal data beyond what reviewers themselves chose to make public.

# Actor input Schema

## `appId` (type: `string`):

The app's package name, found in its Play Store URL after "id=" (e.g. "com.spotify.music" for https://play.google.com/store/apps/details?id=com.spotify.music).

## `sortBy` (type: `string`):

Which order to return reviews in.

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

The Play Store locale to read reviews from (2-letter language code, e.g. "en", "es", "pt", "de").

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

Maximum number of reviews to return.

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

Advanced - this works without a proxy for moderate volumes. Enable Apify Proxy for very large runs.

## Actor input object example

```json
{
  "appId": "com.spotify.music",
  "sortBy": "most_relevant",
  "country": "en",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "appId": "com.spotify.music",
    "sortBy": "most_relevant",
    "country": "en",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/google-play-review-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 = {
    "appId": "com.spotify.music",
    "sortBy": "most_relevant",
    "country": "en",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/google-play-review-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 '{
  "appId": "com.spotify.music",
  "sortBy": "most_relevant",
  "country": "en",
  "maxItems": 50
}' |
apify call mrdoe/google-play-review-scraper --silent --output-dataset

```

## MCP server setup

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