# Google Play Reviews Scraper - Low-Star Filter, No Login (`obliging_resilience/google-play-reviews-scraper`) Actor

Scrape public Google Play reviews of any Android app: rating, text, date, author, thumbs up, app version and developer reply. Filter by stars, sort, country, language and date. No login, no API keys.

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

## Pricing

from $0.30 / 1,000 review scrapeds

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 Reviews Scraper (Android app reviews, no login)

Get **public Google Play reviews for any Android app** as clean JSON/CSV: rating, text, date, author, thumbs up, app version and developer reply. No Google account, no API key, no proxies.
**Price: $0.30 per 1,000 reviews** (pay per event: `review` = $0.0003). Error rows are free.

### Example output

| reviewId | appId | rating | text | date | author | thumbsUp | appVersion | replyText |
|---|---|---|---|---|---|---|---|---|
| 9a898771-939c-... | com.whatsapp | 1 | Please improve the camera quality | 2026-10-19 | zaituni abiani | 0 | 2.26.28.77 | |
| b6d9d24a-cbfc-... | com.spotify.music | 1 | An android update seems to have broken Spotify. It loads very slowly. | 2026-10-19 | (author) | 3 | 9.0.1 | Sorry about that, please update. |

### What you get

- Stable review id (`reviewId`), app package name, country and language on every row
- Star rating (1-5), full review text (Google Play reviews have no title)
- Review date (ISO, UTC), author display name, thumbs-up count
- App version the review was written for (when Google provides it)
- Developer reply text and date, when the developer answered
- Link to the review

### Input

| Field | Description |
|---|---|
| `apps` | Package names (`com.whatsapp`) or `play.google.com` URLs |
| `country` | Two-letter Play Store country, default `us` |
| `language` | Review language, default `en` |
| `ratings` | Optional: keep only these stars, e.g. `1, 2, 3` for complaints. Empty = all |
| `sort` | `newest` (default), `rating` or `helpfulness` |
| `maxReviewsPerApp` | Reviews saved per app after filters (default 200) |
| `sinceDate` | Optional ISO date, e.g. `2026-10-01`. Older reviews are skipped; with `newest` the scan stops early, ideal for scheduled incremental pulls |

```json
{
  "apps": ["com.whatsapp", "https://play.google.com/store/apps/details?id=com.spotify.music"],
  "country": "us",
  "language": "en",
  "ratings": ["1", "2", "3"],
  "sort": "newest",
  "maxReviewsPerApp": 500,
  "sinceDate": "2026-10-01"
}
```

Error row example: `{ "app": "whatsapp", "error": "Not a valid Google Play package name (like com.whatsapp) or play.google.com URL." }`

### Use with AI agents / MCP

Every Apify actor can be called by AI agents through the Apify MCP server (`https://mcp.apify.com`) or the Apify API. Give your agent this actor and it can ask things like "what do users hate about this app this week?". Output is flat JSON with stable ids, so an agent can group by `appVersion`, count 1-star reviews or summarise `text` directly. For daily monitoring, schedule the actor with `sinceDate` set to yesterday and feed only the new rows to your agent.

### Use cases

- Find what broke after a release (1-3 stars, group by `appVersion`)
- Competitor and market research across apps and languages
- Sentiment analysis and topic models on real user text
- Support triage and feature request mining
- Track developer reply rates and response time

### FAQ

**How many reviews can I get?** Google Play lets the public list page deep into an app's reviews; very popular apps return thousands. Time per 1,000 reviews is a few seconds plus polite pauses.

**Why fewer reviews than expected?** The app may have few reviews in that country and language, or your star filter removed many. Star filters run after download, so rare ratings need more scanning (the actor scans up to 10x the requested amount).

**Why is the title missing?** Google Play reviews have no title, only text.

**Other languages?** Set `language` (for example `de`, `fr`, `pt-BR`) and `country`. Run once per combination.

**Does it need proxies?** No. It makes one request at a time with pauses and retries with backoff on rate limits.

### Disclaimer

This is an **unofficial** tool. It is not affiliated with, endorsed by or sponsored by Google. It reads only publicly visible review data, with no login. You are responsible for using the data in line with Google Play's terms and applicable law (for example GDPR). Reviews belong to their authors; use them for research and analysis, not republishing. Google can change its pages at any time, which may temporarily break the actor.

Built with the help of AI tools (Claude by Anthropic). Maintained by tinygrid. Issues and feature requests are welcome in the Issues tab.

# Actor input Schema

## `apps` (type: `array`):

Google Play package names (com.whatsapp) or play.google.com URLs such as https://play.google.com/store/apps/details?id=com.spotify.music.

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

Two-letter Play Store country code (us, gb, de, lt ...).

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

Review language code (en, de, fr, pt-BR ...). Google returns reviews written in this language.

## `ratings` (type: `array`):

Optional. Keep only these star ratings, for example 1, 2, 3 to collect complaints. Empty means all stars. Filtering happens after download.

## `sort` (type: `string`):

newest, rating or helpfulness (most helpful first).

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

Maximum reviews saved per app (after filters).

## `sinceDate` (type: `string`):

Optional. ISO date like 2026-01-01. Older reviews are skipped; with sort=newest the scan stops early (good for incremental runs).

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music"
  ],
  "country": "us",
  "language": "en",
  "ratings": [],
  "sort": "newest",
  "maxReviewsPerApp": 200
}
```

# Actor output Schema

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

Public Google Play reviews and per-app error records stored in the default dataset.

# 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 = {
    "apps": [
        "com.spotify.music"
    ],
    "ratings": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("obliging_resilience/google-play-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 = {
    "apps": ["com.spotify.music"],
    "ratings": [],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,obliging_resilience/google-play-reviews-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/Ps8O2apdXpjbWKXgv/builds/oAZcCzFig6r9vtHLu/openapi.json
