# Google Play Apps Scraper (`solidcode/google-play-apps-scraper`) Actor

\[💰 $0.5/1K] Extract Google Play Store app metadata — title, developer, ratings, installs, price, screenshots, description, version, contact info. Search by keyword, fetch details, find similar apps, browse a developer's catalog, or scrape Top Charts. Pairs with Google Play Store Reviews Scraper.

- **URL**: https://apify.com/solidcode/google-play-apps-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Developer tools, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.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.

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 Apps Scraper

Extract complete app metadata from the Google Play Store at scale. Search by keyword, fetch full app details, find similar apps, list a developer's full catalog, or browse Top Charts by category and country — all from a single actor. Built for app developers, ASO specialists, market researchers, and growth teams who need clean, structured Play Store data without touching an API.

### Why This Scraper?

- **Five scraping modes in one actor** — keyword search, app detail lookup, similar-apps discovery, developer catalog, and Top Charts browsing. Populate any combination of inputs and the actor runs every mode you filled in, in one job.
- **45+ data fields per app** — title, developer, ratings, install counts, pricing, full description, version, release dates, screenshots, promo video, categories, content rating, data-safety (shared / collected / security practices), permissions, Editors' Choice badge, rating histogram, and developer contact info.
- **Global coverage** — 54 countries and 30 languages. Top Charts, pricing, and availability are resolved per region so you see exactly what users in Germany, Japan, or Brazil see.
- **Pairs directly with the [Google Play Store Reviews Scraper](https://apify.com/solidcode/google-play-store-reviews-scraper)** — the `appId` column from this actor feeds straight into the reviews actor's input with no transformation.
- **Flexible per-row enrichment** — toggle full-detail fetching, screenshot URLs, and developer contact info independently so you only pay for the fields you need.
- **Honest about limits** — search mode is capped at ~30 apps per query by Google's own UI; the actor reports this in the run status instead of silently truncating.
- **Non-technical friendly inputs** — dropdown selectors for countries, languages, categories, and charts. Paste package names, full URLs, developer names, or numeric developer IDs — all are accepted.
- **Resilient batch runs** — invalid package names are skipped with a warning so one bad entry never breaks a job with hundreds of apps.

### Use Cases

**App Store Intelligence & ASO**
- Pull live rankings for any category in any country to track your own or competitor positioning
- Benchmark your app's ratings, install counts, and update cadence against direct competitors
- Audit long descriptions, screenshots, and promo videos to refine your own store listing
- Detect editor's-choice badges and content-rating changes across your portfolio

**Competitor Analysis**
- List every app a competing publisher ships, with ratings and installs for each
- Discover all apps that Google Play considers "similar" to a competitor's flagship
- Track pricing, in-app purchase ranges, and ad support across a competitor's whole catalog
- Monitor version numbers and update history to infer release cadence

**Market Research**
- Map the top 30 apps in any of 45+ Google Play categories, across 54 countries
- Quantify category density and identify underserved niches
- Spot emerging Top Grossing apps weeks before they trend in the mainstream press
- Build a dataset of multi-country pricing for a given app, category, or developer

**Lead Generation (Agencies & SaaS)**
- Build prospect lists of publishers whose apps match specific criteria (category, install range, rating)
- Extract developer email, website, and physical address for outreach
- Identify small publishers with highly-rated apps as ASO or monetization consulting leads

**Data Science & ML**
- Train classifiers on category-labelled app descriptions and screenshots
- Build recommendation systems using similar-apps graphs
- Correlate rating histograms with install-count tiers at category scale
- Ship ASO tooling, app-intelligence dashboards, and competitive-tracking SaaS

### Getting Started

#### Simple — Search for a Keyword

The quickest way to try the actor. Enter a keyword and you'll get up to ~30 matching apps (Google's own search cap):

