# Google Play Store App Scraper (`mangudai/google-play-app-scraper`) Actor

Scrape Google Play Store app data without an API key. Search by keyword, look up apps by package name or URL, or list a developer's full catalog. Get 40 fields per app: ratings, installs, price, developer contact, screenshots, content rating, and more.

- **URL**: https://apify.com/mangudai/google-play-app-scraper.md
- **Developed by:** [Mangudäi](https://apify.com/mangudai) (community)
- **Categories:** Developer tools, E-commerce, Open source
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.48 / 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/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 App Scraper

Pull structured app data from the Google Play Store without an API key, a login, or a captcha. Search by keyword, look up apps by package name or URL, or list everything a developer has published. Every app comes back as one clean row with about 40 fields: ratings, installs, price, developer contact, screenshots, and more.

Built on the same public Play Store pages a browser loads, routed through Apify Proxy so it runs at scale.

### What it does

Three modes run in a single job. Fill any combination of the three inputs and the actor works through each one:

- Search. Give it keywords like `fitness tracker` or `photo editor` and it returns the apps Google shows for that query, up to Google's own cap of about 30 per search.
- App lookup. Paste package names (`com.spotify.music`) or full Play Store URLs. Each one returns a full-detail record.
- Developer catalog. Give it a developer name (`Supercell`) or numeric developer ID and it returns every app they publish.

### Fields you get

Each row includes the app title, summary, and full description, developer name, ID, email, website, and address, star score and total ratings, review count, and the 1 to 5 star histogram, install tier and exact install count where Google exposes it, price, currency, free flag, and in-app purchase range, primary genre and genre ID, content rating, ad-supported and IAP flags, release date, last update date, and version, the app icon, header image, screenshots, and promo video, the privacy policy URL, and a scrape timestamp.

Free and paid apps both parse correctly. Minecraft returns `price: 6.99` and `priceText: "$6.99"`; Spotify returns `price: 0` and `free: true`.

### Example input

```json
{
  "searchQueries": ["habit tracker"],
  "appIdsOrUrls": ["com.spotify.music"],
  "developerIds": ["Supercell"],
  "maxResultsPerQuery": 30,
  "fullDetail": true,
  "countryCode": "us",
  "language": "en"
}
````

Run it with no input and it searches `fitness tracker` so you get a non-empty dataset on the first try.

### Example output

```json
{
  "appId": "com.spotify.music",
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music&gl=us&hl=en",
  "title": "Spotify: Music and Podcasts",
  "developer": "Spotify AB",
  "developerEmail": "support@spotify.com",
  "score": 4.3384,
  "ratings": 35944079,
  "reviews": 1844196,
  "installs": "1,000,000,000+",
  "minInstalls": 1000000000,
  "price": 0,
  "currency": "USD",
  "free": true,
  "genre": "Music & Audio",
  "genreId": "MUSIC_AND_AUDIO",
  "contentRating": "Teen",
  "released": "May 27, 2014",
  "updated": "2026-07-06",
  "icon": "https://play-lh.googleusercontent.com/...",
  "screenshots": ["https://play-lh.googleusercontent.com/..."],
  "sourceMode": "detail"
}
```

### Input reference

| Field | Type | Default | What it does |
| --- | --- | --- | --- |
| `searchQueries` | array | `["fitness tracker"]` | Keywords to search. Each query returns up to about 30 apps. |
| `appIdsOrUrls` | array | `[]` | Package names or Play Store URLs. One full record each. |
| `developerIds` | array | `[]` | Developer names or numeric IDs. Returns their full catalog. |
| `maxResultsPerQuery` | integer | `30` | Cap on apps per search query or developer. |
| `fullDetail` | boolean | `true` | Fetch all 40 fields for search and developer results. Off returns only appId and url. |
| `includeScreenshots` | boolean | `true` | Include screenshot and promo-video URLs. |
| `language` | string | `en` | Play Store interface language. |
| `countryCode` | string | `us` | Country used for pricing and availability. |
| `proxyConfiguration` | object | Apify Proxy | Proxy routing. On by default. |

### Good to know

Google caps keyword search at about 30 apps per query. To go wider, use several related queries, or switch to developer mode for a full catalog. Pricing and availability change by country, so set `countryCode` and `language` to the market you care about. Some apps ship only in certain regions and will look absent from other countries.

### Common uses

App store optimization and competitor tracking: benchmark ratings, installs, and update cadence against rival apps. Market research: map the apps a keyword surfaces, or a whole publisher's lineup. Lead generation: pull developer email and website from public listings. Data science: build category datasets of descriptions, scores, and install tiers.

### Notes on use

App metadata and developer contact details are public on Google Play. You are responsible for using the data in line with applicable law, Google's terms, and any privacy rules that apply where you operate. Do not use it for spam or unsolicited bulk outreach.

# Actor input Schema

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

Keywords to search on Google Play, for example fitness tracker or photo editor. Google caps search at about 30 apps per query.

## `appIdsOrUrls` (type: `array`):

Package names like com.spotify.music or full Play Store URLs. Each entry returns one full-detail record.

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

Developer display names like Supercell or numeric developer IDs. Returns every app the developer publishes.

## `maxResultsPerQuery` (type: `integer`):

Cap on apps per search query or developer. Google limits search to about 30.

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

Fetch the full 40-field record for every app found by search or developer modes. Turn off for a light run that returns only appId and url.

## `includeScreenshots` (type: `boolean`):

Include screenshot URLs and the promo video. Turn off for slimmer output.

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

Play Store interface language, for example en, de, fr, es, ja.

## `countryCode` (type: `string`):

Two-letter country the Play Store uses for pricing and availability, for example us, gb, de, in.

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

Route requests through Apify Proxy. Recommended and on by default.

## Actor input object example

```json
{
  "searchQueries": [
    "fitness tracker"
  ],
  "appIdsOrUrls": [],
  "developerIds": [],
  "maxResultsPerQuery": 30,
  "fullDetail": true,
  "includeScreenshots": true,
  "language": "en",
  "countryCode": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "fitness tracker"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mangudai/google-play-app-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 = { "searchQueries": ["fitness tracker"] }

# Run the Actor and wait for it to finish
run = client.actor("mangudai/google-play-app-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 '{
  "searchQueries": [
    "fitness tracker"
  ]
}' |
apify call mangudai/google-play-app-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Store App Scraper",
        "description": "Scrape Google Play Store app data without an API key. Search by keyword, look up apps by package name or URL, or list a developer's full catalog. Get 40 fields per app: ratings, installs, price, developer contact, screenshots, content rating, and more.",
        "version": "0.0",
        "x-build-id": "V7lSmmbsBokE8TqoW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mangudai~google-play-app-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mangudai-google-play-app-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/mangudai~google-play-app-scraper/runs": {
            "post": {
                "operationId": "runs-sync-mangudai-google-play-app-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/mangudai~google-play-app-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-mangudai-google-play-app-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": {
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keywords to search on Google Play, for example fitness tracker or photo editor. Google caps search at about 30 apps per query.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "appIdsOrUrls": {
                        "title": "App IDs or URLs",
                        "type": "array",
                        "description": "Package names like com.spotify.music or full Play Store URLs. Each entry returns one full-detail record.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "developerIds": {
                        "title": "Developer names or IDs",
                        "type": "array",
                        "description": "Developer display names like Supercell or numeric developer IDs. Returns every app the developer publishes.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResultsPerQuery": {
                        "title": "Max results per query",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Cap on apps per search query or developer. Google limits search to about 30.",
                        "default": 30
                    },
                    "fullDetail": {
                        "title": "Fetch full detail",
                        "type": "boolean",
                        "description": "Fetch the full 40-field record for every app found by search or developer modes. Turn off for a light run that returns only appId and url.",
                        "default": true
                    },
                    "includeScreenshots": {
                        "title": "Include screenshots",
                        "type": "boolean",
                        "description": "Include screenshot URLs and the promo video. Turn off for slimmer output.",
                        "default": true
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Play Store interface language, for example en, de, fr, es, ja.",
                        "default": "en"
                    },
                    "countryCode": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter country the Play Store uses for pricing and availability, for example us, gb, de, in.",
                        "default": "us"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Route requests through Apify Proxy. Recommended and on by default.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
