# Google Play Store Scraper - Reviews, Apps, Developer Email (`om_kh/google-play-store-scraper`) Actor

Google Play scraper: app details (exact installs, rating histogram, developer email, website, price) and reviews with filters by rating, date, language, device, version and keyword. Any country. $1.50 per 1,000 apps, $0.10 per 1,000 reviews, no start fee.

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

## Pricing

Pay per event

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 Store Scraper — Reviews, Apps, Developer Email

> Scrape **Google Play apps** by app ID, URL or **keyword search**: **exact installs**, rating
> and 1-5 star histogram, number of ratings and reviews, **developer email, website and
> address**, price, ads, in-app purchases, content rating, release and update dates,
> description and screenshots — plus the app's **reviews**, filtered by rating, date, language,
> device, version or keyword. Any country and language. **$1.50 per 1,000 apps, $0.10 per 1,000 reviews, no start fee.**

### Free tier — 20 results free on every run

**The first 20 results of every run are free**, on every run you ever make — not a one-off trial. One guard: the free allowance never covers more than half of a run, so the offer stays sustainable.

### What does this Google Play scraper do?

Give it app IDs (`com.spotify.music`), Play Store links, or keywords (`budget tracker`).
For keywords it runs Google Play's own search and returns up to 30 apps per keyword. Every
app comes back as **one row with the full details** — no second run needed.

### Measured, not promised

Test of 17 October 2026: Spotify, Duolingo and Uber, the 500 newest US reviews of each.

Both tools ran the same three apps on the same evening.

| | Google Play Store Scraper (om_kh) | neatrat/google-play-store-reviews-scraper (most used) |
|---|---|---|
| Reviews returned | 1,500 of 1,500 | 1,500 of 1,500 |
| App version | 1,312 | 1,308 |
| Developer's reply | **72** | not returned |
| App details (installs, rating, version...) | **in the same run** | no |
| Runs needed | **1** for the three apps | 3, one per app |
| Time | 61 s, app pages included | about 3 s per app |
| Cost | **$0.15** reviews + $0.005 app pages | $0.20 |
| Runs that succeed, last 30 days (Store figure) | **100%** (15 of 15) | 87% (9,632 of 11,094) |

### Compared with neatrat/google-play-store-reviews-scraper

Read on the Store on 2026-10-23 (Google Play Store Reviews Scraper). Where it does better, this section says so.

- **Built on the site's own data**, not a resold scraper: no second Actor between you and the source.
- **Free results on every run** and a hard cost cap (`maxTotalChargeUsd`).
- **Price:** $1.5 per 1,000 here, $0.15 there.

### Why use it

1. **Exact installs.** `realInstalls` (e.g. 3,138,275,576) instead of only the "1B+" bucket.
2. **Developer contacts for B2B.** Developer email, website, address and privacy policy —
   ideal to prospect app publishers.
3. **Rating histogram.** Count of 1 to 5-star ratings, for quality analysis.
4. **Search + details in one run.** Keyword search returns full details directly.
5. **Cheaper than the leader:** $0.0015 per app, no start fee, up to 20 free apps per run
   (at most half of the run).
6. **API, n8n, Make, Zapier and MCP ready.**

### How to use it in 3 steps

1. Click **Try for free** — two apps and one keyword are prefilled.
2. Add your app IDs, links or keywords; choose the country and language.
3. Click **Start** and download JSON, CSV or Excel.

### Input

