# Google Play Scraper (`scrapers-hub/google-play-scraper`) Actor

Google Play Scraper collects Android app data, reviews, search results, app URLs and similar apps with country targeting and pagination. 🤖 Built for ASO research, competitor benchmarking and app store review mining.

- **URL**: https://apify.com/scrapers-hub/google-play-scraper.md
- **Developed by:** [Scrapers Hub](https://apify.com/scrapers-hub) (community)
- **Categories:** Developer tools, SEO tools, Other
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Scraper – Scrape App Data, Reviews, Search Results & ASO Keywords

The **Google Play Scraper** extracts complete app data from the Google Play Store — app details, user reviews, keyword search results, and similar-app recommendations. Use it to **scrape Google Play Store apps and reviews** for ASO research, competitor analysis, and app market intelligence, returning up to 61 structured fields per record. 📱

No API key, no Google account, no SDK. Pick a mode, give it an app ID or a keyword, and the Actor returns clean JSON you can export to CSV, Excel, or feed straight into a dashboard.

***

### 📊 What Data Can You Extract with This Google Play Scraper?

This Google Play Store scraper covers **four different data types** in a single Actor:

| Mode | What It Returns |
|---|---|
| 💬 **`scrapeReviews`** | Full user reviews: text, score, reviewer name, date, thumbs-up count, app version, developer reply |
| 📱 **`scrapeAppUrls`** | Complete app listings: description, installs, ratings histogram, pricing, developer contact, media assets |
| 🔍 **`scrapeAppSearch`** | Keyword search results — which apps rank for your target ASO terms |
| 🔗 **`scrapeSimilarApps`** | Google Play's own "similar apps" recommendations for competitive mapping |

| Data Category | Fields You Get |
|---|---|
| 📈 **Install & Rating Metrics** | `installs`, `minInstalls`, `maxInstalls`, `ratings`, `reviews`, `histogram` |
| 💰 **Monetisation** | `price`, `priceText`, `free`, `currency`, `offersIAP`, `adSupported`, `isAvailableInPlayPass` |
| 🏢 **Developer Intelligence** | `developer`, `developerId`, `developerEmail`, `developerWebsite`, `developerAddress`, `privacyPolicy` |
| 🎨 **Store Listing Creative** | `icon`, `headerImage`, `screenshots`, `video`, `videoImage`, `previewVideo` |
| 📝 **ASO Text** | `description`, `descriptionHTML`, `summary`, `recentChanges`, `searchKeyword` |
| ⚙️ **Technical & Compliance** | `androidVersion`, `androidMaxVersion`, `contentRating`, `contentRatingDescription`, `genre`, `categories` |

***

### 🌟 Key Features of the Google Play Store Scraper

| Feature | Description |
|---|---|
| 🔀 **Four Scraping Modes** | Reviews, app details, keyword search, and similar apps — all in one Actor. |
| 💬 **Full Review Extraction** | Review text, star score, reviewer name and avatar, date, thumbs-up count, and app version. |
| ↩️ **Developer Replies** | Capture `replyText` and `replyDate` to measure how a developer handles feedback. |
| 🔍 **ASO Keyword Search** | Search Google Play by keyword to see which apps rank for your target terms. |
| 📊 **Install & Rating Histogram** | Min/max installs, total ratings, and the full 1–5 star distribution. |
| 🏢 **Developer Contact Data** | Developer name, ID, email, website, and physical address for B2B lead research. |
| 🖼️ **Complete Media Assets** | Icon, header image, screenshots, promo video, and preview video URLs. |
| 📄 **Cursor Pagination** | Resume long review pulls with `cursor` instead of restarting from scratch. |
| 🌍 **Country Storefronts** | Target any Google Play country for region-accurate pricing and availability. |

***

### 🚀 Why Choose This Google Play Scraper?

**Four tools in one.** Most Play Store scrapers do reviews *or* app details *or* search. This Actor covers all four modes, so a complete ASO workflow — find apps by keyword, pull their listings, read their reviews, map their competitors — runs through a single integration.

**Developer contact data included.** `developerEmail`, `developerWebsite`, and `developerAddress` are exposed on Play Store listings but rarely captured by scrapers. For agencies selling to app publishers, that's a qualified lead list.

**Resumable review pulls.** Apps with hundreds of thousands of reviews don't fit in one run. The `cursor` field lets you continue exactly where the previous run stopped, rather than starting over.

**No API key or SDK.** Google's official Play Developer API only works for apps you own. This scraper reads public listings, so you can research any app on the store.

***

### 📥 Input

**Reviews mode:**

```json
{
  "action": "scrapeReviews",
  "scrapeReviews.appId": "com.rockstargames.gtasa",
  "scrapeReviews.country": "us",
  "count": 200
}
```

**Keyword search mode (ASO):**

```json
{
  "action": "scrapeAppSearch",
  "scrapeAppSearch.keywords": ["trading", "stocks", "investing"],
  "scrapeAppSearch.country": "us",
  "count": 100
}
```

#### 🔧 Google Play Scraper Input Fields

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `action` | `string` | ✅ Yes | `scrapeReviews` | Mode: reviews, app URLs, app search, or similar apps. |
| `scrapeReviews.appId` | `string` | ❌ No | `com.rockstargames.gtasa` | Google Play package name to pull reviews for. |
| `scrapeReviews.country` | `string` | ❌ No | – | Country storefront for reviews. |
| `scrapeAppSearch.keywords` | `array` | ❌ No | – | Keywords to search the Play Store with. |
| `scrapeAppSearch.country` | `string` | ❌ No | – | Country storefront for search. |
| `scrapeAppUrls.urls` | `array` | ❌ No | – | Direct Google Play app URLs for full details. |
| `scrapeSimilarApps.urls` | `array` | ❌ No | – | App URLs to find similar/recommended apps for. |
| `count` | `integer` | ❌ No | – | Total records to return. |
| `cursor` | `string` | ❌ No | – | Resume token to continue a previous run. |

***

### 📤 Output

Review mode returns one item per review. Real sample from an actual run:

```json
{
  "id": "d838931a-eb69-46df-9cdb-73bd4942949d",
  "userName": "Isael Gutierrez",
  "score": 5,
  "scoreText": "5",
  "text": "I love it",
  "date": "2026-08-10T03:06:09.000Z",
  "version": "2.11.311",
  "thumbsUp": 0,
  "replyText": null,
  "replyDate": null,
  "url": "https://play.google.com/store/apps/details?id=com.rockstargames.gtasa"
}
```

#### 🧾 Google Play Review Output Fields

| Field | Description |
|---|---|
| `id` / `userName` / `userImage` | Review ID and reviewer identity. |
| `score` / `scoreText` | Star rating as number and as text. |
| `text` / `title` | Review body and headline. |
| `date` | When the review was posted. |
| `thumbsUp` | How many users found it helpful. |
| `version` | App version the review refers to. |
| `replyText` / `replyDate` | Developer's response and its date. |
| `criterias` | Category-specific rating criteria where Google collects them. |

#### 🧾 Google Play App Detail Output Fields

| Field | Description |
|---|---|
| `appId` / `url` | Package name and Play Store URL. |
| `description` / `descriptionHTML` / `summary` | Full listing copy — the core ASO text. |
| `installs` / `minInstalls` / `maxInstalls` | Install count ranges. |
| `ratings` / `reviews` / `histogram` | Total ratings, review count, and star distribution. |
| `price` / `free` / `currency` / `priceText` / `offersIAP` | Monetisation model and in-app purchases. |
| `developer` / `developerId` / `developerEmail` / `developerWebsite` / `developerAddress` | Publisher identity and contact details. |
| `genre` / `genreId` / `categories` | Play Store category taxonomy. |
| `icon` / `headerImage` / `screenshots` / `video` / `previewVideo` | Store listing creative assets. |
| `androidVersion` / `androidMaxVersion` / `contentRating` / `adSupported` | Compatibility and content flags. |
| `released` / `updated` / `recentChanges` | Launch date, last update, and changelog. |
| `privacyPolicy` / `preregister` / `earlyAccessEnabled` | Compliance and release-state flags. |
| `searchKeyword` | The keyword that surfaced this app in search mode. |

***

### 💻 How to Use the Google Play Scraper (Step by Step)

#### Step 1: Choose Your Scraping Mode

Decide what you actually need. `scrapeAppSearch` for ASO keyword research, `scrapeReviews` for user feedback, `scrapeAppUrls` for competitor listings, `scrapeSimilarApps` for market mapping.

#### Step 2: Find the App ID or Package Name

The app ID is the string after `id=` in any Play Store URL. For `play.google.com/store/apps/details?id=com.spotify.music`, the app ID is `com.spotify.music`.

#### Step 3: Set Your Country Storefront

Pricing, availability, ratings, and even which apps rank all vary by country. Set the country field for the market you're researching, not the one you happen to be sitting in.

#### Step 4: Control Result Volume

`count` caps how many records come back. For review pulls on popular apps, start at 200 to confirm the shape before scaling up.

#### Step 5: Run the Google Play Scraper

Click **Start**. Results stream into the dataset as they're parsed, so you can inspect early output while the run continues.

#### Step 6: Export Your Google Play Data

Export as JSON, CSV, Excel, or XML from the **Storage** tab, or pull results via the Apify API.

#### Step 7: Resume or Schedule for Ongoing ASO Tracking

For very large review sets, save the returned `cursor` and pass it into the next run to continue. For rank tracking, schedule `scrapeAppSearch` weekly with a fixed keyword list and watch positions shift.

***

### 🔌 API Access & Integrations

**Scrape Google Play reviews in one call:**

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers-hub~google-play-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"scrapeReviews","scrapeReviews.appId":"com.spotify.music","count":200}'
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("scrapers-hub/google-play-scraper").call(run_input={
    "action": "scrapeAppSearch",
    "scrapeAppSearch.keywords": ["budget tracker", "expense manager"],
    "count": 100,
})

