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

Get full Google Play app details (installs, ratings, rating breakdown, price, category, last update) plus developer email, website and address, by app ID or keyword search.

- **URL**: https://apify.com/maged120/google-play-app-scraper.md
- **Developed by:** [Maged](https://apify.com/maged120) (community)
- **Categories:** Developer tools, Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper** extracts **full app details from the Google Play Store**: installs (including the **exact install count**), rating and **star breakdown**, price, category, last update and version. It also returns **developer contacts**: legal name, **email**, **phone**, **website** and **address**. Look apps up by ID or link, or **search by keyword** and get every result with its ranking.

### What does Google Play App Scraper do?

Give it app IDs, [Google Play](https://play.google.com/store/apps) links, or search keywords. For every app it returns one clean row with store metrics (rating, ratings count, reviews count, 1–5 star histogram, installs, price, in-app purchase range, ads), listing content (title, summary, description, screenshots, what's new) and developer details. Keyword searches also record each app's **rank** for that keyword. You can pick the store **country** and **language**.

On the Apify platform you also get API access, scheduling, integrations (Google Sheets, Zapier, Make, webhooks) and run monitoring, so app tracking can run on autopilot.

### Why scrape Google Play?

- **Lead generation**: build lists of app developers with their email, phone, website and business address, filtered by category, installs or rating.
- **Market & competitor research**: compare installs, ratings and update frequency across every app in a niche.
- **App Store Optimization (ASO)**: track where apps rank for your keywords, and how titles, summaries and ratings change.
- **Investment & M\&A scouting**: spot fast-growing apps from exact install counts and recent update activity.
- **Monitoring**: schedule runs to get alerted when a competitor ships an update or its rating moves.

### How to scrape Google Play app data

1. Open the Actor and go to the **Input** tab.
2. Add app IDs or links to **Apps**, and/or keywords to **Search keywords**.
3. Optionally set **Country** and **Language** (default: US, English).
4. Click **Start**.
5. Open the **Output** tab and switch between the **Apps** and **Developer contacts** views, or download everything as JSON, CSV, Excel or HTML.

### Input

| Field | Type | Description |
|---|---|---|
| `apps` | array | App IDs (`com.spotify.music`) or Google Play links. |
| `searchTerms` | array | Keywords to search. Each result is returned with full details and its rank. |
| `maxAppsPerSearch` | integer | Top apps to return per keyword (1–30). Default `20`. |
| `country` | string | Store country code, e.g. `us`, `gb`, `de`. Default `us`. |
| `language` | string | Language code, e.g. `en`, `de`, `es`. Default `en`. |

```json
{
    "apps": ["com.spotify.music", "https://play.google.com/store/apps/details?id=com.whatsapp"],
    "searchTerms": ["habit tracker"],
    "maxAppsPerSearch": 20,
    "country": "us",
    "language": "en"
}
```

### Output

Each app is one row. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
    "appId": "com.habitrpg.android.habitica",
    "title": "Habitica: Gamify Your Tasks",
    "url": "https://play.google.com/store/apps/details?id=com.habitrpg.android.habitica",
    "summary": "Treat your life like a game to stay motivated and organized!",
    "score": 4.658,
    "ratings": 75565,
    "reviews": 3933,
    "ratingHistogram": { "1": 2033, "2": 1016, "3": 2932, "4": 8738, "5": 60832 },
    "installs": "5,000,000+",
    "minInstalls": 5000000,
    "realInstalls": 8302403,
    "free": true,
    "price": 0,
    "currency": "USD",
    "offersInAppPurchases": true,
    "inAppPriceRange": "$0.99 - $47.99 per item",
    "containsAds": true,
    "genre": "Productivity",
    "contentRating": "Everyone",
    "developer": "HabitRPG, Inc.",
    "developerLegalName": "HabitRPG, Inc.",
    "developerEmail": "mobile@habitica.com",
    "developerPhone": "+1 415-562-6350",
    "developerWebsite": "https://habitica.com",
    "developerAddress": "120 Washington St APT 202\nSalem, MA 01970-6396\nUnited States",
    "privacyPolicy": "https://habitica.com/static/privacy",
    "released": "Dec 10, 2015",
    "lastUpdated": "2026-08-26T16:55:46+00:00",
    "version": "4.10.5",
    "recentChanges": "New in 4.10.5\n- We've improved how our widgets adjust and resize...",
    "searchTerm": "habit tracker",
    "searchRank": 4,
    "country": "us",
    "language": "en"
}
```

Rows also include `description`, `icon`, `headerImage`, `screenshots`, `video`, `categories`, `genreId` and `scrapedAt`.

#### Dataset views

- **Apps**: rating, installs, category, price, last update and keyword rank.
- **Developer contacts**: legal name, email, phone, website, address and privacy policy for each app's developer.

### Output data fields

| Field | Description |
|---|---|
| `score` / `ratings` / `reviews` | Average rating, number of ratings, number of written reviews. |
| `ratingHistogram` | Number of 1★ to 5★ ratings. |
| `installs` / `minInstalls` / `realInstalls` | Install bracket as shown, its lower bound, and the exact install count. |
| `free` / `price` / `currency` | Pricing. |
| `offersInAppPurchases` / `inAppPriceRange` / `containsAds` | Monetization. |
| `genre` / `categories` / `contentRating` | Classification. |
| `developer*` | Developer name, legal name, email, phone, website and address, where published. |
| `released` / `lastUpdated` / `version` / `recentChanges` | Release and update history. |
| `searchTerm` / `searchRank` | The keyword that found the app and its position (search results only). |
| `error` | Why an app couldn't be read (e.g. not available in that country), otherwise `null`. |

### How many results will I get?

One row per app. Keyword searches produce up to **Max apps per keyword** rows each, so 3 keywords × 20 apps = up to 60 rows. An app found by two keywords appears once per keyword, with each rank.

### Tips

- **Country matters**: availability, prices and search rankings differ by country. Run the same list per country if you need comparisons.
- **Rank tracking**: schedule a keyword run daily and compare `searchRank` over time.
- **Lead lists**: search for niche keywords, then filter the **Developer contacts** view by installs or rating.

### FAQ

**Why is a developer's address or phone missing?** Developers choose what contact details to publish. Many individual developers only list an email.

**Why do some apps return "not available in this country"?** Apps can be region-locked. Try the country where the app is published.

**Is scraping Google Play legal?** The Actor only collects publicly available store listings. Developer contact details can include personal data, especially for individual developers. You're responsible for using them lawfully, e.g. under GDPR and anti-spam rules. When in doubt, consult a lawyer.

**Need reviews too?** Use a dedicated Google Play reviews scraper alongside this Actor, and join the results on `appId`.

**Found a bug or need a custom feature?** Open an issue in the **Issues** tab. Custom solutions are available on request.

***

⭐ **Found this Actor useful?** A quick review on the Store helps other users find it and keeps it maintained.

### Related tools

- [Amazon Reviews Scraper – ratings, review text and verified buyers in bulk](https://apify.com/maged120/amazon-reviews-scraper)
- [Google Trends Scraper – interest over time, by region and related queries](https://apify.com/maged120/google-trends-scraper)

# Actor input Schema

## `apps` (type: `array`):

App IDs (com.spotify.music) or Google Play links (https://play.google.com/store/apps/details?id=com.spotify.music), one per line.

## `searchTerms` (type: `array`):

Optional. Keywords to search Google Play for (e.g. 'habit tracker'). Every app found is returned with full details and its rank for that keyword.

## `maxAppsPerSearch` (type: `integer`):

How many top apps to return for each keyword (1–30).

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

Two-letter country code of the store to read (e.g. us, gb, de, in). Affects availability, prices and search ranking.

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

Two-letter language code for titles, descriptions and categories (e.g. en, de, es).

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music",
    "https://play.google.com/store/apps/details?id=com.whatsapp"
  ],
  "searchTerms": [
    "habit tracker"
  ],
  "maxAppsPerSearch": 20,
  "country": "us",
  "language": "en"
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "apps": [
        "com.spotify.music",
        "https://play.google.com/store/apps/details?id=com.whatsapp"
    ],
    "searchTerms": [
        "habit tracker"
    ]
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "apps": [
        "com.spotify.music",
        "https://play.google.com/store/apps/details?id=com.whatsapp",
    ],
    "searchTerms": ["habit tracker"],
}

# Run the Actor and wait for it to finish
run = client.actor("maged120/google-play-app-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 '{
  "apps": [
    "com.spotify.music",
    "https://play.google.com/store/apps/details?id=com.whatsapp"
  ],
  "searchTerms": [
    "habit tracker"
  ]
}' |
apify call maged120/google-play-app-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maged120/google-play-app-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/PBEeJjwJdAP8l7qtc/builds/LMRn6cEMXNCrw3wHV/openapi.json