| Field | What it does |
|---|---|
| `apps` | App IDs or Google Play URLs. |
| `searchTerms` | Optional keywords (up to 20); up to 30 apps each. |
| `maxAppsPerSearch` | 1 to 30. Default 30. |
| `country` | Store country, e.g. `us`, `gb`, `fr`. Default `us`. |
| `language` | Text language, e.g. `en`, `fr`. Default `en`. |
| `maxReviewsPerApp` | Reviews to read per app, 0 to 100,000. Default 0 (no reviews). |
| `reviewsOnly` | Return only the reviews, without the app row. |
| `reviewsSort` | `newest` (default), `mostRelevant` or `rating`. |
| `reviewRatings` | Keep only these star ratings, e.g. `["1", "2"]`. |
| `reviewLanguages` | Languages to read reviews in, e.g. `["en", "fr"]`. |
| `reviewKeywords` | Keep only reviews containing one of these words. |
| `reviewsSince` / `reviewsUntil` / `recentDays` | Date limits. With `newest` the read stops at the limit. |
| `deviceType` | `mobile`, `tablet`, `chromebook` or `tv`. |
| `appVersions` | Keep only reviews written on these app versions. |
| `includeSimilarApps` | Add `similarAppIds` to each app row. |
| `maxTotalChargeUsd` | Optional hard cost cap for the run. |

#### Reviews

Set `maxReviewsPerApp` to get one row per review: `reviewId`, `appId`, `userName`, `userImage`, `text`, `score` (1 to 5), `thumbsUp`, `appVersion`, `date`, the developer's `replyText` and `replyDate`, and a direct `url`. Reviews cost **$0.10 per 1,000**.

```json
{
  "apps": ["com.duolingo"],
  "reviewsOnly": true,
  "maxReviewsPerApp": 5000,
  "reviewRatings": ["1", "2"],
  "reviewsSince": "2026-09-01"
}
```

```json
{
  "searchTerms": ["budget tracker", "habit tracker"],
  "maxAppsPerSearch": 30,
  "country": "us",
  "language": "en"
}
```

### Output

Real example (description and screenshots trimmed):

```json
{
  "appId": "com.spotify.music",
  "title": "Spotify: Music and Podcasts",
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=us",
  "developer": "Spotify AB",
  "developerEmail": "support@spotify.com",
  "developerWebsite": "https://www.spotify.com",
  "privacyPolicy": "https://www.spotify.com/legal/privacy-policy/",
  "genre": "Music & Audio",
  "score": 4.345,
  "ratings": 36403295,
  "reviews": 1854615,
  "histogram": {"1": 3725706, "2": 1067915, "3": 1312250, "4": 3102037, "5": 27195371},
  "installs": "1,000,000,000+",
  "realInstalls": 3138275576,
  "free": true,
  "offersIAP": true,
  "inAppProductPrice": "$4.99 - $203.88 per item",
  "containsAds": true,
  "contentRating": "Teen",
  "released": "May 27, 2014",
  "updatedAt": "2026-09-29T14:38:09Z",
  "country": "us",
  "status": "ok"
}
```

In a live test, 22 apps (2 IDs + the keyword "budget tracker") came back in 11 seconds,
all 22 with a developer email.

### How much does it cost?

| Event | Price |
|---|---|
| App (full details) | **$0.0015** ($1.50 per 1,000) |
| Start fee | none |

An app that does not exist in the chosen country is reported and never charged. Paid Apify
plans get lower tier prices.

### Use cases

- **B2B prospecting** — lists of app publishers in a niche with their email and website.
- **App market research** — installs, ratings and monetization of competitors.
- **ASO** — who ranks for a keyword, with rating and update frequency.
- **Investors and analysts** — track installs and ratings over time with schedules.

### Use it from code (API)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/google-play-store-scraper").call(run_input={
    "searchTerms": ["budget tracker"],
    "country": "us",
})
for app in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(app["title"], app["realInstalls"], app["score"], app["developerEmail"])
```

```bash
curl -X POST "https://api.apify.com/v2/acts/om_kh~google-play-store-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"apps": ["com.spotify.music"]}'
```

### Integrations and MCP

Send new apps and contacts to Google Sheets, HubSpot or Airtable with the Apify app in n8n,
Make or Zapier. AI agents can call it through `https://mcp.apify.com` as
`om_kh/google-play-store-scraper`.

### Tips and limits

