# Google Play Scraper: Apps, Developers & Ratings (`themineworks/google-play-search`) Actor

Scrape Google Play Store search results: app name, package id, developer, rating, icon and store URL. Any country and language. No login, no API key.

- **URL**: https://apify.com/themineworks/google-play-search.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 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?

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: Apps, Developers & Ratings

> **The Mine Works:** 544 users across 100 public Actors, >99% run success. Pay only for results delivered. [Browse all Actors](https://apify.com/themineworks).

Scrape Google Play Store search results: app name, package id, developer, star rating and icon, for any country storefront. No login, no API key, no browser.

✅ Name, developer, rating and icon on ~100% of records · ✅ Any country and language · ✅ Runs on the cheapest proxy tier · ✅ Empty runs never billed

### Search the Play Store

```json
{
  "queries": ["fitness", "habit tracker"],
  "country": "US",
  "language": "en",
  "maxItems": 100
}
```

Google Play returns a single result page per search term, so **breadth comes from supplying more terms**, not from deeper pagination. A run with ten keywords returns far more than one keyword with a high `maxItems`.

### Compare an app market across countries

```json
{
  "queries": ["mobile banking"],
  "country": "IN",
  "language": "en",
  "maxItems": 50
}
```

Play rankings differ sharply by storefront, so the same query in `US`, `IN`, `BR` and `DE` returns different apps and different competitive sets.

### What you get for each app

```json
{
  "app_id": "com.myfitnesspal.android",
  "name": "MyFitnessPal: Calorie Counter",
  "developer": "MyFitnessPal, Inc.",
  "rating": 4.4,
  "icon": "https://play-lh.googleusercontent.com/...",
  "app_url": "https://play.google.com/store/apps/details?id=com.myfitnesspal.android&hl=en&gl=US",
  "country": "US"
}
```

| Field | Description |
| --- | --- |
| 📦 `app_id` | Android package name, the app's stable identifier |
| 📱 `name` | App title as shown in the store |
| 🏢 `developer` | Publisher name |
| ⭐ `rating` | Star rating out of 5 |
| 🖼️ `icon` | App icon URL |
| 🌍 `country`, `language` | Which storefront the result came from |
| 🔗 `app_url` | Store link, pinned to the same country and language |

### Common use cases

**App Store Optimisation research.** See who ranks for a keyword in a given country before choosing your own.

**Competitive tracking.** Watch which apps appear for your category keywords over time with monitor mode.

**Market entry research**, comparing the same query across storefronts.

**Building an app dataset** from a keyword list, with package ids you can feed into other tools.

### Run it on a schedule

1. Run once with the keyword list you want repeated, then click **Save as a task**.
2. Turn on **Monitor mode** so later runs return only apps that are newly ranking.
3. In the Apify Console go to **Schedules** and add the saved task.

Nothing is charged just for a schedule existing.

### FAQ

**Do I need a Google account or API key?**
No. Everything comes from public store search pages.

**How many apps does one keyword return?**
About 30, which is what Google Play shows on a search page. Add more keywords for more coverage.

**Can I get install counts and full descriptions?**
Not from search results. Those live on individual app detail pages, and search only exposes name, developer, rating and icon. Fields that search cannot provide are not included rather than returned empty.

**Does country actually change the results?**
Yes, substantially. Both `country` and `language` are passed through to Google and are recorded on every row so you can tell results apart.

**Is this GDPR compliant?**
It collects public app store listings and publisher names, not personal data.

### Use from Claude, ChatGPT and any MCP agent

```
https://mcp.apify.com/?tools=themineworks/google-play-search
```

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/google-play-search').call({
    queries: ['fitness', 'habit tracker'],
    country: 'US',
    maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

# Actor input Schema

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

App keywords to search for. Google Play returns one result page per term, so add more terms for more breadth.

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

Two-letter country code for the Play storefront, e.g. US, GB, IN, DE.

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

Language code for results, e.g. en, de, hi.

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

Maximum apps to return across all queries. Default 50, maximum 500.

## `monitorMode` (type: `boolean`):

Run on a schedule and get ONLY apps not delivered in a previous run. Keep the input the same across runs.

## Actor input object example

```json
{
  "queries": [
    "fitness",
    "habit tracker"
  ],
  "country": "US",
  "language": "en",
  "maxItems": 60,
  "monitorMode": false
}
```

# Actor output Schema

## `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 = {
    "queries": [
        "fitness",
        "habit tracker"
    ],
    "country": "US",
    "language": "en",
    "maxItems": 60
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/google-play-search").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 = {
    "queries": [
        "fitness",
        "habit tracker",
    ],
    "country": "US",
    "language": "en",
    "maxItems": 60,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/google-play-search").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 '{
  "queries": [
    "fitness",
    "habit tracker"
  ],
  "country": "US",
  "language": "en",
  "maxItems": 60
}' |
apify call themineworks/google-play-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/google-play-search"
        }
    }
}

```

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/LbaiufGp0F2fpzszW/builds/8nIxCV0Pbv3rGdhvF/openapi.json
