# Google Play App Details Scraper (`googleapi/google-play-app-details-scraper`) Actor

Extract public Google Play application details, ratings, installs, developers, and categories.

- **URL**: https://apify.com/googleapi/google-play-app-details-scraper.md
- **Developed by:** [Google API](https://apify.com/googleapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Collect public app, publisher, pricing, rating, media, support, and data-safety information from Google Play listings. Provide Android package IDs or public app listing URLs; each input identifies a specific app rather than a search result.

Optional linked-page enrichment can add information from the app’s public Data safety page or developer profile. These options are off by default, and the Actor does not fetch external publisher websites or individual reviews.

### How to use

1. Enter Android package IDs or public Google Play app URLs.
2. Choose the language and country for package IDs.
3. Select the listing sections and optional linked pages to include.
4. Set the maximum app count and request limits, then run the Actor.

Example:

```json
{
  "appIds": ["com.example.reader"],
  "language": "en",
  "country": "US",
  "maxResults": 1,
  "includeMedia": true,
  "includeDataSafety": true,
  "includeRelatedApps": true
}
```

### Input

| Input | Description | Default |
|---|---|---:|
| `appIds` / `appId` | Android package IDs. | — |
| `startUrls` | Public Google Play app detail URLs. `sourceUrls`, `urls`, and `url` are aliases. | — |
| `language` / `country` | Market used when package IDs are converted to listing URLs. URL `hl` and `gl` settings take precedence. | `en` / `US` |
| `locale` | Optional locale alias such as `en-US`; must agree with language and country if both are supplied. | — |
| `maxResults` | Maximum app records across all sources. `maxItems` is an alias. | 50 |
| `deduplicate` | Keep one record per package ID/canonical URL. | `true` |
| `includeMedia` | Include public icon and screenshot information. | `true` |
| `includeDataSafety` | Include the Data safety summary shown on the app listing. | `true` |
| `includeDataSafetyDetails` | Visit the app’s public Data safety page for additional listed data types and purposes. | `false` |
| `includeDeveloperProfile` | Visit the public Google Play developer profile for its description and app cards. | `false` |
| `includeRelatedApps` | Include developer and similar-app cards when shown. | `true` |
| `includeWhatsNew` | Include the public What's new text and update date. | `true` |
| `maxDetailRequests` / `maxRequests` | Limits for optional detail requests and total requests. | 25 / 30 |
| `proxyConfiguration` | Optional proxy settings for public requests. | — |

App listing URLs are direct detail pages, so `page` and `maxPages` are fixed at 1. The Input tab contains response-size and compatibility-alias settings.

### Output

Each dataset item represents an app and includes its package ID, name, and public listing URL when available. Other fields may include:

- **Listing:** description, category, What's new text, version, size, release/update dates, and Android requirement.
- **Publisher and compatibility:** developer name and profile, developer website, and supported Google Workspace/device categories.
- **Ratings and adoption:** rating, rating/review counts, and displayed download tier.
- **Pricing:** app price, currency, in-app purchase status, offers, and displayed price range.
- **Media and support:** icon, screenshots, public support contacts, privacy policy, and terms.
- **Safety and discovery:** public Data safety summary, listed permissions, similar apps, and other apps from the developer.

A download label such as `1M+` remains available as text and is represented as a lower bound, not an exact install count. Ratings and aggregate review summaries are not individual user reviews. Missing values are not inferred.

Example dataset item:

```json
{
  "appId": "com.example.reader",
  "title": "Sample Reader",
  "appUrl": "https://play.google.com/store/apps/details?id=com.example.reader&hl=en&gl=US",
  "developerName": "Sample Labs",
  "appCategory": "Books & Reference",
  "rating": 4.5,
  "ratingCount": 12500,
  "installsText": "1M+",
  "installs": 1000000,
  "installsValueType": "lower_bound",
  "priceText": "Free",
  "free": true,
  "containsAds": false,
  "inAppPurchases": true,
  "updatedText": "Jan 15, 2026",
  "whatsNew": "Improved reading performance.",
  "dataSafety": {
    "summary": "Data is encrypted in transit.",
    "encryptedInTransit": true
  }
}
```

The Output tab shows the available result fields. Run summary information is available with the run output in Apify.

### Limits and responsible use

Listing details vary by app, market, and the information Google Play publishes. Optional Data safety and developer-profile visits add requests. Public Data safety information describes the developer’s disclosures; it is not a personalized assessment of a user’s data.

This Actor collects public app listing information and does not install apps or collect individual reviewer information. Use data responsibly and follow applicable privacy requirements and Google Play terms. This Actor is not affiliated with Google.

# Actor input Schema

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

Android package IDs such as com.example.reader. At most 100 unique sources are accepted.

## `appId` (type: `string`):

Compatibility alias for one Android package ID. Do not combine it with a conflicting appIds value.

## `startUrls` (type: `array`):

Public HTTPS Google Play app detail URLs. An explicit URL hl or gl parameter takes precedence over actor-level locale fields.

## `sourceUrls` (type: `array`):

Compatibility alias for an array of public Google Play app detail URLs.

## `urls` (type: `array`):

Compatibility alias for an array of public Google Play app detail URLs.

## `url` (type: `string`):

Compatibility alias for one public HTTPS Google Play app detail URL.

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

Two-letter language used when app IDs are converted into listing URLs.

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

Two-letter Google Play country used when app IDs are converted into listing URLs.

## `locale` (type: `string`):

Optional locale alias such as en-US. It must agree with language and country when those fields are also supplied.

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

Global maximum of normal app records saved across all sources.

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

Compatibility alias for maxResults. Takes precedence when maxResults is unset or at its default; otherwise conflicting values are rejected.

## `page` (type: `integer`):

Fixed at 1 because each source is a direct app-detail listing rather than a paginated search.

## `maxPages` (type: `integer`):

Fixed at 1 because app listings are not paginated. The two linked-page enrichment switches can request at most one additional page each per app.

## `deduplicate` (type: `boolean`):

Deduplicate normal output by package ID, then canonical URL, across all sources.

## `includeMedia` (type: `boolean`):

Include the icon, screenshots, and bounded media metadata belonging to the app listing.

## `includeDataSafety` (type: `boolean`):

Include the public data-safety summary and link shown on the listing page.

## `includeDataSafetyDetails` (type: `boolean`):

Opt in to one additional HTTPS request to the app's linked Google Play Data safety page for specific data types, optionality, and purposes. Disabled by default.

## `includeDeveloperProfile` (type: `boolean`):

Opt in to one additional HTTPS request to the app's linked Google Play developer profile for its public description, website link, and visible app cards. The publisher website itself is not fetched. Disabled by default.

## `includeRelatedApps` (type: `boolean`):

Include bounded public developer-app and similar-app cards when visible on the listing.

## `includeWhatsNew` (type: `boolean`):

Include the public What’s new text and update date when visible.

## `requestDelayMs` (type: `integer`):

Delay before a worker starts its next source request; concurrent workers may still overlap. Range: 0–10000 ms.

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

Bounded number of public source requests processed at once.

## `maxRequestRetries` (type: `integer`):

Finite retries for timeouts and transient 5xx responses; access blocks are not retried.

## `requestTimeoutMs` (type: `integer`):

Timeout for each public listing request. A conflicting non-default requestTimeoutSecs value is rejected.

## `requestTimeoutSecs` (type: `integer`):

Compatibility alias for requestTimeoutMs in seconds. Takes precedence when requestTimeoutMs is unset or at its default; otherwise conflicting values are rejected.

## `maxResponseBytes` (type: `integer`):

Fail closed when a public app listing response exceeds this byte limit.

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

Optional active Apify Proxy or proxyUrls configuration. It is wired into HTTP requests through a standard proxy dispatcher; it does not bypass CAPTCHA or access controls.

## Actor input object example

```json
{
  "language": "en",
  "country": "US",
  "maxResults": 50,
  "page": 1,
  "maxPages": 1,
  "deduplicate": true,
  "includeMedia": true,
  "includeDataSafety": true,
  "includeDataSafetyDetails": false,
  "includeDeveloperProfile": false,
  "includeRelatedApps": true,
  "includeWhatsNew": true,
  "requestDelayMs": 0,
  "maxConcurrency": 1,
  "maxRequestRetries": 1,
  "requestTimeoutMs": 25000,
  "maxResponseBytes": 2500000
}
```

# Actor output Schema

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

Rich public Google Play application, publisher, rating, pricing, media, safety, and discovery fields.

## `output` (type: `string`):

Request counts and bounded per-source failures, separate from the app dataset.

## `runHealth` (type: `string`):

Source success, block, and business-record counts.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/google-play-app-details-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/google-play-app-details-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call googleapi/google-play-app-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,googleapi/google-play-app-details-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ZwCGUqVFXat7GMwn7/builds/3tNqzAqI3wRlBjfjA/openapi.json
