# Google Play Scraper (`jdtpnjtp/google-play-scraper`) Actor

Scrape Google Play in one actor - app search, country-localized top charts, similar apps, developer portfolios, full app detail and reviews. Pick what you need with data types. Pay only per result.

- **URL**: https://apify.com/jdtpnjtp/google-play-scraper.md
- **Developed by:** [Data Forge](https://apify.com/jdtpnjtp) (community)
- **Categories:** SEO tools, Developer tools, Integrations
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.28 / 1,000 app 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/actors/running/actors-in-store.md#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

Extract structured **Google Play** data at scale: app search, country top charts, similar apps, developer portfolios, 60+ field app detail and reviews, from one Actor. **Reviews from $0.10 per 1,000 results, app rows from $0.25 per 1,000.** Pull 50,000+ rows in a single run and pay only for the results you keep.

No setup, no browser, no infrastructure to manage. Pick what you need under **What to scrape**, press **Start**, and get clean flat tables out: **Apps** and **Reviews**.

> Prefer a single-purpose tool? We also ship the focused **Google Play Apps Scraper** and **Google Play Reviews Scraper**.

### Why this Actor?

One Actor covers 6 Google Play surfaces that most tools split across 6 separate scrapers. Pick the data types you need, run them together, and pay only for the rows you keep.

| Capability | Google Play Scraper (this Actor) | Typical single-surface tools |
|---|---|---|
| Surfaces in one Actor | **6 in one run: search, app detail, reviews, top charts, similar, developer** | 1 surface per Actor |
| App 360 in a single run | **App detail and its reviews for the same app in one pass** | Separate runs, stitched by hand |
| Localized charts and reviews | **20 store countries, charts and reviews localized per country** | Often US-only charts |
| Detail enrichment | **Optional 60+ field enrich toggle per listing row** | Fixed output, no enrich |
| Pricing | **Pay per result, reviews from $0.10 / 1,000** | Monthly seat or per-page |

### What does the Google Play Scraper do?

It turns any keyword, app ID, developer or category into structured Play Store data. Tick one or more data types and the Actor pulls exactly that, nothing more:

| Data type | What it returns |
|---|---|
| 🔎 **Search apps** | Apps matching your keywords, ranked the way Google ranks them. |
| 📱 **App detail** | A 60+ field detail record for specific apps - by app name, ID or Play Store URL. |
| ⭐ **App reviews** | Reviews per app, sorted and star-filtered, cursor-paginated to thousands. |
| 🏆 **Top charts** | Country-localized top free / paid / grossing charts by category and device. |
| 🧩 **Similar apps** | The apps Google ranks as similar to a given app. |
| 👤 **Developer apps** | A developer's published app portfolio. |

The dataset opens on three ready-made views: **Overview**, **Apps** and **Reviews**, so the right columns are in front of you without any filtering.

### What data can you get from Google Play?

**Per app:** app ID, title, developer, developer ID, category, rating score, ratings count, reviews count, install count, price, free flag, in-app purchases, content rating, version, release date, last-updated date, short description, screenshots, icon and store URL.

**Per review:** review ID, user name, star score, review text, date, thumbs-up count, app version reviewed and the developer reply (with its date).

Each row also carries the raw source object under `data`, so fields the Play Store exposes stay available even when they are not promoted to a flat column.

### Input modes

Three ready-to-run recipes, each matching a published example task. Paste one into the input and press **Start**.

#### 1. App 360 - detail plus reviews in one run

For a product or competitor analyst profiling one app in depth: the 60+ field detail record and up to 100 recent reviews in a single pass.

```json
{
  "appIds": ["com.spotify.music"],
  "dataTypes": ["app", "reviews"],
  "maxReviewsPerApp": 100
}
```

#### 2. Niche scan with details

For an ASO or market researcher mapping a category: search a keyword and enrich each hit with its 60+ field app-detail record.

```json
{
  "searchQueries": ["meditation"],
  "dataTypes": ["search"],
  "includeAppDetails": true,
  "maxResults": 30
}
```

#### 3. Top-chart deep-dive

For a market-intelligence team tracking what is winning: pull the top-free chart and enrich each ranked app with its detail record.

```json
{
  "dataTypes": ["topcharts"],
  "chartCollection": "topselling_free",
  "includeAppDetails": true,
  "maxResults": 30
}
```

### How to scrape Google Play

1. Under **What to scrape**, tick the data types you want. **Search apps** is prefilled, so the Actor runs on the first click with zero typing.
2. Fill the matching input: keywords for Search, apps for App detail / Reviews / Similar, a developer for Developer apps. Apps accept a package name (`com.spotify.music`), a Play Store URL, or just the app name (`Spotify`).
3. Set the country and any top-charts or reviews options in the collapsible sections below.
4. Press **Start**. Export to JSON, CSV, Excel or Google Sheets, or pull the results from the Apify API.

#### Input example

```json
{
  "dataTypes": ["topcharts"],
  "country": "jp",
  "chartCollection": "topgrossing",
  "chartCategory": "GAME",
  "maxResults": 50
}
```

#### Output example

Search / chart listing row:

```json
{
  "row_type": "chart",
  "app_id": "com.king.candycrushsaga",
  "title": "Candy Crush Saga",
  "developer": "King",
  "score": 4.5,
  "price": 0,
  "free": true,
  "installs": "1,000,000,000+",
  "icon": "https://play-lh.googleusercontent.com/1-hPxafOxdYpYZEsQD9pBBgjBcbklW8i9L4o2mfW58wxbuwSXqUOs_ml3pQ"
}
```

App detail row:

```json
{
  "row_type": "app_detail",
  "app_id": "com.spotify.music",
  "title": "Spotify: Music and Podcasts",
  "developer": "Spotify AB",
  "developer_id": "Spotify AB",
  "category": "Music & Audio",
  "score": 4.3,
  "ratings": 31200000,
  "reviews": 1840000,
  "installs": "1,000,000,000+",
  "price": 0,
  "free": true,
  "content_rating": "Teen",
  "version": "8.9.74.575",
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music"
}
```

Review row:

```json
{
  "row_type": "review",
  "app_id": "com.spotify.music",
  "review_id": "gp:AOqpTOHZ2xk9mQ7dR",
  "user_name": "Alex M.",
  "score": 5,
  "content": "Best music app, the offline mode is great.",
  "at": "2026-05-30T11:04:00.000Z",
  "thumbs_up_count": 42,
  "app_version": "8.9.74.575",
  "reply_content": null
}
```

#### Output row types

Each row carries a `row_type`, so you can split the dataset by surface in one glance:

| `row_type` | Produced by | What it is |
|---|---|---|
| `search_result` | Search apps | A keyword match, ranked as Google ranks it. |
| `chart` | Top charts | A ranked entry from a country top-free / paid / grossing list. |
| `similar` | Similar apps | An app Google relates to your seed app. |
| `developer_app` | Developer apps | One title from a developer's portfolio. |
| `app_detail` | App detail (or the enrich toggle) | A 60+ field detail record. |
| `review` | App reviews | One review with score, text, date and developer reply. |

Not-found inputs come back as free diagnostic rows with an `error_code`, so a bad input never breaks the run. Each row also carries a `data` field holding the complete source object, so fields not promoted to a flat column stay available.

### How much does it cost to scrape Google Play?

You pay per result, billed by Apify, with no subscription. With the **$5 free monthly credit** you can pull, for example:

- **~50,000 reviews** (reviews from $0.10 / 1,000 results), or
- **~20,000 app, chart, search or developer rows** (app rows from $0.25 / 1,000), or
- **~1,280 app-detail rows** (the heavy 60+ field call at $3.90 / 1,000).

Mix and match across a single run; the run summary shows the exact charge. Failed items (an app that does not exist, a region without that chart) are returned for visibility and are **never charged**, so you pay only for real rows.

### What can you use Google Play data for?

- **App Store Optimization (ASO)** - track keyword rankings and category positions per country.
- **Market intelligence** - watch top free / paid / grossing charts to spot rising apps and categories.
- **Competitor monitoring** - follow a rival's rating, install count, version cadence and review sentiment over time.
- **Similar-app discovery** - map a competitive set from a single seed app.
- **Lead generation** - build lists of developers and their published portfolios.
- **Review mining and sentiment** - feed thousands of reviews into NLP for product and CX insight.
- **Pricing and monetization research** - compare price and in-app purchase signals across markets.
- **Release tracking** - monitor version numbers and update cadence to time your own launches.

### Is it legal to scrape Google Play?

Scraping publicly available Google Play data is legal in most jurisdictions when you collect only public information and respect personal-data laws such as GDPR and CCPA. This Actor returns only data that any visitor can see on the Play Store. You are responsible for how you use the output, so consult a lawyer for your specific case.

### Related actors

Part of the Data Forge Google Play fleet. Reach for a focused Actor when you need just one surface:

- **[Google Play Apps Scraper](https://apify.com/jdtpnjtp/google-play-apps-scraper)** - focused app search, top charts, similar apps and 60+ field detail.
- **[Google Play Reviews Scraper](https://apify.com/jdtpnjtp/google-play-reviews-scraper)** - focused, high-volume review extraction from $0.10 / 1,000.

### FAQ

**Can I run just one data type?** Yes. Tick only the data types you need under **What to scrape**; the rest stays idle and uncharged.

**Should I use this umbrella Actor or the focused ones?** Use this one when you want more than one surface in a single run - for example app detail plus reviews, or a chart enriched with details. If you only need app listings or only reviews, the focused **Google Play Apps Scraper** and **Google Play Reviews Scraper** keep the input form smaller. Per-result pricing is the same.

**How fresh is the data?** Rows are fetched live from the Play Store on each run, so a run reflects what the store shows at that moment. Schedule the Actor to keep a dataset current.

**Can I schedule it?** Yes. Use Apify Schedules to run the Actor hourly, daily or weekly, then append results to the same dataset or push them to your webhook, database or Google Sheet.

**Are top charts really per country?** Yes. Set the country and the charts, rankings and prices are localized to it, across 20 store countries.

**How many reviews can I get per app?** Set **Max reviews per app** to 100, 10,000 or higher, in your chosen sort order, optionally filtered to a single star rating. The Actor pulls reviews until it reaches your number or the app runs out.

**Can I pull a developer's app portfolio?** Yes. Pick **Developer apps** and pass the developer name or ID; the store returns up to 200 apps per developer.

**Is it legal to scrape Google Play?** Scraping publicly available Play Store data is legal in most jurisdictions when you collect only public information and respect personal-data laws such as GDPR and CCPA. This Actor returns only data a visitor can see. You remain responsible for how you use it.

**Can I call it from code?** Yes. Run it via the Apify API, the Apify client SDKs, or an MCP server, and read results straight from the dataset.

**What happens to apps that are not found?** They come back as free diagnostic rows with an `error_code`, so a bad input never breaks the run.

***

### Support

Built and maintained by **Data Forge**. Need custom fields, higher volume or a quick answer?

[![Telegram](https://img.shields.io/badge/Telegram-Chat-26A5E4?style=for-the-badge\&logo=telegram\&logoColor=white)](https://t.me/j4dtpnj2tp)
[![WhatsApp](https://img.shields.io/badge/WhatsApp-Message-25D366?style=for-the-badge\&logo=whatsapp\&logoColor=white)](https://wa.me/380686031542)
[![Email](https://img.shields.io/badge/Email-Contact-EA4335?style=for-the-badge\&logo=gmail\&logoColor=white)](mailto:jdtpnjtp@gmail.com)

# Actor input Schema

## `dataTypes` (type: `array`):

Choose one or more data types. Each needs its matching input below: Search needs keywords, App detail / Reviews need app IDs, Similar needs app IDs, Developer needs developer IDs. Top charts needs only a country.

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

Keywords to search the Play Store for (used by 🔎 Search). Example: `puzzle games`, `vpn`.

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

Apps to pull detail / reviews / similar for (used by 📱 App detail, ⭐ Reviews, 🧩 Similar). Accepts a package name (`com.spotify.music`), a Play Store URL, or just the app name (`Spotify`) - the top search match is used.

## `developerIds` (type: `array`):

Developers to pull the published app portfolio for (used by 👤 Developer apps). Example: `Google LLC`.

## `similarToAppIds` (type: `array`):

Apps to find similar apps for (used by 🧩 Similar apps). Accepts a package name, Play URL, or just the app name.

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

Upper bound of rows per search / chart / developer / similar input. Each row is one paid result. Store-side caps: search returns up to 250, developer portfolios up to 200.

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

When on, each search / chart / similar / developer row is enriched with a 60+ field app-detail call. Adds one app-detail result charge per enriched row.

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

Store country. Top charts, rankings and prices are localized to it.

## `lang` (type: `string`):

Language for titles, descriptions and reviews.

## `chartCollection` (type: `string`):

Which top-chart list to pull (used by 🏆 Top charts).

## `chartCategory` (type: `string`):

Category to rank within (used by 🏆 Top charts).

## `chartDevice` (type: `string`):

Optional form-factor for the chart. Leave on Phone for the standard charts.

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

Order reviews are pulled in (used by ⭐ Reviews).

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

How deep to go per app - from a quick 100 up to a 100,000-review deep dive (used by ⭐ Reviews). The Actor pulls reviews until it reaches this number or the app runs out.

## `filterScore` (type: `string`):

Optionally keep only reviews with this rating (used by ⭐ Reviews).

## Actor input object example

```json
{
  "dataTypes": [
    "search"
  ],
  "searchQueries": [
    "puzzle games"
  ],
  "maxResults": 30,
  "includeAppDetails": false,
  "country": "us",
  "lang": "en",
  "chartCollection": "topselling_free",
  "chartCategory": "APPLICATION",
  "chartDevice": "",
  "reviewsSort": "newest",
  "maxReviewsPerApp": 100,
  "filterScore": ""
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset; row\_type discriminates search\_result / chart / similar / developer\_app / app\_detail / review. Full payload under data. Views: Overview / Apps / Reviews.

## `summary` (type: `string`):

OUTPUT key: data\_types, app\_results, app\_details, reviews, errors, total\_rows, estimated\_cost\_usd, limit\_reached, actor\_version.

# 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 = {
    "dataTypes": [
        "search"
    ],
    "searchQueries": [
        "puzzle games"
    ],
    "maxResults": 30,
    "country": "us",
    "maxReviewsPerApp": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("jdtpnjtp/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 = {
    "dataTypes": ["search"],
    "searchQueries": ["puzzle games"],
    "maxResults": 30,
    "country": "us",
    "maxReviewsPerApp": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("jdtpnjtp/google-play-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 '{
  "dataTypes": [
    "search"
  ],
  "searchQueries": [
    "puzzle games"
  ],
  "maxResults": 30,
  "country": "us",
  "maxReviewsPerApp": 100
}' |
apify call jdtpnjtp/google-play-scraper --silent --output-dataset

```

## MCP server setup

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