# Google Play Scraper - Rankings, Reviews & App Details (`haketa/google-play-scraper`) Actor

Google Play scraper & API: export top-chart rankings by category & country, app reviews & ratings, full app details and ASO keyword search. Android app market intelligence, review analysis and competitor tracking — fast, no login. Pairs with an Apple App Store scraper.

- **URL**: https://apify.com/haketa/google-play-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 24 total users, 12 monthly users, 95.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper 📱 — Rankings, Reviews & App Details

Scrape **Google Play Store** data as clean, structured JSON — **top-chart rankings by category & country, full app reviews (uncapped & paginated), complete app details, and keyword search.** One actor, four jobs.

Fast and reliable: API-first, no headless browser, with proxy rotation and **fully-paginated reviews with no artificial cap** (the thing most Play scrapers get wrong).

> 💡 **The differentiator:** most Google Play actors only do app details + a handful of reviews. This one owns **top-chart rankings** (a Sensor-Tower-style market-intelligence feed: any category × any country × Top Free / Paid / Grossing) **and** delivers reviews at scale.

***

### 📋 Table of contents

- [What does it do?](#what-does-it-do)
- [Use cases](#use-cases)
- [How to use it](#how-to-use-it-step-by-step)
- [Input parameters](#input-parameters)
- [Input examples](#input-examples)
- [Output — data fields](#output--data-fields)
- [Sample output records](#sample-output-records)
- [Categories & countries](#categories--countries)
- [Tips & best practices](#tips--best-practices)
- [Frequently asked questions](#frequently-asked-questions)
- [Changelog](#changelog)

***

### What does it do?

Pick a **mode** and get clean data:

- 🏆 **Rankings** — the Top Free / Top Paid / Top Grossing charts for any category and country (up to ~660 apps per chart, with rank position).
- 💬 **Reviews** — every public review for an app, fully paginated (sort by newest / rating / helpfulness), with rating, text, date, thumbs-up, developer reply and app version.
- 📋 **App details** — complete app info: rating, ratings & reviews count, **ratings histogram**, installs, price, IAP, developer, category, content rating, version, screenshots and more.
- 🔎 **Search** — apps for a keyword (great for ASO / keyword-rank tracking).

Export to **JSON, CSV, Excel, XML or HTML**, or pull from the **Apify API**. Everything is localized by **country (`gl`)** and **language (`hl`)**.

***

### Use cases

**📈 ASO & app market intelligence**

- Track **top-chart rankings daily** by category and country (a low-cost Sensor Tower / data.ai alternative).
- Monitor where apps rank for keywords; benchmark competitors.

**💬 Review analysis & product teams**

- Pull all reviews for your app (and competitors') for sentiment, bugs and feature requests.
- Track rating trends and developer responses.

**🏢 Competitive & investment research**

- See who's climbing the charts in any market.
- Compare installs, ratings and monetization across apps.

**🤖 Data & AI teams**

- Build app datasets, review-sentiment models and ranking dashboards.

***

### How to use it (step by step)

No coding required.

1. Click **Try for free / Start**.
2. Choose a **mode**:
   - **Rankings** → pick a **chart** (Top Free/Paid/Grossing), **category** and **country**.
   - **Reviews / App details** → add **App IDs** (e.g. `com.whatsapp`) or Play URLs.
   - **Search** → add **search terms**.
3. Set **country** and **language**, and **Max items**.
4. Click **Save & Start**, then export the results.

***

### Input parameters

| Field | Type | Description |
|------|------|-------------|
| `mode` | string | `rankings`, `reviews`, `appDetails`, or `search`. |
| `collection` | string | Rankings chart: `TOP_FREE`, `TOP_PAID`, `GROSSING`. |
| `category` | string | Rankings category, e.g. `APPLICATION`, `GAME`, `SOCIAL`, `FINANCE`, `GAME_ACTION`. |
| `appIds` | array | App package names or URLs (reviews & appDetails modes). |
| `searchTerms` | array | Keywords (search mode). |
| `maxReviewsPerApp` | integer | Reviews per app, fully paginated. Default `200`. |
| `reviewsSort` | string | `NEWEST`, `RATING`, or `HELPFULNESS`. |
| `country` | string | Country code (`gl`), e.g. `us`, `gb`, `de`, `tr`. |
| `language` | string | Language code (`hl`), e.g. `en`, `de`, `tr`. |
| `fullDetail` | boolean | Fetch full app details for each ranked/found app. |
| `maxItems` | integer | Max records. `0` = no limit. Default `1000`. |
| `proxyConfiguration` | object | Proxy settings. Default: Apify Proxy on. |
| `maxConcurrency` | integer | Parallel apps processed. Default `4`. |

***

### Input examples

**1) Top free apps in the US**

```json
{
  "mode": "rankings",
  "collection": "TOP_FREE",
  "category": "APPLICATION",
  "country": "us",
  "maxItems": 200
}
```

**2) Top grossing games in Germany**

```json
{
  "mode": "rankings",
  "collection": "GROSSING",
  "category": "GAME",
  "country": "de"
}
```

**3) All reviews for an app (newest first)**

```json
{
  "mode": "reviews",
  "appIds": ["com.whatsapp", "com.spotify.music"],
  "maxReviewsPerApp": 1000,
  "reviewsSort": "NEWEST",
  "country": "us"
}
```

**4) App details**

```json
{
  "mode": "appDetails",
  "appIds": ["com.instagram.android"]
}
```

**5) Keyword search (ASO)**

```json
{
  "mode": "search",
  "searchTerms": ["photo editor", "budget tracker"],
  "country": "us"
}
```

***

### Output — data fields

**Ranked app** (`recordType: "rankedApp"`): `rank`, `collection`, `rankCategory`, `country`, plus all app fields below.

**App** (`recordType: "app"` / ranked / search): `appId`, `title`, `url`, `summary`, `developer`, `developerId`, `developerEmail`, `developerWebsite`, `score`, `scoreText`, `ratings`, `reviews`, `histogram`, `installs`, `minInstalls`, `maxInstalls`, `price`, `free`, `currency`, `priceText`, `offersIAP`, `IAPRange`, `adSupported`, `genre`, `genreId`, `categories`, `contentRating`, `androidVersion`, `version`, `updated`, `recentChanges`, `icon`, `headerImage`, `screenshots`, `video`, `privacyPolicy`, `editorsChoice`.

**Review** (`recordType: "review"`): `appId`, `reviewId`, `userName`, `userImage`, `score`, `title`, `text`, `date`, `thumbsUp`, `version`, `replyText`, `replyDate`, `criterias` (per-feature ratings), `url`.

***

### Sample output records

**Ranked app:**

```json
{
  "recordType": "rankedApp",
  "rank": 1,
  "collection": "TOP_FREE",
  "rankCategory": "APPLICATION",
  "country": "us",
  "appId": "com.whatsapp",
  "title": "WhatsApp Messenger",
  "developer": "WhatsApp LLC",
  "score": 4.2,
  "ratings": 184000000,
  "installs": "5,000,000,000+",
  "free": true,
  "url": "https://play.google.com/store/apps/details?id=com.whatsapp"
}
```

**Review:**

```json
{
  "recordType": "review",
  "appId": "com.whatsapp",
  "reviewId": "gp:AOq...",
  "userName": "Jane D.",
  "score": 5,
  "text": "Works great, love the new updates!",
  "date": "2026-06-01T10:22:00.000Z",
  "thumbsUp": 14,
  "version": "2.26.5",
  "replyText": null
}
```

***

### Categories & countries

- **Charts:** `TOP_FREE`, `TOP_PAID`, `GROSSING`.
- **Categories:** `APPLICATION` (all apps), `GAME` (all games), and specific ones such as `SOCIAL`, `COMMUNICATION`, `FINANCE`, `PRODUCTIVITY`, `PHOTOGRAPHY`, `SHOPPING`, `HEALTH_AND_FITNESS`, `TOOLS`, `ENTERTAINMENT`, `MUSIC_AND_AUDIO`, plus game subcategories like `GAME_ACTION`, `GAME_PUZZLE`, `GAME_STRATEGY`.
- **Countries / languages:** any market via `country` (gl) + `language` (hl). Iterate countries to build a global ranking picture.

***

### Tips & best practices

- 🏆 **Rankings are recurring** — schedule a daily run per category/country to track movement over time.
- 🌍 **Iterate countries** to compare charts across markets.
- 💬 **Set `maxReviewsPerApp` high** for full review history (Google serves up to ~4,500 per app); reviews are fully paginated.
- ⚡ **Keep concurrency moderate** and proxy on for large review jobs to avoid rate-limiting.
- 💾 **Use the Apify API / integrations** to push results into Google Sheets, a database, or a webhook.

***

### Frequently asked questions

**Can I get the top-chart rankings for a specific category and country?**
Yes — that's the rankings mode: pick chart + category + country.

**Is there a review limit?**
Reviews are fully paginated up to Google's per-app ceiling (~4,500). Set `maxReviewsPerApp` to control how many.

**Are prices and rankings localized?**
Yes — everything respects `country` (gl) and `language` (hl).

**Can I scrape app details and the ratings histogram?**
Yes — appDetails mode returns full info including the 1–5 star histogram.

**What export formats are supported?**
JSON, CSV, Excel, XML, HTML table, RSS — plus the Apify API and integrations.

***

### Changelog

**Last updated:** 2026-07-02

- 2026-07-02 — Actor verified and maintained. Data pipeline tested for quality, structure and freshness; selectors/endpoints confirmed against the live site.

**0.1.0**

- Initial release: rankings (Top Free/Paid/Grossing by category & country), uncapped paginated reviews, full app details, and keyword search.
- Localized by country & language; proxy rotation; one mode-switched actor.

# Actor input Schema

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

Pick your data. Top-chart rankings, app reviews, full app details, or a keyword search — no setup needed, just choose and run.

## `collection` (type: `string`):

Which top chart to pull when scraping rankings. Free, paid, or top-grossing apps.

## `category` (type: `string`):

Category for the ranking chart. Choose All apps or All games for the overall charts, or drill into a specific niche.

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

Keywords to find apps (used in Keyword search mode). Add one or more terms, e.g. photo editor, budget, meditation.

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

For App reviews and App details modes. Paste app package names (e.g. com.whatsapp) or full Play Store links — one per line.

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

How many reviews to pull per app in App reviews mode. Fully paginated — Google serves up to ~4500 per app.

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

How to order reviews in App reviews mode.

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

Rankings, prices and reviews are localized per country. Pick your target market.

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

Language for titles, descriptions and reviews.

## `fullDetail` (type: `boolean`):

Enrich each ranked or found app with complete info — installs, ratings count, reviews count, histogram, version and more. ON by default (a rank list without install/rating counts is far less useful). Turn OFF for a faster, lighter rank-only list.

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

Cap the number of records (apps or reviews) returned. Use 0 for no limit.

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

Default Apify Proxy is fine. For very large review pulls, RESIDENTIAL reduces rate-limiting.

## `maxConcurrency` (type: `integer`):

Maximum parallel apps processed. Higher is faster but heavier.

## Actor input object example

```json
{
  "mode": "rankings",
  "collection": "TOP_FREE",
  "category": "APPLICATION",
  "searchTerms": [
    "photo editor"
  ],
  "appIds": [
    "com.whatsapp"
  ],
  "maxReviewsPerApp": 200,
  "reviewsSort": "NEWEST",
  "country": "us",
  "language": "en",
  "fullDetail": true,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 12
}
```

# Actor output Schema

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

All records collected during the run.

## `runUrl` (type: `string`):

Open this run in the Apify Console.

# 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 = {
    "searchTerms": [
        "photo editor"
    ],
    "appIds": [
        "com.whatsapp"
    ],
    "maxReviewsPerApp": 200,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/google-play-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 = {
    "searchTerms": ["photo editor"],
    "appIds": ["com.whatsapp"],
    "maxReviewsPerApp": 200,
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/google-play-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 '{
  "searchTerms": [
    "photo editor"
  ],
  "appIds": [
    "com.whatsapp"
  ],
  "maxReviewsPerApp": 200,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/google-play-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/xHxfvjmSstGlmYUQT/builds/gubbgvU1i4Rlh7QXD/openapi.json
