# Google Play Reviews & App Data (`trap_check/google-play-reviews-app-data`) Actor

Get Google Play reviews, app details and search results. Filter reviews by date, star rating, country and language. Built for monitoring, research and AI agents.

- **URL**: https://apify.com/trap_check/google-play-reviews-app-data.md
- **Developed by:** [Chris O'Connor](https://apify.com/trap_check) (community)
- **Categories:** Developer tools, Marketing, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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 & App Data

Get **Google Play reviews**, **app details** and **app search results** in one run. Filter reviews by **date**, **star rating**, **country** and **language**, and only pay for the rows you get.

Use it to:

- 📉 **Monitor complaints:** pull only new 1–2 star reviews since your last run
- 🔍 **Research competitors:** compare ratings, installs and recent reviews across apps
- 🤖 **Feed AI agents and dashboards:** clean JSON with stable field names
- 📊 **Track releases:** see what users say after each app version

### How to use it

1. Paste Google Play **app links or package IDs** (e.g. `com.spotify.music`) into **Apps**, and/or type keywords into **Search terms**.
2. Choose what you want: **app details**, **reviews**, or both.
3. Optional filters: **Only reviews since** (`2026-01-31` or `7 days`), **Star ratings** (e.g. 1 and 2), **Country**, **Language**, **Max reviews per app**.
4. Run it and download results as JSON, CSV, Excel, or via the API.

**Tip for monitoring:** schedule a daily run with *Newest first* and *Only reviews since = 1 day*. The run stops as soon as it reaches older reviews, so you only pay for new ones.

### Pricing (pay per result)

| Event | Price |
|---|---|
| Review | $0.10 per 1,000 reviews |
| App (details or search result) | $1.00 per 1,000 apps |

No subscription and no minimum. You set a maximum spend per run, and the run stops cleanly when it's reached.

### Output

Every row has a `type` field: `app` or `review`.

**Review row** (example)

```json
{
  "type": "review",
  "appId": "com.spotify.music",
  "appTitle": "Spotify: Music and Podcasts",
  "reviewId": "4b1e…",
  "userName": "Jane D.",
  "score": 1,
  "date": "2026-10-07T00:38:06.159Z",
  "text": "Keeps skipping songs since the last update…",
  "thumbsUp": 12,
  "appVersion": "9.0.82",
  "replyText": "Sorry to hear that! Please try…",
  "replyDate": "2026-10-07T09:12:00.000Z",
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=…",
  "country": "us",
  "language": "en"
}
```

**App row:** `appId`, `title`, `url`, `summary`, `developer`, `developerEmail`, `developerWebsite`, `genre`, `score`, `ratings`, `reviews`, `histogram` (count per star), `installs`, `minInstalls`, `free`, `price`, `currency`, `offersIAP`, `containsAds`, `contentRating`, `released`, `updated`, `version`, `recentChanges`, `icon`, `country`, `language`, `scrapedAt`.

### Good to know

- **Reliability:** each request is retried automatically, and apps that don't exist are skipped with a clear message instead of failing the run.
- **Proxy:** usually not needed. If you run very large jobs and Google starts limiting requests, turn on the Proxy option.
- **Countries and languages:** reviews differ by country and language. Use the same codes you see in Google Play links (`gl=` and `hl=`).
- Only public data shown on Google Play is collected. No login is used.

### Questions or a missing field?

Open an issue on this Actor's page.

# Actor input Schema

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

Google Play app links (https://play.google.com/store/apps/details?id=...) or package IDs like com.spotify.music.

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

Optional. Find apps by keyword (e.g. "budget tracker"). Each found app is returned, and its reviews too if "Include reviews" is on.

## `maxSearchResults` (type: `integer`):

Up to 250.

## `includeAppDetails` (type: `boolean`):

One row per app: title, rating, installs, rating histogram, developer, price, last update and more.

## `includeReviews` (type: `boolean`):

One row per review: star rating, text, date, thumbs-up count, app version and the developer reply.

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

Stops after this many reviews per app (after filters). Use 0 for no limit.

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

"Newest first" is best for monitoring and works with "Only reviews since".

## `reviewsSince` (type: `string`):

Optional date (YYYY-MM-DD) or relative time like "7 days". With "Newest first" the run stops as soon as it reaches older reviews, which keeps monitoring runs cheap.

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

Optional. Keep only these star ratings, e.g. 1 and 2 for complaints.

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

Two-letter country code (us, gb, de, in...).

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

Two-letter language code (en, de, es...).

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

Usually not needed. Turn on if Google starts limiting requests.

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music"
  ],
  "maxSearchResults": 20,
  "includeAppDetails": true,
  "includeReviews": true,
  "maxReviewsPerApp": 100,
  "sort": "newest",
  "country": "us",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

App and review rows as JSON, CSV, Excel or via the API.

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

// Run the Actor and wait for it to finish
const run = await client.actor("trap_check/google-play-reviews-app-data").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"] }

# Run the Actor and wait for it to finish
run = client.actor("trap_check/google-play-reviews-app-data").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"
  ]
}' |
apify call trap_check/google-play-reviews-app-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trap_check/google-play-reviews-app-data"
        }
    }
}
```

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/8av4rmyzIEgERMcGK/builds/AKsWzvutWtAXq1oSc/openapi.json
