# Google Play App Data API (`norespi/google-play-apps`) Actor

Gets Google Play app data by package name or developer: rating, rating count, installs, price, in-app purchases, ads, category, content rating, version, last update. Any country and language. No login. $1.70 per 1,000 apps.

- **URL**: https://apify.com/norespi/google-play-apps.md
- **Developed by:** [Gabriel Jossic](https://apify.com/norespi) (community)
- **Categories:** Marketing, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.70 / 1,000 apps

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?

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

**Google Play App Data API** that returns the public store facts of any Android app: **rating, rating count, installs, price, in-app purchases, ads, category, content rating, version and last update**, one clean row per app. Give it **package names**, **Play URLs** or a **developer**, pick a **country and language**, and get the data back in seconds.

Export to **JSON, CSV, Excel or Google Sheets**, call it from the **Apify API**, **schedule** it daily to track rating and install changes, or let an **AI agent** use it through MCP.

No login, no Google account, no API key, no browser. The Actor reads the public app pages that Google's robots.txt allows (`/store/apps/details`, `/store/apps/dev`, `/store/apps/developer`) and nothing else. The prefilled input (6 apps) finishes in about 2 seconds.

### What data does the Google Play App Data API return?

| Field | Example |
|---|---|
| `appId`, `title`, `url` | `com.duolingo`, Duolingo: Learn Languages, store link for your country/language |
| `developer`, `developerId`, `developerUrl` | Publisher name as shown on Play, its numeric id and Play developer page |
| `genre`, `genreId` | Education / `EDUCATION` |
| `rating`, `ratingCount`, `reviewCount` | 4.738 / 50,871,610 ratings / 965,206 written reviews (counts only) |
| `ratingHistogram` | Number of 1★ to 5★ ratings |
| `installs`, `minInstalls` | `500,000,000+` / 500000000 (Google's public install bracket) |
| `free`, `price`, `currency` | `true`, `0`, `USD` (paid apps: e.g. `6.99`) |
| `inAppPurchases`, `inAppPurchaseRange` | `true`, `$0.99 - $239.99 per item` |
| `containsAds` | `true` when Play shows "Contains ads" |
| `contentRating`, `contentRatingNotes` | Everyone / Users Interact, In-App Purchases |
| `released`, `lastUpdated` | ISO 8601 dates |
| `version`, `minAndroidVersion` | `1.337.0.2`, `6.0`, or `Varies with device` |
| `summary` | The app's short description |
| `descriptionExcerpt` | First 300 characters of the description, plain text, contact details removed |
| `icon` | Icon image URL |
| `country`, `language`, `scrapedAt` | Store locale used and time of the read |

Fields Google does not show for an app are `null`. Nothing is guessed.

### How to use the Google Play App Data API

1. Click **Try for free**.
2. Paste **package names** (`com.whatsapp`) or **Play URLs** into **Apps**, and/or a developer name or id into **Developers**. Set the **country** and **language** of the store.
3. Click **Start**. Download the rows from the **Output** tab as JSON, CSV or Excel, or fetch them through the API.

Input example:

```json
{
  "appIds": ["com.whatsapp", "https://play.google.com/store/apps/details?id=com.spotify.music"],
  "developerIds": ["Mozilla", "4772240228547998649"],
  "country": "fr",
  "language": "fr",
  "maxItems": 100
}
```

#### Input fields

| Field | Default | What it does |
|---|---|---|
| `appIds` | 6 popular apps (prefilled) | Package names or Google Play app URLs, one per line. |
| `developerIds` | none | Developer name as shown on Play (`Mozilla`), numeric developer id (`5700313618786177705`) or developer page URL. Returns the apps listed on that public page (about 20 at most). |
| `country` | `us` | Store country (`gl`): changes price, currency and availability. |
| `language` | `en` | Store language (`hl`), e.g. `fr`, `de`, `pt-BR`: changes title, genre and text fields. |
| `maxItems` | `100` | Maximum apps saved. You pay per app saved. |

### Output example

```json
{
  "appId": "com.duolingo",
  "title": "Duolingo: Learn Languages",
  "url": "https://play.google.com/store/apps/details?id=com.duolingo&hl=en&gl=us",
  "developer": "Duolingo",
  "developerId": "6957685454452609502",
  "developerUrl": "https://play.google.com/store/apps/dev?id=6957685454452609502",
  "genre": "Education",
  "genreId": "EDUCATION",
  "rating": 4.738,
  "ratingCount": 50871610,
  "reviewCount": 965206,
  "ratingHistogram": { "1": 1012058, "2": 364337, "3": 1175184, "4": 5838426, "5": 42481571 },
  "installs": "500,000,000+",
  "minInstalls": 500000000,
  "free": true,
  "price": 0,
  "currency": "USD",
  "inAppPurchases": true,
  "inAppPurchaseRange": "$0.99 - $239.99 per item",
  "containsAds": true,
  "contentRating": "Everyone",
  "contentRatingNotes": "Users Interact, In-App Purchases",
  "released": "2013-05-29T12:18:00.000Z",
  "lastUpdated": "2026-10-12T16:38:11.000Z",
  "version": "Varies with device",
  "minAndroidVersion": "Varies with device",
  "summary": "Make language learning fun with Spanish, French, English, chess, math & music.",
  "descriptionExcerpt": "Learn a new language, chess, math & more with the world’s most downloaded education app! Duolingo is the fun, free app for learning 40+ languages through quick, bite-sized lessons. Practice speaking, reading, listening & writing in languages like Spanish, French, German and more. Designed by…",
  "icon": "https://play-lh.googleusercontent.com/tw_coGKgk1K_zO-Ypf9zBKV1s-KT3dYN1MIUxIqtnbfmON5x_YmuoAr31gE4oSfJHNtA-aStTd-qe9R8S6NVyA",
  "country": "us",
  "language": "en",
  "scrapedAt": "2026-10-13T03:18:08.372Z"
}
```

A real record from a run on 2026-10-13. A `RUN_SUMMARY` record in the key-value store lists apps saved, apps not found, inputs that were not valid package names, each developer page read and any URL skipped because of robots.txt.

### How much does it cost to get Google Play app data?

**$1.70 per 1,000 apps.** You pay only for apps saved to the dataset. Apps that are not found cost nothing.

| You get | You pay |
|---|---|
| 6 apps (prefilled input) | $0.0102 |
| 100 apps | $0.17 |
| 1,000 apps | $1.70 |
| 10,000 apps | $17 |

Set `maxItems` to cap a run. Apify's free plan credit covers a few thousand apps a month.

### How to track Google Play apps every day

Create a **schedule** in Apify (e.g. every morning) with your list of competitor apps. Each run gives today's rating, rating count, install bracket, price and last update; compare runs to see who shipped an update or gained ratings. Send the rows to **Google Sheets, Slack, Zapier, Make, n8n** or a **webhook** with Apify integrations.

### Use the Google Play App Data API with AI agents (MCP)

Claude, Cursor and other MCP clients can call this Actor through the official Apify MCP server. Add `NORESPI/google-play-apps` to your Apify MCP configuration, then ask things like "compare the rating, installs and ads of Duolingo, Babbel and Busuu on the French Play Store".

### Use cases

- **Competitor tracking (ASO)**: rating, rating count, install bracket and update dates of your competitors, every day.
- **Market research**: price, ads and in-app purchase models across a list of apps or a developer's whole catalogue.
- **App directories and comparison sites**: fresh title, icon, category, rating and price per country.
- **Investor and M\&A screening**: install brackets and rating volume of a publisher's apps.
- **Localization checks**: how your listing (title, summary, price) shows in each country and language.

### Limits (stated up front)

- **No keyword search.** Google's robots.txt disallows `/store/search`, so you must give package names, URLs or developers.
- **Developer pages show about 20 apps.** Google loads the rest through an internal endpoint (`/_/…batchexecute`) that robots.txt disallows, so the Actor returns only the apps visible on the public page. Developers with more apps: list the packages in `appIds`.
- **No user reviews** in this version: only rating counts and the 1–5★ histogram. Review text and reviewer names are not collected.
- **No data safety section, permissions or screenshots.** The data safety page is disallowed by robots.txt.
- **Install counts are Google's public brackets** (`500,000,000+`), not exact downloads.
- `version` and `minAndroidVersion` read `Varies with device` when Google publishes several builds.
- Google's page layout is not a documented API. If Google changes it, fields can go `null` until the Actor is updated; the JSON-LD fallback keeps title, rating, price and developer working.
- The Actor slows down and stops on 403 or repeated 429 answers instead of pushing harder. It does not use proxies to get around limits.

### Privacy

App-level store facts only. The Actor **never outputs developer e-mail addresses, phone numbers, postal addresses or websites**, even though Google shows them on the app page: that block is not read. The description excerpt has e-mails, phone numbers, links and @handles removed. No user reviews and no reviewer names. `developer` is the publisher name exactly as Google Play displays it.

### FAQ

#### Do I need a Google account or API key?

No. Only public Google Play pages are read.

#### Can I search Google Play by keyword?

No. Google's robots.txt disallows the search pages and this Actor respects it. Give package names, Play URLs or developers.

#### How do I find an app's package name?

It is the `id=` part of the Play URL: `https://play.google.com/store/apps/details?id=com.whatsapp` → `com.whatsapp`. You can paste the whole URL.

#### Can I get prices in another currency?

Yes. Set `country` (e.g. `gb`, `de`, `jp`): Google shows the local price and currency for that store.

#### Can I export Google Play data to CSV, Excel or Google Sheets?

Yes, from the Output tab, the API, or the Google Sheets integration.

#### Is this Actor affiliated with Google or Google Play?

No. It is an independent tool that reads public Google Play pages. Google Play is a trademark of Google LLC.

Questions, bugs or a feature you need: open an issue in the **Issues** tab.

# Actor input Schema

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

Package names such as com.whatsapp, or Google Play URLs such as https://play.google.com/store/apps/details?id=com.whatsapp. One app per line.

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

Get the apps listed on a developer's public Google Play page. Accepts the developer name as shown on Play (e.g. Mozilla), the numeric developer id (e.g. 5700313618786177705), or the developer page URL. Google shows about 20 apps on that page; only those are returned.

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

Two-letter store country code (gl), e.g. us, gb, fr, de, in, br. Changes price, currency and availability.

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

Language of the store page (hl), e.g. en, fr, de, es, pt-BR, ja. Changes title, genre, summary and description text.

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

Maximum number of apps saved to the dataset (you pay per app saved).

## Actor input object example

```json
{
  "appIds": [
    "com.whatsapp",
    "com.spotify.music",
    "com.duolingo",
    "com.king.candycrushsaga",
    "com.mojang.minecraftpe",
    "org.mozilla.firefox"
  ],
  "country": "us",
  "language": "en",
  "maxItems": 100
}
```

# Actor output Schema

## `results` (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 = {
    "appIds": [
        "com.whatsapp",
        "com.spotify.music",
        "com.duolingo",
        "com.king.candycrushsaga",
        "com.mojang.minecraftpe",
        "org.mozilla.firefox"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("norespi/google-play-apps").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "appIds": [
        "com.whatsapp",
        "com.spotify.music",
        "com.duolingo",
        "com.king.candycrushsaga",
        "com.mojang.minecraftpe",
        "org.mozilla.firefox",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("norespi/google-play-apps").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 '{
  "appIds": [
    "com.whatsapp",
    "com.spotify.music",
    "com.duolingo",
    "com.king.candycrushsaga",
    "com.mojang.minecraftpe",
    "org.mozilla.firefox"
  ]
}' |
apify call norespi/google-play-apps --silent --output-dataset

```

## MCP server setup

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

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/YffcVhPAKr3i3kiz5/builds/AiewBPCpSJoNCeStZ/openapi.json
