# Google Play Store Scraper (`linen_snack/google-play-store-scraper`) Actor

Scrapes app details, reviews, search results, category lists, developer apps, permissions, and data safety from Google Play Store.

- **URL**: https://apify.com/linen\_snack/google-play-store-scraper.md
- **Developed by:** [ius iyb](https://apify.com/linen_snack) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 33.3% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.15 / 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.

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

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

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

Scrapes app details, reviews, search results, category lists, developer apps, similar apps, permissions, and data safety info from Google Play Store — all without a browser.

**Built on [`google-play-scraper`](https://github.com/facundoolano/google-play-scraper)** — no Playwright/Puppeteer, so it's fast and cheap to run.

---

### Features

- **8 action types** in one actor
- **47+ fields** per app in full detail mode
- **Full review pagination** — up to 5,000 reviews per app
- **Batch app IDs** — process multiple apps in parallel
- **Auto-enrich** — fetch full details for search/list/developer results with one flag
- **Localization** — any country + language combination
- **Proxy support** — works with Apify residential proxies
- **Rate throttling** — configurable requests/second

---

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `action` | enum | `appDetails` | What to scrape (see actions below) |
| `appIds` | string[] | — | Package IDs, e.g. `com.spotify.music` |
| `searchQuery` | string | — | Keyword for `search` action |
| `developerId` | string | — | Developer name/ID for `developer` action |
| `country` | string | `us` | ISO 3166-1 alpha-2 country code |
| `language` | string | `en` | ISO 639-1 language code |
| `maxResults` | integer | `50` | Max items for search/list/developer (1–250) |
| `maxReviews` | integer | `100` | Max reviews per app (1–5000) |
| `reviewSort` | enum | `newest` | `newest`, `rating`, or `helpfulness` |
| `filterByRating` | integer | — | Filter reviews by star rating (1–5) |
| `collection` | enum | `TOP_FREE` | `TOP_FREE`, `TOP_PAID`, `GROSSING`, `NEW_FREE`, `NEW_PAID` |
| `category` | string | — | Category slug for `list` action (e.g. `MUSIC`, `GAME_ACTION`) |
| `throttle` | integer | `10` | Max requests/second (1–20) |
| `fetchFullDetails` | boolean | `false` | Enrich search/list/developer results with full app details |

---

### Actions

#### `appDetails`
Returns 47+ fields for each app in `appIds`.

```json
{ "action": "appDetails", "appIds": ["com.spotify.music", "com.netflix.mediaclient"] }
````

#### `search`

Searches the Play Store by keyword.

```json
{ "action": "search", "searchQuery": "vpn", "maxResults": 20, "fetchFullDetails": true }
```

#### `reviews`

Paginates through reviews for apps in `appIds`.

```json
{ "action": "reviews", "appIds": ["com.spotify.music"], "maxReviews": 500, "reviewSort": "newest" }
```

#### `list`

Browses a Play Store collection (top charts, new releases, etc.).

```json
{ "action": "list", "collection": "TOP_FREE", "category": "MUSIC", "maxResults": 100 }
```

#### `developer`

Returns all apps published by a developer.

```json
{ "action": "developer", "developerId": "Spotify AB" }
```

#### `similar`

Returns apps similar to those in `appIds`.

```json
{ "action": "similar", "appIds": ["com.spotify.music"] }
```

#### `permissions`

Returns all permissions requested by apps in `appIds`.

```json
{ "action": "permissions", "appIds": ["com.spotify.music"] }
```

#### `dataSafety`

Returns the data safety section for apps in `appIds`.

```json
{ "action": "dataSafety", "appIds": ["com.spotify.music"] }
```

***

### Output Fields

**Full app details (47+ fields):** `appId`, `title`, `url`, `icon`, `score`, `scoreText`, `ratings`, `reviews`, `histogram`, `price`, `free`, `currency`, `offersIAP`, `IAPRange`, `size`, `androidVersion`, `androidVersionText`, `developer`, `developerId`, `developerEmail`, `developerWebsite`, `developerAddress`, `privacyPolicy`, `genre`, `genreId`, `categories`, `headerImage`, `screenshots`, `video`, `videoImage`, `contentRating`, `contentRatingDescription`, `adSupported`, `released`, `updated`, `version`, `recentChanges`, `description`, `descriptionHTML`, `summary`, `minInstalls`, `maxInstalls`, `installs`, `available`, `comments`, `editorsChoice`

**Reviews:** `id`, `userName`, `userImage`, `date`, `score`, `scoreText`, `title`, `text`, `replyDate`, `replyText`, `version`, `thumbsUp`, `criterias`

***

### Local Development

```bash
npm install
npx apify run   ## uses INPUT.json
```

Results are saved to `storage/datasets/default/`.

# Actor input Schema

## `action` (type: `string`):

What to scrape: app details, search results, reviews, category list, developer apps, similar apps, permissions, or data safety.

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

List of app package IDs to scrape (e.g. com.spotify.music). Required for: appDetails, reviews, similar, permissions, dataSafety.

## `searchQuery` (type: `string`):

Keyword to search for apps. Required for the 'search' action.

## `developerId` (type: `string`):

Developer name or ID to list their apps. Required for the 'developer' action.

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

ISO 3166-1 alpha-2 country code to localize results.

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

ISO 639-1 language code for result text.

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

Maximum number of results to return for search, list, or developer actions.

## `maxReviews` (type: `integer`):

Maximum total number of reviews to scrape per app.

## `reviewSort` (type: `string`):

How to sort reviews.

## `filterByRating` (type: `integer`):

Only return reviews with this star rating (1–5). Leave empty for all ratings.

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

Play Store collection to browse. Used with the 'list' action.

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

Play Store category slug to filter the list (e.g. GAME\_ACTION, MUSIC). Used with the 'list' action. Leave empty for all categories.

## `throttle` (type: `integer`):

Maximum number of requests per second sent to Google. Lower values reduce the risk of rate limiting.

## `fetchFullDetails` (type: `boolean`):

For search, list, and developer actions: automatically fetch full 47-field app details for each result. Increases run time and compute usage.

## Actor input object example

```json
{
  "action": "appDetails",
  "appIds": [
    "com.spotify.music",
    "com.instagram.android"
  ],
  "searchQuery": "music player",
  "developerId": "Spotify AB",
  "country": "us",
  "language": "en",
  "maxResults": 50,
  "maxReviews": 100,
  "reviewSort": "newest",
  "collection": "TOP_FREE",
  "category": "MUSIC",
  "throttle": 10,
  "fetchFullDetails": false
}
```

# Actor output Schema

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

All scraped Play Store items — app details (47+ fields), reviews, search results, etc.

# 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",
        "com.instagram.android"
    ],
    "searchQuery": "music player",
    "developerId": "Spotify AB",
    "category": "MUSIC"
};

// Run the Actor and wait for it to finish
const run = await client.actor("linen_snack/google-play-store-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",
        "com.instagram.android",
    ],
    "searchQuery": "music player",
    "developerId": "Spotify AB",
    "category": "MUSIC",
}

# Run the Actor and wait for it to finish
run = client.actor("linen_snack/google-play-store-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",
    "com.instagram.android"
  ],
  "searchQuery": "music player",
  "developerId": "Spotify AB",
  "category": "MUSIC"
}' |
apify call linen_snack/google-play-store-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Store Scraper",
        "description": "Scrapes app details, reviews, search results, category lists, developer apps, permissions, and data safety from Google Play Store.",
        "version": "1.0",
        "x-build-id": "5EwTJgeCgN7O8swuZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/linen_snack~google-play-store-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-linen_snack-google-play-store-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/linen_snack~google-play-store-scraper/runs": {
            "post": {
                "operationId": "runs-sync-linen_snack-google-play-store-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/linen_snack~google-play-store-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-linen_snack-google-play-store-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",
                "required": [
                    "action"
                ],
                "properties": {
                    "action": {
                        "title": "Action",
                        "enum": [
                            "appDetails",
                            "search",
                            "reviews",
                            "list",
                            "developer",
                            "similar",
                            "permissions",
                            "dataSafety"
                        ],
                        "type": "string",
                        "description": "What to scrape: app details, search results, reviews, category list, developer apps, similar apps, permissions, or data safety.",
                        "default": "appDetails"
                    },
                    "appIds": {
                        "title": "App IDs",
                        "type": "array",
                        "description": "List of app package IDs to scrape (e.g. com.spotify.music). Required for: appDetails, reviews, similar, permissions, dataSafety.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword to search for apps. Required for the 'search' action."
                    },
                    "developerId": {
                        "title": "Developer ID",
                        "type": "string",
                        "description": "Developer name or ID to list their apps. Required for the 'developer' action."
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "ISO 3166-1 alpha-2 country code to localize results.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "ISO 639-1 language code for result text.",
                        "default": "en"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "Maximum number of results to return for search, list, or developer actions.",
                        "default": 50
                    },
                    "maxReviews": {
                        "title": "Max Reviews",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum total number of reviews to scrape per app.",
                        "default": 100
                    },
                    "reviewSort": {
                        "title": "Review Sort Order",
                        "enum": [
                            "newest",
                            "rating",
                            "helpfulness"
                        ],
                        "type": "string",
                        "description": "How to sort reviews.",
                        "default": "newest"
                    },
                    "filterByRating": {
                        "title": "Filter Reviews by Star Rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only return reviews with this star rating (1–5). Leave empty for all ratings."
                    },
                    "collection": {
                        "title": "Collection",
                        "enum": [
                            "TOP_FREE",
                            "TOP_PAID",
                            "GROSSING",
                            "NEW_FREE",
                            "NEW_PAID"
                        ],
                        "type": "string",
                        "description": "Play Store collection to browse. Used with the 'list' action.",
                        "default": "TOP_FREE"
                    },
                    "category": {
                        "title": "Category",
                        "type": "string",
                        "description": "Play Store category slug to filter the list (e.g. GAME_ACTION, MUSIC). Used with the 'list' action. Leave empty for all categories."
                    },
                    "throttle": {
                        "title": "Request Throttle (req/sec)",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of requests per second sent to Google. Lower values reduce the risk of rate limiting.",
                        "default": 10
                    },
                    "fetchFullDetails": {
                        "title": "Fetch Full App Details",
                        "type": "boolean",
                        "description": "For search, list, and developer actions: automatically fetch full 47-field app details for each result. Increases run time and compute usage.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
