# App Store & Google Play Scraper — Apps, Charts, Reviews (`actor-forge/app-store-scraper`) Actor

Scrape Google Play and App Store app details (rating, histogram, installs, price, version, developer, screenshots, similar apps), Apple top charts and anonymised Google Play reviews. IDs or URLs, many countries, monitoring mode. $0.80 per 1,000 apps.

- **URL**: https://apify.com/actor-forge/app-store-scraper.md
- **Developed by:** [ActorForge](https://apify.com/actor-forge) (community)
- **Categories:** Developer tools, Marketing, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 app 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?

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

## App Store & Google Play Scraper — Apps, Charts, Reviews

Scrape Google Play and App Store app details (rating, histogram, installs, price, version, developer, screenshots, similar apps), Apple top charts and anonymised Google Play reviews. IDs or URLs, many countries, monitoring mode. $0.80 per 1,000 apps.

A **Google Play scraper and App Store scraper in one actor**, for ASO (app store optimization), competitor tracking, market research and app-intelligence dashboards. Give it Google Play package names or URLs and App Store ids or URLs, pick countries, and get **one normalised app row per store and country**: title, developer (name, id, website, company support mailbox), category and genres, star rating, ratings count, **rating histogram**, installs range and exact install count (Play), price and currency, in-app purchases, ads, content/age rating, release and last-update dates, version, size (App Store), minimum Android/iOS version, description, release notes, icon, screenshots, **similar apps** and **more by this developer**. Add **Apple's official top-free and top-paid charts** (top 1-100, any country) as an **app store charts** feed, optionally with full details for every charting app. As an **app reviews scraper** it returns the Google Play reviews shown on the public app page (up to 20 per app, country and language) with rating, text, date, thumbs-up, app version and developer reply, **with reviewer names, avatars and user ids stripped** (GDPR-safe). Schedule it with *Only new reviews since last run* to monitor new reviews, ratings and version changes. Plain HTTP, 256 MB, no browser, reads only pages the stores' robots.txt allows. **$0.80 per 1,000 apps**, about a third of the app-details leader ($2.30-3.45 per 1,000 plus $0.005 per run); reviews $0.04 per 1,000, chart entries $0.20 per 1,000.

🌐 **More on the ActorForge site:** [App Store & Google Play Scraper — Apps, Charts, Reviews on the ActorForge site](https://devtaonas.github.io/actorforge-site/actors/app-store-scraper/)

### What data does it return?

Every run outputs clean, schema-validated rows like these:

| type | store | title | developer | rating | ratingsCount | installs | priceText | version | updatedAt |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| app | google-play | Spotify: Music and Podcasts | Spotify AB | 4.3 | 36505489 | 1,000,000,000+ | Free | Varies with device | 2026-10-14 |
| app | app-store | Spotify: Music and Podcasts | Spotify | 4.8 | 42653998 |  | Free | 9.1.90 | 2026-10-08 |
| app | app-store | Minecraft: Play with Friends! | Mojang | 4.5 | 843566 |  | $6.99 | 26.52 | 2026-09-28 |
| chart | app-store | #1 top-free (us): Muse from Meta | Meta Platforms, Inc. |  |  |  |  |  | 2026-10-19 |
| review | google-play | com.spotify.music: 1★ "Spotify has a new, horrendous feature where…" |  | 1 |  |  |  | 9.1.80.2221 | 2026-09-16 |

### How much does it cost?

Transparent pay-per-event pricing — you only pay for what you get, and the
actor **always respects your run budget**: set a maximum total charge and it
stops cleanly at the cap instead of overrunning.

| Event | Price | Charged | Worked example |
| --- | --- | --- | --- |
| `app-result` | $0.0008 | per app row delivered (one app in one country, either store) | 100 apps = $0.08; 1,000 apps = $0.80 |
| `review-result` | $0.00004 | per anonymised Google Play review delivered | 20 reviews for each of 50 apps = $0.04 |
| `chart-entry` | $0.0002 | per Apple top-chart position delivered | Top 25 free + top 25 paid in one country = $0.01 |
| `apify-actor-start` | $0.00005 | per run per GB of memory (platform start fee) | One run at 256 MB ≈ $0.0000125 |

### Input options

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `apps` | array | no | — | Apps to scrape, one per line: a Google Play package name (com.spotify.music) or Play URL (play.google.com/store/apps/details?id=…), or an App Store id (324684580) or App Store URL (apps.apple.com/us/app/…/id324684580). Each app is scraped once per country. |
| `charts` | array | no | `[]` | Apple App Store top charts to fetch for each country (Apple's official marketing RSS feed). Each position is one chart row. |
| `countries` | array | no | `["us"]` | Two-letter store country codes (us, gb, de, fr, jp, br …). Apps are scraped and charts fetched for each country. |
| `language` | string | no | `"en"` | Language of Google Play text and reviews, e.g. en, de, pt-BR. App Store text is in the storefront's own language. |
| `chartSize` | integer | no | `25` | How many positions to return per chart (Apple serves at most 100). |
| `includeChartAppDetails` | boolean | no | `false` | Fetch the App Store page of every app in the chart and return a full app row for it as well (charged as an app result). |
| `includeReviews` | boolean | no | `false` | Return the reviews Google Play shows on the public app page (its "most relevant" set, up to 20 per app, country and language) as anonymised review rows: rating, text, date, thumbs-up, app version and developer reply. Reviewer names, avatars and user ids are never returned. App Store reviews are not available (see README). |
| `maxReviewsPerApp` | integer | no | `20` | Stop after this many reviews per app and country (the public app page shows at most 20). |
| `reviewsSince` | string | no | — | Only return reviews posted on or after this date (YYYY-MM-DD). |
| `onlyNewReviewsSinceLastRun` | boolean | no | `false` | For scheduled runs: remember which reviews were delivered and return only reviews not seen before. State is kept in the named key-value store 'app-store-scraper-monitor' in your account, one record per app, country and language. |

### Limits & honest notes

- No keyword search. Google Play's robots.txt disallows /store/search and itunes.apple.com disallows /search\*, so apps are given by package name, id or URL. Use Apple's top charts to discover apps.
- No App Store reviews. Apple's customer-review feed lives under itunes.apple.com/…/rss/…, which Apple's robots.txt disallows, so App Store rows carry rating, ratings count and histogram but no review text.
- Google Play reviews: up to 20 per app, country and language — the "most relevant" reviews shown on the public app page. Google's paging endpoint (/\_/PlayStoreUi/data/batchexecute) and /store/getreviews are disallowed by its robots.txt, so there is no deep history and no newest-first sort. Scheduled runs with *Only new reviews since last run* build up history over time.
- Reviewer names, avatars and user ids are never returned, and developer e-mails are kept only when they are company mailboxes (support@, help@ … on the company's own domain). Review text is returned as written.
- Google Play does not publish app size on the web any more (size is null for Play apps); App Store rows have no installs (Apple does not publish them). Fields a store does not provide are null.
- Apple charts: top-free and top-paid apps, 1-100 positions per chart and country, from Apple's official marketing RSS feed. Google Play charts are not supported.
- Plain HTTP from Apify's servers, at most 2 requests at a time per store, with pauses. If a store shows a CAPTCHA, an 'unusual traffic' page or keeps answering 429/403, the actor stops asking that store for the rest of the run and returns free error rows for the skipped apps. No proxies, no CAPTCHA solving.
- robots.txt is re-checked at the start of every run; if a store ever disallows the pages used here, that store is skipped.
- Error rows (app not found in a country, store blocked, chart unavailable) are free. Respects your run budget: set a maximum total charge and the actor stops cleanly at the cap.

### Related ActorForge actors

- [Google Play Scraper](https://apify.com/actor-forge/google-play-scraper) — Google Play only, reviews on by default
- [Tech Stack Detector](https://apify.com/actor-forge/tech-stack-detector) — see what an app developer's website runs on
- [Website Change Monitor](https://apify.com/actor-forge/website-change-monitor) — watch a competitor's landing page alongside its store listing
- [SEO Audit](https://apify.com/actor-forge/seo-audit) — audit the app's marketing site
- **Learn more:** [App Store & Google Play Scraper — Apps, Charts, Reviews on the ActorForge site](https://devtaonas.github.io/actorforge-site/actors/app-store-scraper/)

### Changelog

- **2026-10-19** — Initial release: Google Play and App Store app details in one schema, Apple top-free/top-paid charts, anonymised Google Play reviews, monitoring mode, robots.txt re-check and block detection.

***

*Built and maintained by **ActorForge**. Reliability first: every actor in the
portfolio is monitored by an automated nightly self-test, and breakages are
typically fixed the same day.*

# Actor input Schema

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

Apps to scrape, one per line: a Google Play package name (com.spotify.music) or Play URL (play.google.com/store/apps/details?id=…), or an App Store id (324684580) or App Store URL (apps.apple.com/us/app/…/id324684580). Each app is scraped once per country.

## `charts` (type: `array`):

Apple App Store top charts to fetch for each country (Apple's official marketing RSS feed). Each position is one chart row.

## `countries` (type: `array`):

Two-letter store country codes (us, gb, de, fr, jp, br …). Apps are scraped and charts fetched for each country.

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

Language of Google Play text and reviews, e.g. en, de, pt-BR. App Store text is in the storefront's own language.

## `chartSize` (type: `integer`):

How many positions to return per chart (Apple serves at most 100).

## `includeChartAppDetails` (type: `boolean`):

Fetch the App Store page of every app in the chart and return a full app row for it as well (charged as an app result).

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

Return the reviews Google Play shows on the public app page (its "most relevant" set, up to 20 per app, country and language) as anonymised review rows: rating, text, date, thumbs-up, app version and developer reply. Reviewer names, avatars and user ids are never returned. App Store reviews are not available (see README).

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

Stop after this many reviews per app and country (the public app page shows at most 20).

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

Only return reviews posted on or after this date (YYYY-MM-DD).

## `onlyNewReviewsSinceLastRun` (type: `boolean`):

For scheduled runs: remember which reviews were delivered and return only reviews not seen before. State is kept in the named key-value store 'app-store-scraper-monitor' in your account, one record per app, country and language.

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music",
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
  ],
  "charts": [],
  "countries": [
    "us"
  ],
  "language": "en",
  "chartSize": 25,
  "includeChartAppDetails": false,
  "includeReviews": false,
  "maxReviewsPerApp": 20,
  "onlyNewReviewsSinceLastRun": false
}
```

# Actor output Schema

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

App rows (type app, Google Play and App Store normalised to one schema), anonymised Google Play review rows (type review), Apple chart rows (type chart) and free error rows (type error).

# 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://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
    ],
    "countries": [
        "us"
    ],
    "language": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("actor-forge/app-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://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    ],
    "countries": ["us"],
    "language": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("actor-forge/app-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://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
  ],
  "countries": [
    "us"
  ],
  "language": "en"
}' |
apify call actor-forge/app-store-scraper --silent --output-dataset

```

## MCP server setup

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