for app in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(app.get("searchKeyword"), app.get("appId"), app.get("installs"))
```

Route Google Play data into **Google Sheets, Slack, Zapier, Make, Airbyte, or a webhook** through the standard Apify integrations.

***

### 💡 Best Use Cases for Google Play Store Data

#### 🔝 App Store Optimization (ASO)

Run `scrapeAppSearch` across your keyword list and record which apps rank for each term. Then pull those apps' `description` and `summary` to see exactly which words the winners are using. `searchKeyword` ties each result back to the query that surfaced it, so you can build a keyword-to-ranking matrix.

#### 💬 User Feedback & Bug Mining

Export thousands of reviews and cluster the text. Filtering by `version` shows whether complaints spiked after a specific release — one of the fastest ways to connect a rating drop to a shipped change.

#### 🥊 Competitor Tracking

Monitor a rival's `installs`, `ratings`, `histogram`, and `updated` date on a schedule. Rising install bands paired with a falling rating is a very specific story about growth outpacing quality.

#### 📊 App Market Research

Scrape an entire category to measure saturation, free-versus-paid split, IAP adoption, and average rating. `contentRating` and `adSupported` add monetisation context most datasets miss.

#### 🤝 Developer Lead Generation

`developerEmail`, `developerWebsite`, and `developerAddress` from public listings make a targeted prospect list for agencies selling ASO, monetisation, or QA services to app publishers.

#### 🎨 Creative & Listing Benchmarking

Pull `screenshots`, `icon`, `headerImage`, and `previewVideo` for the top apps in a genre to see what the current visual conventions actually are before you brief a designer.

#### 🤖 AI & Sentiment Datasets

Review text paired with a numeric `score` is a pre-labelled sentiment corpus. `thumbsUp` gives you a natural relevance weight for surfacing the reviews that matter most.

***

### ⚙️ Tips for Better Google Play Scraping Results

- **Match country to market.** Rankings and pricing differ substantially between storefronts.
- **Use `version` in review analysis.** Grouping reviews by app version is the fastest path from "our rating dropped" to "this release broke something".
- **Batch keywords in search mode.** `scrapeAppSearch.keywords` takes a list — one run can cover a whole keyword set.
- **Save the cursor.** For apps with huge review counts, cursor-resumed runs are far cheaper than restarting.
- **Watch `histogram`, not just the average.** A 4.2 built from 5s and 1s is a very different product from a 4.2 built from 4s.
- **Scrape descriptions before competitors update them.** Listings change often; a periodic snapshot builds a useful ASO history.

***

### 🛠️ Troubleshooting

**My review run returns fewer than `count`.**
The app may not have that many reviews in the selected storefront, or Google's pagination ended. Try a different country or lower the count.

**`replyText` is always null.**
That developer doesn't respond to reviews. It's a real finding — and often a competitive opening.

**Search results don't match what I see in the app.**
Google personalises Play Store results by device, account, and location. Scraper results reflect a clean, unpersonalised storefront view.

**`developerEmail` is missing.**
Not every developer publishes a contact email. Google requires it for some account types but not all.

**The app ID doesn't work.**
Use the package name (`com.example.app`), not the app's display name and not the full URL.

***

### ❓ Frequently Asked Questions About Google Play Scraping

**How do I scrape Google Play Store reviews?**
Set `action` to `scrapeReviews`, enter the app's package name in `scrapeReviews.appId`, and run. Each review returns with score, text, date, version, and any developer reply.

**Can I find apps by keyword for ASO research?**
Yes. Use `scrapeAppSearch` with your keyword list — results include the `searchKeyword` that matched, so you can build a keyword-to-app ranking dataset.

**What is the Google Play app ID?**
It's the package name in the Play Store URL — e.g. `com.rockstargames.gtasa` in `play.google.com/store/apps/details?id=com.rockstargames.gtasa`.

**Do I need a Google Play API key?**
No. The Actor reads publicly available Play Store pages, so no API key or developer account is required.

**Can I scrape reviews from a specific country?**
Yes, set `scrapeReviews.country` to the storefront code you want.

**How many Google Play reviews can I scrape?**
There's no fixed cap. Use `count` to set the volume, and `cursor` to resume across multiple runs for very large review sets.

**Can I get the install count for an app?**
Yes — `installs` gives the display string, while `minInstalls` and `maxInstalls` give the numeric band Google reports.

**Does it return the full rating histogram?**
Yes. `histogram` breaks ratings down by star level, which is far more informative than the average alone.

**Can I scrape similar or competing apps?**
Yes. Use `scrapeSimilarApps` with app URLs to get Google's own recommendation graph.

**Can I get developer contact details?**
Yes — `developerEmail`, `developerWebsite`, and `developerAddress` are captured where the developer publishes them.

**Can I track how my app's rating changes over time?**
Schedule the Actor to run `scrapeAppUrls` on your listing daily and store each snapshot. `ratings`, `reviews`, and `histogram` give you the trend.

**Does it scrape Google Play games differently from apps?**
No — games are listings like any other, and the same fields apply.

**What export formats are supported?**
JSON, CSV, Excel, XML, plus direct API access and integrations with Google Sheets, Zapier, Make, and Slack.

**Is scraping Google Play legal?**
The Actor reads only publicly accessible Play Store pages. Review data contains personal names and opinions, so privacy regulations apply to storage and processing. See the disclaimer.

***

### 🆘 Support & Feedback

💬 Need another Play Store field or a new scraping mode? Open a ticket in the **Issues** tab of this Actor.

📩 For custom ASO datasets, high-volume app intelligence, or dedicated support, email **<scraperhubapi@gmail.com>**.

⭐ If this Google Play scraper is useful, a review helps other developers and ASO teams find it.

***

### ⚖️ Disclaimer

This Google Play scraper collects data exclusively from **publicly accessible** Google Play Store listings and review pages. It does not access private accounts, the Play Console, or content behind a login. Review data contains personal names and opinions — handle it in line with GDPR, CCPA, and other privacy regulations, and with Google Play's terms of service. App descriptions and creative assets remain the property of their developers.

For data removal requests, contact **<scraperhubapi@gmail.com>**. Use this scraper responsibly, ethically, and only for legitimate research or business purposes.

# Actor input Schema

## `action` (type: `string`):

Actor will decide what kind of data it needs to scrape and from where it should scrape it based on selected action

## `scrapeReviews.appId` (type: `string`):

The Google Play id of the application (the ?id= parameter on the url).

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

The country code to scrape reviews from. Eg: us, in, de

## `scrapeAppSearch.keywords` (type: `array`):

Search terms to look up on the Play Store.

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

The country code to scrape apps from. Eg: us, in, de

## `scrapeAppUrls.urls` (type: `array`):

Play Store app detail page URLs (or bare package ids) to fetch details for.

## `scrapeSimilarApps.urls` (type: `array`):

Play Store app detail page URLs (or bare package ids) to find similar apps for.

## `count` (type: `integer`):

Leave this field empty if you want to scrape all items.

## `cursor` (type: `string`):

Use this field if you want to resume scraping from where the scraper stopped last time. You can find this value in default storage of scraper runs under lastCursor key

## Actor input object example

```json
{
  "action": "scrapeReviews",
  "scrapeReviews.appId": "com.rockstargames.gtasa",
  "scrapeAppSearch.keywords": [
    "trading",
    "market",
    "stocks",
    "investing",
    "crypto"
  ],
  "scrapeAppUrls.urls": [
    "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
  ],
  "scrapeSimilarApps.urls": [
    "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
  ]
}
```

# Actor output Schema

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

Records scraped by Google Play Scraper, stored in the run's default dataset.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers-hub/google-play-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scrapers-hub/google-play-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 '{}' |
apify call scrapers-hub/google-play-scraper --silent --output-dataset

```

## MCP server setup

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