```json
{
    "searchQueries": ["meditation app"],
    "maxResultsPerQuery": 30
}
````

#### Full-Detail Lookup by Package Name

Paste package names or full Play Store URLs — each produces one full-detail record with 40+ fields:

```json
{
    "appIdsOrUrls": [
        "com.supercell.brawlstars",
        "com.spotify.music",
        "https://play.google.com/store/apps/details?id=com.instagram.android"
    ]
}
```

#### Top Charts — Top Free Games in Germany

Browse any Top Chart (Top Free, Top Paid, Top Grossing) for any category in any country:

```json
{
    "includeCollection": true,
    "collectionChart": "topselling_free",
    "collectionCategory": "GAME_ACTION",
    "countryCode": "DE",
    "language": "de",
    "maxResultsPerQuery": 100
}
```

#### All a Developer's Apps

Accepts developer display name (e.g. `Supercell`), numeric developer ID, or a full developer URL:

```json
{
    "developerIds": ["Supercell", "5700313618786177705"],
    "fullDetail": true
}
```

#### Similar Apps to a Seed

For each seed app, collects every app that Google Play shows in the "Similar apps" carousel:

```json
{
    "similarToAppIds": ["com.spotify.music", "com.duolingo"],
    "maxResultsPerQuery": 20
}
```

#### All Modes at Once

Fill in any combination of inputs — the actor runs every mode you populate in a single job. Ideal for a full competitive snapshot in one go:

```json
{
    "searchQueries": ["habit tracker"],
    "appIdsOrUrls": ["com.supercell.brawlstars"],
    "similarToAppIds": ["com.spotify.music"],
    "developerIds": ["Supercell"],
    "includeCollection": true,
    "collectionChart": "topgrossing",
    "collectionCategory": "GAME_STRATEGY",
    "countryCode": "US",
    "language": "en",
    "fullDetail": true,
    "maxResultsPerQuery": 50
}
```

### Input Reference

#### What to Scrape

Fill in any combination of the five inputs below — at least one is required. The actor runs every mode you populate in one job.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | `[]` | Keywords to search on Google Play (e.g. `meditation app`, `photo editor`). Each query produces its own set of apps. |
| `appIdsOrUrls` | string\[] | `[]` | App package names (e.g. `com.supercell.brawlstars`) or full Play Store URLs. Each input produces one full-detail record. Same format as the Google Play Store Reviews Scraper — export this actor's `appId` column and feed it straight in. |
| `similarToAppIds` | string\[] | `[]` | Seed app package names or URLs. For each seed, the actor collects apps Google Play shows in the "Similar apps" carousel. |
| `developerIds` | string\[] | `[]` | Developer display names (e.g. `Supercell`), numeric developer IDs (e.g. `5700313618786177705`), or full developer URLs. Returns every app published by each developer. |

#### Top Charts (Optional)

Browse Google Play Top Charts by category. Results depend on the selected country.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeCollection` | boolean | `false` | Enable to fetch a Top Chart for a given category. |
| `collectionChart` | string | `topselling_free` | Which Top Chart to fetch. Options: `topselling_free` (Top Free), `topselling_paid` (Top Paid), `topgrossing` (Top Grossing). |
| `collectionCategory` | string | `APPLICATION` | Play Store category to browse. `APPLICATION` = all non-game apps; `GAME` = all games; plus 45+ specific categories (`PRODUCTIVITY`, `HEALTH_AND_FITNESS`, `GAME_ACTION`, `GAME_PUZZLE`, etc.). |

