# App Store & Google Play Scraper - $1/1K Apps (`perceptr0n/appstore-google-play-intelligence`) Actor

Search the App Store by keyword or load specific apps from Apple and Google Play in one dataset: ratings, rating counts, price, category, version, update date, size, languages and user reviews. One record shape for both stores, so the same app can be compared row by row.

- **URL**: https://apify.com/perceptr0n/appstore-google-play-intelligence.md
- **Developed by:** [Thomas Ehrler](https://apify.com/perceptr0n) (community)
- **Categories:** E-commerce, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / actor start

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/platform/actors/running/actors-in-store#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

## App Store & Google Play Intelligence — both stores, one dataset

Search the **App Store** by keyword or pull specific apps from **Apple and
Google Play** into a single table: ratings, rating counts, price, category,
version, update date, size, languages and user reviews.

The point is the shared record shape. Most scrapers cover one store, so
comparing an app across both means merging two incompatible exports by hand.
Here both stores come back with the same field names.

### Why the comparison matters

Real numbers from a test run:

| App | App Store | Google Play |
|---|---|---|
| Spotify | **4.71★** from 5,621,877 ratings | **4.19★** from 36,028,975 ratings |

Same product, half a star apart, and a sixfold difference in review volume.
Anyone doing app-market research, competitor tracking or store optimisation
needs both sides — and needs them aligned.

### What you get per app

| Field | Example |
|---|---|
| `store`, `title`, `developer` | apple · Instagram · Instagram, Inc. |
| `rating`, `ratingCount`, `ratingCurrentVersion` | 4.71 · 5,621,877 |
| `price`, `currency`, `isFree` | 0 · EUR · true |
| `category`, `categories`, `contentRating` | Photo & Video · 12+ |
| `version`, `lastUpdated`, `releaseDate`, `releaseNotes` | 440.0.0 · 2026-07-27 |
| `sizeBytes`, `languages`, `supportedDevices`, `screenshotCount` | app footprint and reach |
| `description`, `iconUrl`, `storeUrl`, `sellerUrl` | full listing content |
| `searchKeyword`, `searchPosition` | in search mode: where the app ranks |
| `reviews[]` | rating, title, text, app version, author, vote count |

### Use cases

- **Store optimisation (ASO)** — which apps rank for your keywords, in which
  position, and what their listings look like
- **Competitor tracking** — schedule a weekly run and watch ratings, prices,
  versions and update cadence move
- **Market research** — the size and quality of a category before you build in it
- **Review mining** — hundreds of recent reviews as structured text, ready for
  sentiment or topic analysis
- **Cross-store audits** — where your app is rated worse and why
- **AI agents** — one clean schema for both stores, callable via MCP

### Input examples

Keyword research in the German App Store:

```json
{ "mode": "search", "keywords": ["budget planner", "Rechnung scannen"], "country": "de", "max_items": 50 }
```

Compare one product across both stores:

```json
{
    "mode": "apps",
    "apple_ids": ["com.spotify.client"],
    "play_ids": ["com.spotify.music"],
    "country": "de"
}
```

Mine reviews of a competitor:

```json
{ "mode": "apps", "apple_ids": ["284882215"], "include_reviews": true, "max_reviews_per_app": 500 }
```

### What does a run cost?

| Records | Cost |
|---|---|
| 100 apps | $0.11 |
| 1,000 apps | $1.01 |
| 1 app with 500 reviews | $0.01 |

$0.01 per run start plus $0.001 per app record. Reviews come nested inside the
app record, so a review-heavy run stays cheap.

### Limitations — stated honestly

- **Keyword search covers the App Store.** Google Play has no stable public
  search endpoint; Play apps are loaded by package name. Say `com.whatsapp`,
  not "WhatsApp".
- **Reviews are Apple only.** Apple publishes a public review feed of up to
  **500 recent reviews** per app and country. Google Play publishes no
  equivalent feed, and this actor does not pretend otherwise.
- **Rankings are per country.** A keyword position in `de` says nothing about
  `us` — run each store front you care about.
- Apps that do not exist return `found: false` instead of an empty row.

### Data sources

Apple data comes from the **official iTunes Search API** and the **public
customer-review feed**. Google Play data comes from the structured
`schema.org` block that each store page publishes for search engines. No login,
no paywall and no access control is involved, and no personal data beyond the
public display names attached to reviews.

Not affiliated with or endorsed by Apple or Google.

### Related actors

| Actor | What it does |
|---|---|
| [Website to Company Data](https://apify.com/perceptr0n/impressum-company-data-enrichment) | Turn app developer websites into verified company records |
| [EUDAMED Medical Devices](https://apify.com/perceptr0n/eudamed-medical-device-scraper) | EU medical device registry |
| [EU Public Tenders (TED)](https://apify.com/perceptr0n/eu-tenders-ted-scraper) | Public procurement across all 27 EU states |

### Support

Need another store front, field or export shape? Open an issue in the
**Issues** tab — response within 1–2 business days.

# Actor input Schema

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

Search by keyword, or load specific apps by id.

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

What users would type in the store — e.g. `budget planner`, `Rechnung scannen`. One row per app found, with its ranking position.

## `apple_ids` (type: `array`):

Numeric track id (`284882215`) or bundle id (`com.burbn.instagram`).

## `play_ids` (type: `array`):

Package name, e.g. `com.whatsapp`, `com.spotify.music`.

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

Two-letter country code — the store front to read. Rankings, prices and reviews differ per country.

## `include_reviews` (type: `boolean`):

Adds user reviews with rating, title, text and app version. Apple publishes up to 500 recent reviews per app and country.

## `max_reviews_per_app` (type: `integer`):

Upper limit of reviews per app. Apple publishes at most 500 recent reviews per app and country.

## `max_items` (type: `integer`):

Maximum apps returned per keyword in search mode, or in total in app mode.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "budget planner"
  ],
  "country": "de",
  "include_reviews": false,
  "max_reviews_per_app": 100,
  "max_items": 50
}
```

# 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 = {
    "keywords": [
        "budget planner"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("perceptr0n/appstore-google-play-intelligence").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 = { "keywords": ["budget planner"] }

# Run the Actor and wait for it to finish
run = client.actor("perceptr0n/appstore-google-play-intelligence").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "budget planner"
  ]
}' |
apify call perceptr0n/appstore-google-play-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=perceptr0n/appstore-google-play-intelligence",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/JhGatCUhVl9BQv0Np/builds/OwWzJH2kdF7kkuLQC/openapi.json
