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

Scrapes Google Play app listings, search results, and user reviews, returning titles, developers, ratings, install counts, pricing, screenshots, and review text.

- **URL**: https://apify.com/anyxsolutions/google-play-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** Developer tools, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.

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

![banner](https://i.ibb.co/9HXWWsz9/google-play-scraper.png)

## Google Play Store Scraper

**Apps, search results, and user reviews from the Google Play Store — no API key required.**

Pull structured data on any Android app: ratings and rating histograms, install counts, pricing and
in-app purchases, developer details, screenshots, categories, and full review text. Feed it app IDs,
search queries, or Play Store URLs and get clean JSON, CSV, or Excel back. Useful for app store
optimisation, competitor tracking, review mining, and market research.

### ⚡ Quick start

```json
{
  "appIds": ["com.spotify.music"],
  "queries": ["music player"],
  "maxItems": 5,
  "includeReviews": true,
  "maxReviews": 100
}
```

### 🧩 Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `appIds` | array | no¹ | — | Play Store application IDs, e.g. `com.spotify.music`. |
| `queries` | array | no¹ | — | Search terms to look up in the Play Store. |
| `startUrls` | array | no¹ | — | Play Store URLs. App pages and search pages are both supported. |
| `maxItems` | integer | no | `5` | Maximum apps or search results per app ID, query, or start URL. |
| `includeReviews` | boolean | no | `false` | Also scrape user reviews for every app found. |
| `maxReviews` | integer | no | `100` | Maximum reviews per app. Only used when `includeReviews` is on. |
| `reviewsSortBy` | string | no | `newest` | `newest`, `mostRelevant`, or `rating`. |
| `language` | string | no | `en` | Language code for listings and reviews. |
| `country` | string | no | `us` | Country code that sets store region and pricing. |
| `proxyConfiguration` | object | no | `{ "useApifyProxy": false }` | Proxy settings. Not needed for this Actor. |

¹ Provide at least one of `appIds`, `queries`, or `startUrls`.

### 📤 Output

Every result is one dataset row. The `itemType` field tells the three shapes apart: `app` for a full
app listing, `searchResult` for a search card, and `review` for a user review.

#### Fields

| Field | Type | Description |
|---|---|---|
| `itemType` | string | `app`, `searchResult`, or `review`. |
| `appId` | string | Play Store application ID. |
| `title` | string | App name. |
| `developer` | string | Developer name. |
| `developerEmail` | string | Developer contact email. |
| `developerWebsite` | string | Developer website. |
| `score` | number | Average rating out of 5. |
| `ratings` | number | Number of ratings. |
| `reviews` | number | Number of written reviews. |
| `histogram` | array | Rating counts from 1★ to 5★. |
| `installs` | string | Install count as displayed, e.g. `1,000,000,000+`. |
| `realInstalls` | number | Exact install count. |
| `price` | number | Price in the store currency. `0` when free. |
| `free` | boolean | Whether the app is free. |
| `offersIAP` | boolean | Whether the app offers in-app purchases. |
| `genre` | string | Primary category. |
| `contentRating` | string | Content rating, e.g. `Everyone`. |
| `screenshots` | array | Screenshot image URLs. |
| `icon` | string | App icon URL. |
| `released` | string | Original release date. |
| `updated` | number | Last update, as a Unix timestamp. |
| `version` | string | Current version, or `Varies with device`. |
| `url` | string | Canonical Play Store URL. |
| `userName` | string | Review author (reviews only). |
| `content` | string | Review text (reviews only). |
| `thumbsUpCount` | number | Helpful votes on the review (reviews only). |
| `description` | string | Full app description as plain text. |
| `descriptionHTML` | string | Full app description as HTML. |
| `summary` | string | Short promotional line shown under the title. |
| `minInstalls` | number | Install count rounded down to the bracket Google publishes. |
| `currency` | string | Currency `price` is quoted in. |
| `inAppProductPrice` | string | In-app purchase price range, as displayed. |
| `developerId` | string | Developer's Play Store ID. |
| `developerAddress` | string | Developer's postal address, when published. |
| `privacyPolicy` | string | Developer's privacy-policy URL. |
| `genreId` | string | Play Store ID of the primary category. |
| `categories` | array | All categories the app is listed under. |
| `headerImage` | string | Feature-graphic image URL. |
| `video` | string | Promo video URL, when the listing has one. |
| `videoImage` | string | Promo video thumbnail URL. |
| `contentRatingDescription` | string | Detail behind `contentRating`, e.g. `Mild Violence`. |
| `adSupported` | boolean | Whether Google flags the app as ad-supported. |
| `containsAds` | boolean | Whether the listing declares ads. |
| `lastUpdatedOn` | string | Last update as displayed, e.g. `Jul 30, 2026`. |
| `comments` | array | Sample review snippets shown on the listing. |
| `reviewId` | string | Review ID (reviews only). |
| `userImage` | string | Review author's avatar URL (reviews only). |
| `reviewCreatedVersion` | string | App version the review was written against (reviews only). |
| `at` | number | Review timestamp, Unix (reviews only). |
| `replyContent` | string | Developer's reply text (reviews only). |
| `repliedAt` | number | Developer reply timestamp, Unix (reviews only). |
| `appVersion` | string | App version at reply time (reviews only). |
| `at` | number | Review timestamp (reviews only). |
| `replyContent` | string | Developer reply, when present (reviews only). |

<details><summary>Example output</summary>

```json
{
  "itemType": "app",
  "appId": "com.spotify.music",
  "title": "Spotify: Music and Podcasts",
  "developer": "Spotify AB",
  "score": 4.3404255,
  "ratings": 36020993,
  "histogram": [3701406, 1076853, 1326703, 3068917, 26847098],
  "installs": "1,000,000,000+",
  "price": 0,
  "free": true,
  "genre": "Music & Audio",
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=us"
}
```

</details>

### 💡 Use cases

- **App store optimisation** — track how your rating, install count, and review sentiment move against competitors.
- **Review mining** — pull thousands of reviews per app to surface recurring complaints and feature requests.
- **Market research** — map a category by searching keywords and comparing ratings, pricing, and install tiers.
- **Lead generation** — collect developer names, emails, and websites across a category.

### ❓ FAQ

- **Do I need a proxy?** No. The Play Store serves full listing data without one, so proxies are off by default.
- **How many reviews can I get?** Set `maxReviews` as high as you need; the Actor pages through them automatically.
- **Can I get reviews in another language?** Yes — set `language` and `country` to the locale you want.
- **Why are some fields empty?** Not every app publishes every field. Promo videos, developer addresses, and content-rating descriptions are commonly absent.

### 🔗 More scrapers by Anyx

- [Google Search Scraper](https://apify.com/anyxsolutions/google-search-scraper)
- [YouTube Channel Scraper](https://apify.com/anyxsolutions/youtube-channel-scraper)
- [TikTok Ads Scraper](https://apify.com/anyxsolutions/tiktok-ads-scraper)
- [Indeed Scraper](https://apify.com/anyxsolutions/indeed-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [play.google.com](https://play.google.com/store/apps)

# Actor input Schema

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

Google Play application IDs, for example com.spotify.music. One entry per app.

## `queries` (type: `array`):

Search terms to look up in the Play Store, for example "habit tracker". Each query returns a page of matching apps.

## `startUrls` (type: `array`):

Google Play URLs to scrape directly. App pages (/store/apps/details?id=...) and search pages (/store/search?q=...) are both supported.

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

Maximum number of apps or search results to return per app ID, query, or start URL. Reviews are limited separately by Maximum reviews.

## `includeReviews` (type: `boolean`):

Also scrape user reviews for every app found. Reviews are returned as separate dataset items.

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

Maximum number of reviews to return per app. Only used when Include reviews is enabled.

## `reviewsSortBy` (type: `string`):

Order in which reviews are collected — newest first, most relevant, or by rating.

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

Language code for listings and reviews, for example en or de.

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

Country code that sets the store region and pricing, for example us or gb.

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

Apify proxy settings. The Play Store works without a proxy, so proxies are disabled by default.

## Actor input object example

```json
{
  "appIds": [
    "com.spotify.music"
  ],
  "maxItems": 5,
  "includeReviews": false,
  "maxReviews": 100,
  "reviewsSortBy": "newest",
  "language": "en",
  "country": "us",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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.spotify.music"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/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 = { "appIds": ["com.spotify.music"] }

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/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 '{
  "appIds": [
    "com.spotify.music"
  ]
}' |
apify call anyxsolutions/google-play-scraper --silent --output-dataset

```

## MCP server setup

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