# Google Play App Details Scraper - Android App Metadata API (`appdata-labs/google-play-app-details`) Actor

Get the full Google Play listing for any Android app: installs, rating histogram, price, IAP range, developer contact, version, release notes and screenshots. No login, structured JSON.

- **URL**: https://apify.com/appdata-labs/google-play-app-details.md
- **Developed by:** [Kobkoon Janngam](https://apify.com/appdata-labs) (community)
- **Categories:** Agents, MCP servers, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 app detail scrapeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Play App Details Scraper — Android App Metadata & Installs

**Get the complete Google Play listing for any Android app** — installs, the full star-rating histogram, price, in-app purchase range, developer contact details, version, release notes and screenshots — as one clean JSON row per app.

**Quick start:** press **Start** with no configuration at all. The Actor ships with ten well-known apps as its default and returns their full listings immediately. Then paste in your own package names.

### Sample output

| title | developer | installs | score | ratings | priceText | genre | version | updated |
|---|---|---|---|---|---|---|---|---|
| Spotify: Music and Podcasts | Spotify AB | 1,000,000,000+ | 4.4 | 34,281,004 | Free | Music & Audio | varies | 2026-08-27 |
| Duolingo: Language Lessons | Duolingo | 500,000,000+ | 4.6 | 25,116,882 | Free | Education | 6.11.1 | 2026-08-25 |

Every row also carries `appId`, `url`, `summary`, `description`, `developerId`, `developerWebsite`, `developerEmail`, `histogram`, `minInstalls`, `price`, `currency`, `free`, `offersIAP`, `inAppPurchaseRange`, `adSupported`, `genreId`, `contentRating`, `androidVersion`, `released`, `recentChanges`, `privacyPolicy`, `icon`, `headerImage`, `screenshots`, `screenshotCount` and `country`.

### Why this one

Most Google Play scrapers hand back whatever the page contained and let you deal with it. A raw listing is 57 fields and about **15 KB per app** — four times what an AI agent can comfortably read, and most of it is CDN URLs.

This Actor returns a **2.5 KB row** by default: the description is cut to a 600-character preview, the screenshot list to three, and `descriptionTruncated` and `screenshotCount` tell you exactly what was left out. Set `includeFullText: true` when you want everything. That one decision is why an LLM can hold thirty apps in context here and only four somewhere else.

The rating histogram is the other reason. `score` alone hides the shape of a rating — a 4.2 built on 60% five-star and 25% one-star is a different app from a flat 4.2, and `histogram` gives you both.

### What you can do with it

- **Competitive teardown.** Pull ten rivals in one run and compare installs, IAP range, ad support and update cadence side by side.
- **Watch a release.** `version`, `updated` and `recentChanges` on a schedule give you a changelog history for any app, including ones that publish no changelog anywhere else.
- **Price and monetisation research.** `priceText`, `offersIAP`, `inAppPurchaseRange` and `adSupported` in one table.
- **Feed an AI agent.** Rows are small, consistently shaped and identical across runs, so a tool-calling model can reason over them without pagination.

### Input

| Field | Default | Notes |
|---|---|---|
| `appUrlsOrIds` | 10 sample apps | Package names (`com.spotify.music`) or full Google Play URLs. Mix freely. |
| `countries` | `["us"]` | Two-letter storefront codes. Listings differ by country: price, availability and language all change. |
| `language` | `en` | Independent of country — read the Thai store in English with `country: th`, `language: en`. |
| `includeFullText` | `false` | Returns the complete description and every screenshot. Rows get roughly six times larger. |

An app that is not published in a requested country is reported in the log and in `SUMMARY`, and the run still succeeds with everything else — availability is per-country and a missing app is an answer, not a failure.

### Pricing

Pay per app record delivered. A run that resolves no apps charges you nothing.

### Disclaimer

This is an **unofficial** tool. It is not affiliated with, authorised by, endorsed by, or in
any way officially connected to Google LLC. "Google Play", "Android" and "Google" are
trademarks of Google LLC.

It reads only **public, unauthenticated** Google Play app listing pages
(`/store/apps/details`) — a path that `play.google.com/robots.txt` does not disallow. It
signs into nothing, stores no credentials, and returns nothing that is behind a login or a
paywall.

Google can change the page structure at any time. When a listing cannot be read, this Actor
says so in the log and in the run summary rather than handing you an empty result that looks
like an answer.

# Actor input Schema

## `appUrlsOrIds` (type: `array`):

Android apps to fetch. Each entry can be a Google Play URL (https://play.google.com/store/apps/details?id=com.spotify.music) or a bare package name (com.spotify.music). The default is a spread of well-known apps so a zero-config run shows you the output shape.

## `countries` (type: `array`):

Two-letter country codes of the storefronts to read. Stores differ by country — rankings, prices and reviews are all per-country — so add countries to widen the result rather than raising the per-app limit.

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

Two-letter language code for the text Google Play returns (titles, descriptions, review text). Independent of country: you can read the Thai store in English with country=th and language=en.

## `includeFullText` (type: `boolean`):

Off by default. The store description runs to several thousand characters and the screenshot list to a dozen URLs, which together make a row too big for an AI agent to read comfortably. Turn this on when you want the complete text and every screenshot.

## Actor input object example

```json
{
  "appUrlsOrIds": [
    "com.spotify.music",
    "https://play.google.com/store/apps/details?id=com.whatsapp"
  ],
  "countries": [
    "us",
    "de",
    "br"
  ],
  "language": "en",
  "includeFullText": false
}
```

# Actor output Schema

## `rows` (type: `string`):

One row per app: title, developer, installs, rating and its histogram, price and in-app purchase range, version, release notes, category, content rating and screenshots.

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

What was requested, what was delivered, and the per-request counts behind it — enough to check a run without reading every row.

# 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 = {
    "appUrlsOrIds": [
        "com.spotify.music",
        "com.whatsapp",
        "com.instagram.android",
        "com.netflix.mediaclient",
        "com.duolingo",
        "com.canva.editor",
        "com.pinterest",
        "com.ubercab",
        "com.airbnb.android",
        "com.google.android.youtube"
    ],
    "countries": [
        "us"
    ],
    "language": "en",
    "includeFullText": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("appdata-labs/google-play-app-details").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 = {
    "appUrlsOrIds": [
        "com.spotify.music",
        "com.whatsapp",
        "com.instagram.android",
        "com.netflix.mediaclient",
        "com.duolingo",
        "com.canva.editor",
        "com.pinterest",
        "com.ubercab",
        "com.airbnb.android",
        "com.google.android.youtube",
    ],
    "countries": ["us"],
    "language": "en",
    "includeFullText": False,
}

# Run the Actor and wait for it to finish
run = client.actor("appdata-labs/google-play-app-details").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 '{
  "appUrlsOrIds": [
    "com.spotify.music",
    "com.whatsapp",
    "com.instagram.android",
    "com.netflix.mediaclient",
    "com.duolingo",
    "com.canva.editor",
    "com.pinterest",
    "com.ubercab",
    "com.airbnb.android",
    "com.google.android.youtube"
  ],
  "countries": [
    "us"
  ],
  "language": "en",
  "includeFullText": false
}' |
apify call appdata-labs/google-play-app-details --silent --output-dataset

```

## MCP server setup

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

```

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/oZpDsc6wva9WzCbCt/builds/Fbi7u7Gdh5OYEMaTr/openapi.json
