# Google Play Store Scraper (`alkausari_mujahid/google-play-store-scraper`) Actor

Scrape Google Play apps and reviews: search results, top charts, developer portfolios, similar apps and full app details — 60+ fields per app, unlimited reviews per app, any country and language. Paste app IDs or links. Not affiliated with Google.

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

## Pricing

from $1.50 / 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 Store Scraper** extracts app data and user reviews from
[Google Play](https://play.google.com/store/apps) — no Google account, API key or browser needed.
One Actor covers six jobs:

- 🔍 **Search** — apps for any keyword, with Google's own related searches to go past the ~20 apps one search shows
- 📈 **Top charts** — ranked Top free, Top paid and Top grossing lists for any category and country
- 📱 **App details** — 60+ fields per app: installs, rating breakdown, price, release notes, screenshots, developer email, website and legal address
- 🧩 **Similar apps** — the "Similar apps" list Google shows for any app (competitor discovery)
- 🏢 **Developer** — every app a developer publishes
- ⭐ **Reviews** — **no 500-review cap**: every review Google Play serves, with star-rating and date filters

Paste **app IDs or any Google Play link** — links are converted automatically. It's fast — about
**270 apps a minute** with full details and **5,000 reviews in 23 seconds** in our test runs — and
works in **240+ store countries** and 60+ languages.

### 60+ fields for every app, every review

|                   |                                                                                                          |
| ----------------- | -------------------------------------------------------------------------------------------------------- |
| 📱 **App**        | Title, summary, description, category, content rating, version, release date, last update, release notes |
| ⭐ **Ratings**    | Average score, number of ratings and reviews, count for each star (1–5)                                  |
| 📈 **Popularity** | Install range (`10,000,000+`) and minimum installs as a number                                           |
| 💰 **Price**      | Price, currency, sale price, in-app purchase range, ads yes/no                                           |
| 🏢 **Developer**  | Name, developer page, email, website, legal name, address, phone, privacy policy                         |
| 🖼️ **Media**      | Icon, header image, screenshots, promo video                                                             |
| 🔒 **Optional**   | Android permissions and the Data safety section                                                          |
| 💬 **Reviews**    | Text, stars, date, helpful votes, app version, developer reply and reply date                            |

Every app row has the same columns whichever mode found it, so exports from different runs line
up, and Zapier, Make or Sheets can map them from a single sample.

### Pay only for results

| Results | Apps   | Reviews |
| ------- | ------ | ------- |
| 100     | $0.15  | $0.03   |
| 1,000   | $1.50  | $0.30   |
| 10,000  | $15.00 | $3.00   |

- **Errors are free.** An app that can't be found, or an entry that isn't an app ID, gets a row with the reason and is never charged.
- **The start fee is tiny** — Apify's standard $0.00005 per GB of memory, so $0.0001 per run at the default 2 GB.
- **Full details cost the same as list data**, and permissions and Data safety are included.
- **Set a spending limit** with *Maximum cost per run* in the run options. The Actor saves exactly what that budget covers, then stops and says so.
- **Apify residential proxy** adds $2.00 per 1,000 apps (not reviews), because each app page is about 200 KB of residential traffic. You don't need it — the default is no proxy.

### Track rankings, competitors and reviews

- 📈 **Keyword rankings (ASO)** — **Search** with your keywords and *Find more apps with related searches* off: `rank` is the app's position on Google Play for that keyword.
- 🏆 **Category charts** — **Top charts** for your category in each country you care about, up to 200 ranked apps per chart.
- 🕵️ **Competitor research** — **Developer** pulls a rival's whole catalogue; **Similar apps** shows the apps Google recommends next to theirs; **App details** compares their `score`, `ratings`, `installs` and `version`.
- ⭐ **Review monitoring** — **Reviews** of your app or a competitor's, filtered by star rating or date — e.g. only critical reviews from the last week.
- 📇 **Lead generation** — the **Developer contacts** view lists each app's developer email, website, legal name, phone and address.
- 📊 **Market research** — compare installs, ratings, prices and in-app purchases across categories and countries.

### Scrape Google Play in four steps

1. Click **Try for free**.
2. Pick **What to scrape** and fill in its field — keywords, app IDs or links, developers, or charts and categories.
3. Choose the store **Country** and **Language**.
4. Set **Max apps** to 10–20 for a first look, press **Start**, then open the **Output** tab and export.

The app ID is the `id=` part of an app's Google Play link — or just paste the whole link:

```
https://play.google.com/store/apps/details?id=com.spotify.music
                                              ^^^^^^^^^^^^^^^^^
```

### Input settings

| Setting                                       | What it does                                                                                                   | Default             |
| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------- |
| **What to scrape**                            | Search, Top charts, App details, Similar apps, Developer or Reviews                                            | Search              |
| **Search terms**                              | Keywords, one per line                                                                                         | `fitness tracker`   |
| **App IDs or app links**                      | `com.whatsapp`, a Google Play link, or a `market://` link                                                      | —                   |
| **Developers**                                | Developer name as shown on Google Play, numeric developer ID, or developer page link                           | —                   |
| **Charts** / **Chart categories**             | Which ranked lists to scrape; every chart is scraped for every category                                        | Top free × All apps |
| **Max apps**                                  | Apps per search term, chart, developer or app (Similar apps)                                                   | `50`                |
| **Get full app details**                      | All 60+ fields per app; off returns only the list data (title, developer, rating, price, icon) and runs faster | on                  |
| **Find more apps with related searches**      | Go past the ~20 apps one Google search shows (see below)                                                       | on                  |
| **Include app permissions** / **Data safety** | Extra columns, no extra charge                                                                                 | off                 |
| **Max reviews per app**                       | `0` = every review Google Play returns                                                                         | `100`               |
| **Sort reviews by** / **Star rating**         | Newest, most relevant or rating; 1–5 stars, Positive (4–5) or Critical (1–3)                                   | Newest, all         |
| **Only reviews newer than**                   | A date (`2026-10-01`) or a period (`7 days`)                                                                   | —                   |
| **Leave out reviewer names and photos**       | For privacy-sensitive analysis                                                                                 | off                 |
| **Country** / **Language**                    | Store country and text language                                                                                | `us` / `en`         |
| **Proxy**                                     | Leave on no proxy — blocks are handled automatically                                                           | No proxy            |

Search for 100 fitness apps per keyword:

```json
{
    "mode": "search",
    "searchTerms": ["fitness tracker", "workout planner"],
    "maxResults": 100
}
```

Top free and Top grossing, all apps and Finance, in Germany:

```json
{
    "mode": "topCharts",
    "chartCollections": ["top-free", "top-grossing"],
    "chartCategories": ["APPLICATION", "FINANCE"],
    "maxResults": 200,
    "country": "de",
    "language": "de"
}
```

Every critical review of Spotify from the last 30 days:

```json
{
    "mode": "reviews",
    "appIds": ["https://play.google.com/store/apps/details?id=com.spotify.music"],
    "maxReviews": 0,
    "reviewRating": "critical",
    "reviewsNewerThan": "30 days"
}
```

### One clean row per app or review

The **Output** tab has three views — **Apps**, **Developer contacts** and **Reviews**. Here is a
real app record (shortened):

```json
{
    "source": "details",
    "input": "com.whatsapp",
    "rank": null,
    "appId": "com.whatsapp",
    "title": "WhatsApp",
    "url": "https://play.google.com/store/apps/details?id=com.whatsapp&hl=en&gl=us",
    "summary": "Simple. Reliable. Private.",
    "developer": "WhatsApp LLC",
    "developerUrl": "https://play.google.com/store/apps/developer?id=WhatsApp+LLC",
    "score": 4.6241527,
    "ratings": 246550477,
    "reviews": 1945464,
    "histogram1star": 10647604,
    "histogram5star": 201595083,
    "installs": "10,000,000,000+",
    "minInstalls": 10000000000,
    "priceText": "Free",
    "offersIAP": true,
    "IAPRange": "$0.40 - $199.99 per item",
    "genre": "Communication",
    "contentRating": "Everyone",
    "containsAds": false,
    "version": "2.26.41.77",
    "released": "Oct 18, 2010",
    "updatedAt": "2026-10-26T22:10:03.000Z",
    "developerEmail": "android@support.whatsapp.com",
    "developerWebsite": "http://www.whatsapp.com/",
    "developerLegalName": "Meta Platforms, Inc.",
    "developerLegalAddress": "1 Meta Way, Menlo Park, CA 94025-1444, United States",
    "country": "us",
    "language": "en",
    "detailLevel": "full",
    "error": null
}
```

And a real review:

```json
{
    "appId": "com.whatsapp",
    "reviewId": "beb1ff53-5954-4448-9dca-7ff9c66b79be",
    "reviewUrl": "https://play.google.com/store/apps/details?id=com.whatsapp&reviewId=beb1ff53-5954-4448-9dca-7ff9c66b79be",
    "userName": "Daniel Mutum",
    "score": 2,
    "text": "Please add an option to permanently hide Status updates from specific people…",
    "date": "2026-10-27T14:55:07.987Z",
    "thumbsUp": 0,
    "appVersion": "2.26.41.77",
    "replyText": null,
    "replyDate": null,
    "country": "us",
    "language": "en",
    "error": null
}
```

`source`, `input` and `rank` say where each app came from — which search term, chart, developer
or app, and its position there.

### Get past Google's 20-apps-per-search limit

**Google Play shows only about 20 apps per search, with no further pages.** Ask Google for 200
"photo editor" apps and you get about 20.

With **Find more apps with related searches** on (the default), the Actor keeps going the way a
person would: it runs the search again with Google's free/paid filters, then runs Google Play's
own autocomplete suggestions for your term — "photo editor app", "photo editor free", and so on —
until it reaches **Max apps**. In a test run, "photo editor" returned **142 apps (21 from the
search itself, 121 from related searches)**.

- `rank` is the order apps were found in: the search's own results first, in Google's order, then the extras.
- `matchedQuery` shows which search found each app.
- For keyword-rank tracking, turn it off to get exactly what Google shows for that keyword.

To go wider, add more search terms — each gets its own results and related searches. Top charts
have a ceiling too: **200 apps per chart**, fewer in small categories; add more categories to
cover more.

### Send results anywhere, on a schedule

Results don't have to stay on Apify. Without writing any code you can:

- **Send results to Google Sheets or Slack** — pick the integration on the Actor's Integrations tab and every run delivers automatically.
- **Connect anything else via Zapier or Make**, triggered when a run finishes.
- **Fire a webhook** to your own server the moment a run completes.
- **Pull the data over the API** in JSON, CSV, Excel or XML.

**Run it on a schedule.** Save your settings as a task, give it a schedule, and send the output to
a sheet or Slack:

| How often | Setup                                                         | What you get                                                                              |
| --------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| Daily     | **Reviews**, *Only reviews newer than* `2 days`, newest first | Each day's new reviews — it stops at the first older review, so you only pay for new ones |
| Weekly    | **Search** with your keywords, related searches off           | Your keyword rankings, week by week                                                       |
| Weekly    | **Top charts** for your category and countries                | Chart positions over time                                                                 |
| Monthly   | **App details** for your competitors                          | Changes in rating, installs, version and price                                            |

Why `2 days` for a daily run: Google Play shows reviews 24 hours after they're written, so each
run picks up the day that has just become visible. Every app keeps the same `appId` and every
review the same `reviewId`, so you can match each run against the last one to spot rank changes,
rating drops, new versions and new reviews.

### Good to know

- **No proxy needed.** If Google Play blocks the run, it switches to Apify datacenter proxy automatically, at no extra cost.
- **Any public app works.** Google's official API only covers apps you own.
- **Small apps may have no rating.** Google hides the score until an app has enough ratings.
- **Text follows your language setting.** To compare across languages, use `minInstalls`, `updatedAt` and `genreId`.
- **Developer names must match exactly.** When unsure, paste the developer page link instead.
- **Reviews appear after 24 hours.** Google Play's public review feed runs a day behind, so the newest reviews are about a day old.
- **Few or no reviews?** Check the country, star rating and date filters.
- **Errors are explained and free.** The app may be removed, unavailable in that country, or misspelled.
- **Interrupted runs pick up where they stopped.** Server restarts are handled automatically, and *Resurrect* continues a stopped run — nothing is lost or saved twice.
- **Faster app runs with more memory.** About 270 apps/min at the default 2 GB, 350 at 4 GB. Your price per app stays the same.
- **Privacy option.** Turn on *Leave out reviewer names and photos* if you don't need them.

### 📮 Support and custom scrapers

Bugs, feature requests, or custom scraping work — open an issue on Apify, email
alkausarimujahid@gmail.com, or visit my website [ayzalsoft.com](https://ayzalsoft.com).

# Actor input Schema

## `mode` (type: `string`):

Search: apps for keywords. Top charts: ranked Top free / Top paid / Top grossing lists. App details: specific apps. Similar apps: the "Similar apps" list of each app. Developer: every app by a developer. Reviews: user reviews of specific apps.

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

Used in Search mode. One keyword or phrase per line, e.g. "fitness tracker" or "photo editor".

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

Used in App details, Similar apps and Reviews modes. Paste app IDs (com.whatsapp) or any Google Play app link (https://play.google.com/store/apps/details?id=com.whatsapp) — links are reduced to the app ID automatically.

## `developers` (type: `array`):

Used in Developer mode. A developer name exactly as shown on Google Play (WhatsApp LLC), a numeric developer ID, or a developer page link.

## `chartCollections` (type: `array`):

Used in Top charts mode. Pick one or more.

## `chartCategories` (type: `array`):

Used in Top charts mode. Each chart is scraped for each category, e.g. Top free × (All apps, Finance) gives two ranked lists.

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

How many apps to return for each search term, chart, developer, or (in Similar apps mode) each app. Google Play charts list up to about 200 apps.

## `fullDetails` (type: `boolean`):

On: every app gets all 60+ fields (installs, rating breakdown, developer contacts, screenshots, release notes…) — the same as App details mode. Off: lists return only the basics Google shows in the list (title, developer, rating, price, icon), which is faster. The price per app is the same either way.

## `expandSearch` (type: `boolean`):

Google Play shows only about 20 apps per search. When "Max apps" is higher, the Actor also runs Google Play's own related searches (its autocomplete suggestions for your term, e.g. "fitness tracker app") until it has enough apps. Each app's matchedQuery shows which search found it. Search mode only.

## `includePermissions` (type: `boolean`):

Adds the Android permissions each app requests. One extra small request per app; no extra charge.

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

Adds the app's Data safety section: data shared, data collected (with purposes) and security practices. One extra small request per app; no extra charge.

## `maxReviews` (type: `integer`):

How many reviews to collect for each app. 0 = every review Google Play returns (can be tens of thousands for popular apps).

## `reviewSort` (type: `string`):

Newest first is required for the "Only reviews newer than" filter to stop early.

## `reviewRating` (type: `string`):

Only collect reviews with this rating.

## `reviewsNewerThan` (type: `string`):

Skip reviews older than this date — handy for scheduled runs that only need what is new. A date (2026-10-01) or a period (7 days, 2 weeks, 3 months). Google Play shows reviews 24 hours after they're written, so for a daily run use 2 days. Leave empty for all dates.

## `anonymizeReviewers` (type: `boolean`):

Saves reviews without the reviewer name and profile photo, for privacy-sensitive analysis.

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

The Google Play store country. It decides which apps are available, chart rankings, prices and currency, and which reviews are shown.

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

Language of app descriptions, release notes and text fields. Reviews are mostly in the language of the store country.

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

Leave on 'no proxy': it is the fastest and cheapest option, and if Google Play refuses the run, the Actor continues through Apify datacenter proxy automatically at no extra charge. Choose Apify residential proxy only if you need it — it adds a surcharge per app (not per review), because each app page is about 200 KB of residential traffic.

## `autoProxyFallback` (type: `boolean`):

Only applies when running without a proxy. Leave this on: blocked requests are retried through Apify datacenter proxy at no extra charge. Off: blocked inputs are saved with an error instead.

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

How many Google Play pages to load at the same time. 10 is fast and safe; lower it if you see many blocked requests.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "fitness tracker"
  ],
  "appIds": [
    "com.whatsapp",
    "https://play.google.com/store/apps/details?id=com.spotify.music"
  ],
  "developers": [
    "WhatsApp LLC",
    "https://play.google.com/store/apps/dev?id=5700313618786177705"
  ],
  "chartCollections": [
    "top-free"
  ],
  "chartCategories": [
    "APPLICATION"
  ],
  "maxResults": 20,
  "fullDetails": true,
  "expandSearch": true,
  "includePermissions": false,
  "includeDataSafety": false,
  "maxReviews": 100,
  "reviewSort": "newest",
  "reviewRating": "all",
  "anonymizeReviewers": false,
  "country": "us",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "autoProxyFallback": true,
  "maxConcurrency": 10
}
```

# Actor output Schema

## `apps` (type: `string`):

No description

## `contacts` (type: `string`):

No description

## `reviews` (type: `string`):

No description

## `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 = {
    "mode": "search",
    "searchTerms": [
        "fitness tracker"
    ],
    "appIds": [
        "com.whatsapp",
        "https://play.google.com/store/apps/details?id=com.spotify.music"
    ],
    "developers": [
        "WhatsApp LLC",
        "https://play.google.com/store/apps/dev?id=5700313618786177705"
    ],
    "chartCollections": [
        "top-free"
    ],
    "chartCategories": [
        "APPLICATION"
    ],
    "maxResults": 20,
    "maxReviews": 100,
    "country": "us",
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alkausari_mujahid/google-play-store-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 = {
    "mode": "search",
    "searchTerms": ["fitness tracker"],
    "appIds": [
        "com.whatsapp",
        "https://play.google.com/store/apps/details?id=com.spotify.music",
    ],
    "developers": [
        "WhatsApp LLC",
        "https://play.google.com/store/apps/dev?id=5700313618786177705",
    ],
    "chartCollections": ["top-free"],
    "chartCategories": ["APPLICATION"],
    "maxResults": 20,
    "maxReviews": 100,
    "country": "us",
    "language": "en",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("alkausari_mujahid/google-play-store-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 '{
  "mode": "search",
  "searchTerms": [
    "fitness tracker"
  ],
  "appIds": [
    "com.whatsapp",
    "https://play.google.com/store/apps/details?id=com.spotify.music"
  ],
  "developers": [
    "WhatsApp LLC",
    "https://play.google.com/store/apps/dev?id=5700313618786177705"
  ],
  "chartCollections": [
    "top-free"
  ],
  "chartCategories": [
    "APPLICATION"
  ],
  "maxResults": 20,
  "maxReviews": 100,
  "country": "us",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call alkausari_mujahid/google-play-store-scraper --silent --output-dataset

```

## MCP server setup

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