#### Results

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResultsPerQuery` | integer | `100` | Maximum apps per search query, similar-apps seed, developer, or Top Chart. Set to `0` for all available results. Ignored for direct app-detail lookups (those always return one record each). |

#### Localization

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `language` | string | `en` | Play Store interface language. Affects localized titles, descriptions, and category names. 30 languages supported (en, de, fr, es, it, ja, zh-CN, ar, hi, pt, ru, and more). |
| `countryCode` | string | `US` | Country Google Play uses to resolve rankings, pricing, and availability. 54 countries supported. |

#### Enrichment

Optional extra data. Each toggle can increase runtime and cost.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `fullDetail` | boolean | `true` | For each app found in search / similar / developer / Top Charts modes, fetch the full 40+ field detail record. Adds one lookup per app — slower but complete. Direct app-ID lookups always fetch full detail regardless. |
| `includeScreenshots` | boolean | `true` | Include screenshot URLs and promo-video URL. Disable for slimmer output. |
| `includeDeveloperContact` | boolean | `true` | Include the developer's email, website, and physical address (where published). Disable for privacy-sensitive use cases. |

### Output

Every row is one app. Fields that don't apply to a source mode are omitted rather than null-padded. Example:

```json
{
    "appId": "com.supercell.brawlstars",
    "appUrl": "https://play.google.com/store/apps/details?id=com.supercell.brawlstars",
    "title": "Brawl Stars",
    "icon": "https://play-lh.googleusercontent.com/...",
    "developer": "Supercell",
    "developerId": "Supercell",
    "developerUrl": "https://play.google.com/store/apps/developer?id=Supercell",
    "summary": "Fast-paced 3v3 multiplayer and battle royale made for mobile!",
    "score": 4.2,
    "scoreText": "4.2",
    "ratings": 32451230,
    "reviews": 1024310,
    "installs": "500M+",
    "minInstalls": 500000000,
    "realInstalls": 578943210,
    "price": 0,
    "free": true,
    "currency": "USD",
    "priceText": "Free",
    "genre": "Action",
    "genreId": "GAME_ACTION",
    "categories": ["Action", "Games"],
    "contentRating": "Everyone 10+",
    "contentRatingDescription": "Fantasy Violence",
    "adSupported": false,
    "containsAds": false,
    "offersIAP": true,
    "inAppProductPrice": "$0.99 - $169.99 per item",
    "description": "Battle with friends or solo across a variety of game modes in under three minutes...",
    "descriptionHTML": "Battle with friends or solo across a variety of game modes in under three minutes...<br><br>...",
    "released": "Dec 12, 2018",
    "updated": "2026-04-15",
    "version": "65.165",
    "size": "199M",
    "androidVersion": "5.0",
    "androidVersionText": "5.0 and up",
    "developerEmail": "help@supercell.com",
    "developerWebsite": "https://supercell.com/en/games/brawlstars/",
    "developerAddress": "PL 123, 00101 Helsinki, Finland",
    "developerPhone": "+358 9 1234 5678",
    "developerLegalName": "Supercell Oy",
    "privacyPolicy": "https://supercell.com/en/privacy-policy/",
    "dataSafety": {
        "shared": ["App activity", "Device or other IDs"],
        "collected": ["Location", "Personal info"],
        "securityPractices": [
            "Data is encrypted in transit",
            "You can request that data be deleted"
        ]
    },
    "permissions": [
        {"group": "Camera", "permissions": ["take pictures and videos"]},
        {"group": "Wi-Fi connection information", "permissions": ["view Wi-Fi connections"]}
    ],
    "headerImage": "https://play-lh.googleusercontent.com/...",
    "screenshots": [
        "https://play-lh.googleusercontent.com/...",
        "https://play-lh.googleusercontent.com/..."
    ],
    "video": "https://play.google.com/video/...",
    "videoImage": "https://play-lh.googleusercontent.com/...",
    "recentChanges": "- New brawler: Juju\n- Balance updates\n- Bug fixes",
    "editorsChoice": false,
    "histogram": {"1": 1823421, "2": 512134, "3": 1321209, "4": 4982103, "5": 23812363},
    "sourceMode": "detail",
    "sourceSeed": "com.supercell.brawlstars",
    "position": 1,
    "scrapedAt": "2026-04-24T16:04:12Z"
}
```

#### All Available Fields

| Field | Type | Description |
|-------|------|-------------|
| `appId` | string | App package name in reverse-DNS form (e.g. `com.supercell.brawlstars`). Matches the Google Play Store Reviews Scraper input exactly. |
| `appUrl` | string | Canonical Play Store URL for the app. |
| `title` | string | App title. |
| `icon` | string | URL of the app icon. |
| `developer` | string | Developer display name. |
| `developerId` | string | Developer identifier (name form or numeric). |
| `developerUrl` | string | Canonical developer page URL. |
| `summary` | string | Short description shown in search cards. |
| `score` | number | Overall star rating, 0.0–5.0. |
| `scoreText` | string | Human-formatted rating (e.g. `"4.2"`). |
| `ratings` | integer | Total ratings count. |
| `reviews` | integer | Total reviews count. |
| `installs` | string | Human-formatted install tier (e.g. `"500M+"`, `"10B+"`). |
| `minInstalls` | integer | Lower bound of the install tier. |
| `realInstalls` | integer | Exact install count when Play Store exposes it. |
| `price` | number | Primary-market price (0.0 when free). |
| `free` | boolean | `true` if the app is free to download. |
| `currency` | string | ISO 4217 currency code. |
| `priceText` | string | Human-formatted price (e.g. `"Free"`, `"$4.99"`). |
| `genre` | string | Primary genre display name. |
| `genreId` | string | Genre / category ID (e.g. `APPLICATION`, `GAME_ACTION`). |
| `categories` | string\[] | All category display names. |
| `contentRating` | string | Content rating label (e.g. `"Everyone"`, `"Teen"`). |
| `contentRatingDescription` | string | Reasoning behind the content rating. |
| `adSupported` | boolean | App shows ads. |
| `containsAds` | boolean | Play Store "Contains ads" label. |
| `offersIAP` | boolean | Offers in-app purchases. |
| `inAppProductPrice` | string | Typical in-app purchase price range. |
| `description` | string | Full long description (plain text). |
| `descriptionHTML` | string | Full description with Play Store's allowed HTML. |
| `released` | string | First release date. |
| `updated` | string | Last update date. |
| `version` | string | Current app version. |
| `size` | string | APK size (e.g. `"82M"`). |
| `androidVersion` | string | Minimum Android version. |
| `androidVersionText` | string | Human-formatted min Android version. |
| `developerEmail` | string | Developer's contact email. |
| `developerWebsite` | string | Developer's website URL. |
| `developerAddress` | string | Developer's physical address. |
| `developerPhone` | string | Developer's contact phone number (where published). |
| `developerLegalName` | string | Developer's legal entity name (where published). |
| `privacyPolicy` | string | URL of the privacy policy. |
| `dataSafety` | object | Data-safety summary with three keys: `shared` (data types shared with third parties), `collected` (data types collected by the app), and `securityPractices` (e.g. encryption-in-transit, deletion rights). Each is an array of strings. |
| `permissions` | object\[] | Dangerous permissions the app requests, grouped by category. Each entry is `{"group": "Camera", "permissions": ["take pictures and videos"]}`. |
| `headerImage` | string | URL of the feature graphic / header image. |
| `screenshots` | string\[] | URLs of app screenshots. |
| `video` | string | URL of the promo video. |
| `videoImage` | string | URL of the promo video poster. |
| `recentChanges` | string | "What's new" release notes. |
| `editorsChoice` | boolean | `true` if Google Play awarded the Editors' Choice badge. |
| `histogram` | object | Star-rating histogram keyed `"1"` through `"5"` with integer counts. |
| `sourceMode` | string | Which mode produced this row: `search`, `detail`, `similar`, `developer`, or `collection`. |
| `sourceSeed` | string | The exact input that produced this row (keyword, seed appId, developer, or category). |
| `position` | integer | 1-indexed rank within the source mode result set. |
| `scrapedAt` | string | ISO 8601 timestamp (UTC) of when the row was collected. |

### Tips for Best Results

- **Enable `fullDetail` for search, similar, developer, and Top Charts modes** to get all 40+ fields per app. Disable it for faster, lighter runs when you only need the compact card fields.
- **Pair country and language** — running `countryCode=DE` with `language=de` returns a very different dataset than `US` + `en`. Top Charts and pricing are especially region-sensitive.
- **Use `developerIds` to compare competitor portfolios** — pass both a name (`Supercell`) and a numeric ID if you know it; the actor accepts both.
- **Batch many inputs in one run** — the actor loops over every entry in every list and skips invalid entries with a warning. One run with 50 apps is cheaper and faster than 50 separate runs.
- **Disable `includeScreenshots` and `includeDeveloperContact`** when you only need pricing and rating signals — it keeps the output slimmer for downstream ingestion.
- **Top Charts + `maxResultsPerQuery=0`** pulls the entire chart for a category (typically 100–200 apps).

### Pairs With — Google Play Store Reviews Scraper

This actor is the "apps" half of a two-actor Play Store pipeline. The companion [Google Play Store Reviews Scraper](https://apify.com/solidcode/google-play-store-reviews-scraper) scrapes user reviews, developer replies, star ratings, and review metadata.

The two actors use the **exact same `appId` format**, so you can chain them directly:

1. Run **Google Play Apps Scraper** to discover apps (search, Top Charts, developer catalog, etc.)
2. Export the `appId` column from the resulting dataset
3. Paste it into the reviews scraper's `appIdsOrUrls` input

No transformation, no glue code — it just works. The `appUrl` column is also accepted by the reviews scraper if you prefer pasting full URLs.

**Typical pipeline:** use this actor to pull the Top 100 Free Finance apps in the US, then feed those 100 `appId`s into the reviews scraper to pull the latest 500 reviews from each — producing 50,000 reviews across the category for sentiment analysis or trend tracking.

### Pricing

**$0.50 per 1,000 results** — pay only for apps delivered, no platform surprises. Priced within the market band for Google Play scrapers so you can scale without sticker shock.

| Results | Cost |
|---------|------|
| 100 | $0.05 |
| 1,000 | $0.50 |
| 10,000 | $5.00 |
| 100,000 | $50.00 |

Platform fees (compute, proxy, storage) are additional and depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation and ranking alerts
- **Google Sheets** — Direct spreadsheet export for App Store dashboards
- **Slack** / **Email** — Notifications when rankings change or a new Editor's Choice appears
- **Webhooks** — Trigger your own backend when a run completes
- **Apify API** — Full programmatic access for pipelines and data warehouses

### Good to Know

- **Search is capped at ~30 apps per query by Google's own UI.** This is a Play Store limit, not an actor limit. Setting `maxResultsPerQuery` above 30 for search mode will still return ~30 rows per query. To go broader, use multiple related queries, switch to Top Charts mode, or combine keyword variations.
- **Category-specific charts** — on individual categories (e.g. `GAME_ACTION`, `PRODUCTIVITY`), Google Play only ships the Top Free chart natively. Requesting Top Paid or Top Grossing for a single category falls back to Top Free and logs a note. The full Top Paid and Top Grossing charts work as expected when `collectionCategory` is `APPLICATION` or `GAME`.
- **Similar apps** returns roughly 5–10 apps per seed — the same set Google Play shows in its "Similar apps" carousel.
- **Play Store category list** changes occasionally as Google reshuffles its taxonomy. The actor ships a snapshot of the current category enum (47 categories + game subcategories) and is updated as Google evolves the list.
- **Apps available only in specific regions** may return empty for other countries. Use the right `countryCode` or the app will look like it doesn't exist.

### Legal & Ethical Use

This actor is designed for legitimate app-store research, competitive intelligence, and product-development insight. Users are responsible for complying with applicable laws, Google's Terms of Service, and any privacy regulations that apply to their region. App metadata and developer contact info are public data on Google Play — do not use the collected data for spam, unsolicited outreach at scale, harassment, or any unlawful purpose.

# Actor input Schema

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

Keywords to search on Google Play (e.g. `meditation app`, `photo editor`). Each query produces its own set of apps. Leave empty if you're not using keyword search.

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

App package names (e.g. `com.supercell.brawlstars`) or full Play Store URLs. Each input produces one full-detail record. This field uses the same format as the Google Play Store Reviews Scraper — you can export this actor's `appId` column and feed it straight in.

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

Seed app package names or URLs. For each seed, the actor collects apps that Google Play shows in the 'Similar apps' carousel.

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

Developer display names (e.g. `Supercell`), numeric developer IDs (e.g. `5700313618786177705`), or full developer URLs. The actor returns every app published by each developer.

## `includeCollection` (type: `boolean`):

Enable to fetch a Top Chart (Top Free, Top Grossing, etc.) for a given category. Use the two selectors below to pick which chart and category.

## `collectionChart` (type: `string`):

Which Top Chart to fetch. Only used when 'Browse Top Charts' is enabled.

## `collectionCategory` (type: `string`):

Play Store category to browse. `All Apps` covers every non-game app; `All Games` covers every game. Only used when 'Browse Top Charts' is enabled.

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

Maximum number of apps to collect per search query, similar-apps seed, developer, or Top Chart. Set to 0 for all available results. Ignored for direct app-detail lookups (those always return one record each).

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

Play Store interface language. Affects localized titles, descriptions, and category names.

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

Country Google Play uses to resolve region-specific data (rankings, pricing, availability).

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

For each app found, visit its detail page to collect the full 30+ field record (description, version, screenshots, developer contact, data-safety, histogram). Adds one request per app — slower and more expensive. Direct 'App IDs or URLs' lookups always fetch full detail.

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

Include screenshot URLs and promo-video URL. Disable to keep output slimmer.

## `includeDeveloperContact` (type: `boolean`):

Include the developer's email, website, and physical address (where published). Disable for privacy-sensitive use cases.

## Actor input object example

```json
{
  "searchQueries": [
    "meditation app"
  ],
  "appIdsOrUrls": [],
  "similarToAppIds": [],
  "developerIds": [],
  "includeCollection": false,
  "collectionChart": "topselling_free",
  "collectionCategory": "APPLICATION",
  "maxResultsPerQuery": 100,
  "language": "en",
  "countryCode": "US",
  "fullDetail": true,
  "includeScreenshots": true,
  "includeDeveloperContact": true
}
```

# Actor output Schema

## `overview` (type: `string`):

Compact table of scraped apps — title, developer, rating, installs, price, URL.

## `details` (type: `string`):

Full metadata table including category, content rating, update date, and 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 = {
    "searchQueries": [
        "meditation app"
    ],
    "appIdsOrUrls": [],
    "similarToAppIds": [],
    "developerIds": [],
    "includeCollection": false,
    "collectionChart": "topselling_free",
    "collectionCategory": "APPLICATION",
    "maxResultsPerQuery": 100,
    "language": "en",
    "countryCode": "US",
    "fullDetail": true,
    "includeScreenshots": true,
    "includeDeveloperContact": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/google-play-apps-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": ["meditation app"],
    "appIdsOrUrls": [],
    "similarToAppIds": [],
    "developerIds": [],
    "includeCollection": False,
    "collectionChart": "topselling_free",
    "collectionCategory": "APPLICATION",
    "maxResultsPerQuery": 100,
    "language": "en",
    "countryCode": "US",
    "fullDetail": True,
    "includeScreenshots": True,
    "includeDeveloperContact": True,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/google-play-apps-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": [
    "meditation app"
  ],
  "appIdsOrUrls": [],
  "similarToAppIds": [],
  "developerIds": [],
  "includeCollection": false,
  "collectionChart": "topselling_free",
  "collectionCategory": "APPLICATION",
  "maxResultsPerQuery": 100,
  "language": "en",
  "countryCode": "US",
  "fullDetail": true,
  "includeScreenshots": true,
  "includeDeveloperContact": true
}' |
apify call solidcode/google-play-apps-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Apps Scraper",
        "description": "[💰 $0.5/1K] Extract Google Play Store app metadata — title, developer, ratings, installs, price, screenshots, description, version, contact info. Search by keyword, fetch details, find similar apps, browse a developer's catalog, or scrape Top Charts. Pairs with Google Play Store Reviews Scraper.",
        "version": "1.0",
        "x-build-id": "7VYKRYlU6aeCOI3Oa"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~google-play-apps-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-google-play-apps-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/solidcode~google-play-apps-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-google-play-apps-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/solidcode~google-play-apps-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-google-play-apps-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 (e.g. `meditation app`, `photo editor`). Each query produces its own set of apps. Leave empty if you're not using keyword search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "appIdsOrUrls": {
                        "title": "App IDs or URLs",
                        "type": "array",
                        "description": "App package names (e.g. `com.supercell.brawlstars`) or full Play Store URLs. Each input produces one full-detail record. This field uses the same format as the Google Play Store Reviews Scraper — you can export this actor's `appId` column and feed it straight in.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "similarToAppIds": {
                        "title": "Find Apps Similar To",
                        "type": "array",
                        "description": "Seed app package names or URLs. For each seed, the actor collects apps that Google Play shows in the 'Similar apps' carousel.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "developerIds": {
                        "title": "Developer Names, IDs, or URLs",
                        "type": "array",
                        "description": "Developer display names (e.g. `Supercell`), numeric developer IDs (e.g. `5700313618786177705`), or full developer URLs. The actor returns every app published by each developer.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeCollection": {
                        "title": "Browse Top Charts",
                        "type": "boolean",
                        "description": "Enable to fetch a Top Chart (Top Free, Top Grossing, etc.) for a given category. Use the two selectors below to pick which chart and category.",
                        "default": false
                    },
                    "collectionChart": {
                        "title": "Top Chart",
                        "enum": [
                            "topselling_free",
                            "topselling_paid",
                            "topgrossing"
                        ],
                        "type": "string",
                        "description": "Which Top Chart to fetch. Only used when 'Browse Top Charts' is enabled.",
                        "default": "topselling_free"
                    },
                    "collectionCategory": {
                        "title": "Category",
                        "enum": [
                            "APPLICATION",
                            "GAME",
                            "ART_AND_DESIGN",
                            "AUTO_AND_VEHICLES",
                            "BEAUTY",
                            "BOOKS_AND_REFERENCE",
                            "BUSINESS",
                            "COMICS",
                            "COMMUNICATION",
                            "DATING",
                            "EDUCATION",
                            "ENTERTAINMENT",
                            "EVENTS",
                            "FINANCE",
                            "FOOD_AND_DRINK",
                            "HEALTH_AND_FITNESS",
                            "HOUSE_AND_HOME",
                            "LIBRARIES_AND_DEMO",
                            "LIFESTYLE",
                            "MAPS_AND_NAVIGATION",
                            "MEDICAL",
                            "MUSIC_AND_AUDIO",
                            "NEWS_AND_MAGAZINES",
                            "PARENTING",
                            "PERSONALIZATION",
                            "PHOTOGRAPHY",
                            "PRODUCTIVITY",
                            "SHOPPING",
                            "SOCIAL",
                            "SPORTS",
                            "TOOLS",
                            "TRAVEL_AND_LOCAL",
                            "VIDEO_PLAYERS",
                            "WEATHER",
                            "GAME_ACTION",
                            "GAME_ADVENTURE",
                            "GAME_ARCADE",
                            "GAME_BOARD",
                            "GAME_CARD",
                            "GAME_CASINO",
                            "GAME_CASUAL",
                            "GAME_EDUCATIONAL",
                            "GAME_MUSIC",
                            "GAME_PUZZLE",
                            "GAME_RACING",
                            "GAME_ROLE_PLAYING",
                            "GAME_SIMULATION",
                            "GAME_SPORTS",
                            "GAME_STRATEGY",
                            "GAME_TRIVIA",
                            "GAME_WORD"
                        ],
                        "type": "string",
                        "description": "Play Store category to browse. `All Apps` covers every non-game app; `All Games` covers every game. Only used when 'Browse Top Charts' is enabled.",
                        "default": "APPLICATION"
                    },
                    "maxResultsPerQuery": {
                        "title": "Max Results per Query",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of apps to collect per search query, similar-apps seed, developer, or Top Chart. Set to 0 for all available results. Ignored for direct app-detail lookups (those always return one record each).",
                        "default": 100
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "nl",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "pt",
                            "pl",
                            "cs",
                            "da",
                            "sv",
                            "no",
                            "fi",
                            "el",
                            "tr",
                            "ar",
                            "he",
                            "ja",
                            "ko",
                            "zh-CN",
                            "zh-TW",
                            "th",
                            "vi",
                            "id",
                            "ms",
                            "hi",
                            "ru",
                            "uk",
                            "ro",
                            "hu"
                        ],
                        "type": "string",
                        "description": "Play Store interface language. Affects localized titles, descriptions, and category names.",
                        "default": "en"
                    },
                    "countryCode": {
                        "title": "Country",
                        "enum": [
                            "US",
                            "GB",
                            "CA",
                            "AU",
                            "NZ",
                            "IE",
                            "DE",
                            "FR",
                            "ES",
                            "IT",
                            "NL",
                            "BE",
                            "AT",
                            "CH",
                            "PT",
                            "LU",
                            "DK",
                            "FI",
                            "IS",
                            "NO",
                            "SE",
                            "PL",
                            "CZ",
                            "SK",
                            "HU",
                            "RO",
                            "BG",
                            "GR",
                            "TR",
                            "JP",
                            "KR",
                            "CN",
                            "HK",
                            "TW",
                            "SG",
                            "MY",
                            "TH",
                            "ID",
                            "PH",
                            "VN",
                            "IN",
                            "BR",
                            "MX",
                            "AR",
                            "CL",
                            "CO",
                            "PE",
                            "ZA",
                            "EG",
                            "IL",
                            "AE",
                            "SA",
                            "RU",
                            "UA"
                        ],
                        "type": "string",
                        "description": "Country Google Play uses to resolve region-specific data (rankings, pricing, availability).",
                        "default": "US"
                    },
                    "fullDetail": {
                        "title": "Fetch Full App Details",
                        "type": "boolean",
                        "description": "For each app found, visit its detail page to collect the full 30+ field record (description, version, screenshots, developer contact, data-safety, histogram). Adds one request per app — slower and more expensive. Direct 'App IDs or URLs' lookups always fetch full detail.",
                        "default": true
                    },
                    "includeScreenshots": {
                        "title": "Include Screenshots & Video",
                        "type": "boolean",
                        "description": "Include screenshot URLs and promo-video URL. Disable to keep output slimmer.",
                        "default": true
                    },
                    "includeDeveloperContact": {
                        "title": "Include Developer Contact Info",
                        "type": "boolean",
                        "description": "Include the developer's email, website, and physical address (where published). Disable for privacy-sensitive use cases.",
                        "default": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
