# Google Play Store — Review Mining & ASO Intelligence (`straightforward_hydra/google-play-review-aso-scraper`) Actor

Mine Google Play reviews, pull app metadata, and track keyword search rankings (ASO). No API key.

- **URL**: https://apify.com/straightforward\_hydra/google-play-review-aso-scraper.md
- **Developed by:** [Dev D](https://apify.com/straightforward_hydra) (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 $4.00 / 1,000 items

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/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/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Google Play Store — Review Mining & ASO Intelligence 📱

**Mine Google Play reviews for bugs, feature requests and sentiment · track keyword search rankings (ASO) · monitor competitor apps. No API key, no login.**

A focused **app market-intelligence** tool for Google Play (Android), built for two audiences:

- 👩‍💻 **App developers & product teams** — pull and filter reviews to surface complaints (≤2★), feature requests and version-specific feedback.
- 📈 **App marketers (ASO)** — track where apps rank for keywords, and monitor competitor installs, ratings and update cadence.

> Google Play has no official API — this Actor reads Google's internal JSON endpoints (no key). Pairs perfectly with an App Store (iOS) scraper for full cross-platform coverage.

---

### Three modes

- ⭐ **Reviews (mining)** — reviews for any app, sortable, filterable by star rating. Isolate 1–2★ complaints or 5★ praise.
- 📱 **App details (competitor tracking)** — full metadata: installs, ratings histogram, price/IAP, developer, category, version, last-updated.
- 🔎 **Search / ASO** — keyword search results **with rank position** for keyword-rank tracking.

### Features

- ✅ **No API key** — works out of the box.
- ✅ **Complaint mining** — `maxScore: 2` to pull only negative reviews (bugs & churn signals).
- ✅ **Rank tracking** — every search result carries its `rank` for ASO monitoring.
- ✅ **Any storefront** — country + language selectable.
- ✅ **Proxy-ready** — route through Apify Proxy (RESIDENTIAL recommended) since Google throttles datacenter IPs.

---

### Input

| Field | Description |
|---|---|
| **Mode** | reviews / app-details / search. |
| **App IDs or URLs** | Package names or Play URLs (reviews, app-details). |
| **Search queries** | Keywords to rank-track (search mode). |
| **Review sort / min / max rating** | Order and star-rating filters. |
| **Country / Language** | Storefront and locale. |
| **Max reviews per app** | Cap per app. |
| **Proxy** | Apify Proxy (RESIDENTIAL recommended). |

#### Example — mine 1–2★ complaints

```json
{
  "mode": "reviews",
  "appIds": ["com.spotify.music"],
  "sort": "newest",
  "maxScore": 2,
  "maxResults": 500
}
````

#### Example — track keyword ranks (ASO)

```json
{
  "mode": "search",
  "searchQueries": ["vpn", "photo editor", "budget tracker"],
  "searchDepth": 50
}
```

### Output

Review row:

```json
{
  "type": "review",
  "app_id": "com.spotify.music",
  "review_id": "…",
  "user_name": "…",
  "score": 2,
  "content": "Keeps crashing after the latest update…",
  "thumbs_up": 14,
  "at": "2025-01-14T09:22:10",
  "reply_content": null,
  "app_version": "8.9.1"
}
```

Search rows carry `query` + `rank` + app stats; app-details rows carry installs, ratings, price/IAP, developer, category and version.

### Run it on a schedule

Schedule the Actor to watch new 1–2★ reviews for your app (or a competitor's), or to track keyword ranks over time — then pipe changes to **Slack / Google Sheets / a webhook**.

### Notes & limitations

- Google Play has no official API; endpoints are unofficial and can change.
- Google throttles datacenter IPs — use a RESIDENTIAL proxy for reliable cloud runs.
- Public app-listing and review data.
- Data source: Google Play Store.

***

#### Keywords

Google Play scraper, Google Play reviews, Android app reviews, app review scraper, ASO, app store optimization, keyword rank tracking, Play Store scraper, app reviews mining, sentiment analysis, competitor app tracking, Android app data, app installs, app ratings, mobile app intelligence, review monitoring, Google Play API, app market research.

# Actor input Schema

## `mode` (type: `string`):

Reviews = mine app reviews (bugs/feature requests/sentiment); App details = full metadata & competitor tracking; Search = keyword rank tracking (ASO).

## `appIds` (type: `array`):

Package names or Play Store URLs, e.g. com.spotify.music or https://play.google.com/store/apps/details?id=com.spotify.music. Used in Reviews and App details modes.

## `searchQueries` (type: `array`):

Keywords to track, e.g. \["vpn", "photo editor", "budget tracker"]. Rank position is included per result.

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

Order reviews are pulled in.

## `minScore` (type: `integer`):

Keep only reviews with at least this rating (1–5). Great for isolating complaints (e.g. max 2).

## `maxScore` (type: `integer`):

Keep only reviews with at most this rating (1–5).

## `searchDepth` (type: `integer`):

How many ranked results to fetch per keyword.

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

Two-letter storefront country, e.g. us, gb, in, de, br.

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

Two-letter language code, e.g. en, es, de, pt.

## `maxResults` (type: `integer`):

Cap reviews pulled per app (Reviews mode).

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

Google throttles datacenter IPs. RESIDENTIAL proxy is recommended for reliable results from the Apify cloud.

## Actor input object example

```json
{
  "mode": "reviews",
  "appIds": [
    "com.spotify.music"
  ],
  "sort": "newest",
  "searchDepth": 30,
  "country": "us",
  "language": "en",
  "maxResults": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

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

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=straightforward_hydra/google-play-review-aso-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Store — Review Mining & ASO Intelligence",
        "description": "Mine Google Play reviews, pull app metadata, and track keyword search rankings (ASO). No API key.",
        "version": "0.1",
        "x-build-id": "1Z8dt3UhabfXu3PdP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/straightforward_hydra~google-play-review-aso-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-straightforward_hydra-google-play-review-aso-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/straightforward_hydra~google-play-review-aso-scraper/runs": {
            "post": {
                "operationId": "runs-sync-straightforward_hydra-google-play-review-aso-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/straightforward_hydra~google-play-review-aso-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-straightforward_hydra-google-play-review-aso-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",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "reviews",
                            "app-details",
                            "search"
                        ],
                        "type": "string",
                        "description": "Reviews = mine app reviews (bugs/feature requests/sentiment); App details = full metadata & competitor tracking; Search = keyword rank tracking (ASO).",
                        "default": "reviews"
                    },
                    "appIds": {
                        "title": "App IDs or URLs",
                        "type": "array",
                        "description": "Package names or Play Store URLs, e.g. com.spotify.music or https://play.google.com/store/apps/details?id=com.spotify.music. Used in Reviews and App details modes.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search queries (Search/ASO mode)",
                        "type": "array",
                        "description": "Keywords to track, e.g. [\"vpn\", \"photo editor\", \"budget tracker\"]. Rank position is included per result.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sort": {
                        "title": "Review sort (Reviews mode)",
                        "enum": [
                            "newest",
                            "rating",
                            "most_relevant"
                        ],
                        "type": "string",
                        "description": "Order reviews are pulled in.",
                        "default": "newest"
                    },
                    "minScore": {
                        "title": "Minimum star rating (Reviews mode)",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Keep only reviews with at least this rating (1–5). Great for isolating complaints (e.g. max 2)."
                    },
                    "maxScore": {
                        "title": "Maximum star rating (Reviews mode)",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Keep only reviews with at most this rating (1–5)."
                    },
                    "searchDepth": {
                        "title": "Search depth (Search/ASO mode)",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "How many ranked results to fetch per keyword.",
                        "default": 30
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter storefront country, e.g. us, gb, in, de, br.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Two-letter language code, e.g. en, es, de, pt.",
                        "default": "en"
                    },
                    "maxResults": {
                        "title": "Max reviews per app",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Cap reviews pulled per app (Reviews mode).",
                        "default": 200
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Google throttles datacenter IPs. RESIDENTIAL proxy is recommended for reliable results from the Apify cloud.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