- Google Play search returns at most 30 apps per keyword; use several keywords for more.
- Some fields (price, availability, texts) depend on `country` and `language`.
- For app **reviews**, use the related App Store & Google Play Reviews Scraper below.

### FAQ

**Do I need a Google account or API key?** No.

**Where does the developer email come from?** From the app's public store listing, where
Google requires developers to publish a contact email.

**Is it legal?** It reads public store listings. Use contact details in line with the
anti-spam law that applies to you.

### Related Actors

- [App Store & Google Play Reviews Scraper - Ratings](https://apify.com/om_kh/app-store-google-play-reviews-scraper) — the reviews of these apps.
- [App Store Reviews API - Ratings, Text, Any App](https://apify.com/om_kh/appstore-reviews-api) — iOS reviews.
- [Business Email Finder API - Verify, Score, Confidence](https://apify.com/om_kh/vigia-lead-quality-api) — more contacts from the developer website.

### Your feedback

Did this Actor save you time? A short review on the **Reviews** tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the **Issues** tab: it is answered and fixed fast.

# Actor input Schema

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

App IDs (com.spotify.music) or Google Play URLs, one per line.

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

Optional keywords; each returns up to 30 apps from Google Play search, with full details (up to 20 keywords).

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

1 to 30. Default 30.

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

Two-letter store country, e.g. us, gb, fr, de, in. Default us.

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

Two-letter language for texts, e.g. en, fr, es. Default en.

## `maxReviewsPerApp` (type: `integer`):

How many reviews to read for each app (0 to 100,000). 0: no reviews. $0.10 per 1,000 reviews.

## `reviewsOnly` (type: `boolean`):

Return only the reviews, without the app details row.

## `reviewsSort` (type: `string`):

Google Play's own order.

## `reviewRatings` (type: `array`):

Keep only reviews with these ratings. Empty: all ratings.

## `reviewLanguages` (type: `array`):

Two-letter languages to read reviews in: en, fr, de... Google Play groups reviews by language. Empty: the language set above.

## `reviewKeywords` (type: `array`):

Keep only reviews that contain at least one of these words.

## `reviewsSince` (type: `string`):

YYYY-MM-DD. Keep only reviews from this day on. With Newest first the read stops there.

## `reviewsUntil` (type: `string`):

YYYY-MM-DD. Keep only reviews up to this day.

## `recentDays` (type: `integer`):

Keep only reviews from the last N days. 0 or empty: no limit.

## `deviceType` (type: `string`):

Reviews written from this kind of device.

## `appVersions` (type: `array`):

Keep only reviews written on these app versions (a prefix works: 2.26 matches 2.26.38.73).

## `includeSimilarApps` (type: `boolean`):

Add to each app the IDs of the other apps Google Play shows on its page (similar apps and more by the developer).

## `maxTotalChargeUsd` (type: `number`):

Optional hard cost cap for this run.

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music",
    "https://play.google.com/store/apps/details?id=com.duolingo"
  ],
  "searchTerms": [
    "budget tracker"
  ],
  "maxAppsPerSearch": 10,
  "country": "us",
  "language": "en",
  "maxReviewsPerApp": 0,
  "reviewsOnly": false,
  "reviewsSort": "newest",
  "deviceType": "",
  "includeSimilarApps": false
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, and source issues.

## `results` (type: `string`):

Apps in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

## `runSummary` (type: `string`):

Machine-readable delivery, billing, and source diagnostics.

# 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.duolingo"
    ],
    "searchTerms": [
        "budget tracker"
    ],
    "maxAppsPerSearch": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/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 = {
    "apps": [
        "com.spotify.music",
        "https://play.google.com/store/apps/details?id=com.duolingo",
    ],
    "searchTerms": ["budget tracker"],
    "maxAppsPerSearch": 10,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,om_kh/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/d2cKsA9xxofcewLVL/builds/kcYkBJnMuDwBMz360/openapi.json
