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

Scrape the Apple App Store and Google Play in one run: app details, up to 1,000 reviews per app and country, Apple top charts and keyword rankings, in any country. Flat fee per app for its reviews instead of a fee per review. No API key, no login.

- **URL**: https://apify.com/renzomacar/app-store-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Developer tools, Marketing
- **Features:** Limited permissions
- **Stats:** 8 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.65 / 1,000 app metadata

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper - Apple App Store and Google Play apps, reviews, charts and keyword ranks

Scrape **both the Apple App Store and Google Play in one run** — app reviews, ratings, metadata, top charts, and keyword rankings — in any country, with **no API key**. A pay-per-result alternative to Sensor Tower and data.ai for ASO research, review monitoring, and sentiment analysis.

### What does this App Store scraper do?

Three modes, both stores, multi-country:

- **Reviews + metadata** — full app details plus reviews (text, rating, date, developer reply; Google Play reviews also carry app version and helpful count, which Apple no longer publishes) and an automatic **review sentiment summary** (avg rating, % positive/negative, top keywords).
- **Top charts** — Apple App Store top free / paid / grossing by genre and country (ASO market intel).
- **Keyword ranking** — which apps rank for a search term, on each store (ASO rank tracking).

Both stores in one run, with no API key and pay-per-event pricing.

### How to scrape App Store and Google Play reviews

1. Add **apps** — Apple IDs, Apple/Google URLs, Google package names, or app names. Mix freely.
2. Pick **platform** (apple / google / both), **countries**, and **maxReviewsPerApp**.
3. Run it — one clean JSON/CSV row per app, review, and summary.

```json
{ "apps": ["com.spotify.music", "324684580"], "platform": "both", "countries": ["us"], "maxReviewsPerApp": 200 }
```

### Reliability — built to actually finish your run

Every request is retried with backoff on 429 and transient 5xx responses. When an app, a chart or a search still fails, the reason is written to the run log and the rest of the run continues.

**Review order.** The `sort` option applies to Google Play. Apple returns reviews in its own default order and has no sort setting on this endpoint.

### Pricing

Pay per event, no subscription. You pay a start fee per run, a fee per app whose metadata is delivered, and one flat fee per app and country for its batch of reviews (up to `maxReviewsPerApp`, maximum 1,000). Top charts and keyword ranking runs are charged the start fee only. Current rates are on the Pricing tab of the Actor page.

### Output example

```json
{ "type": "app", "platform": "google", "title": "Spotify", "rating": 4.3, "installs": "1B+", "inAppPurchases": "$6.99 - $203.88", "adSupported": true, "hasDataSafety": true, "developerEmail": "support@spotify.com", "screenshots": ["https://…"] }
{ "type": "review", "platform": "apple", "rating": 5, "title": "Love it", "text": "…", "version": null, "date": "2026-06-20…", "helpfulCount": null, "reply": null }
{ "type": "review-summary", "platform": "google", "reviewsAnalyzed": 200, "averageRating": 3.85, "positivePct": 70, "topKeywords": [{ "word": "premium", "count": 31 }] }
```

### Use cases

- **ASO research** — track ratings, top charts, and keyword rankings for your app and competitors, across both stores.
- **Review monitoring** — watch new reviews and developer replies by country; alert on rating drops.
- **Sentiment & ML** — pull thousands of reviews as clean JSON to feed an LLM, plus a ready-made sentiment summary.
- **Competitive intel** — compare metadata, ratings and in-app purchase price ranges across rival apps.

### FAQ

**Does it cover both app stores?** Yes — Apple App Store and Google Play, side by side, multi-country, in one run.

**Do I need an API key?** No. It reads the stores' own public endpoints, which answer without a developer account or login.

**How many reviews can I get?** `maxReviewsPerApp` goes up to 1,000 per app and country. Measured: 1,000 unique Apple reviews for one app in one country in a single run. The real ceiling is how many reviews the store returns for that app in that country; add countries to go wider.

### Other Actors by this author

Need finance, company, or research data too? See my [other Actors](https://apify.com/renzomacar) — Yahoo Finance, SEC EDGAR, Company Enrichment, Apple Podcasts, and Deep Research MCP.

***

Built by [Renzo Madueño](https://apify.com/renzomacar). Found a bug or want a field added? Open an **Issue** — I read and respond to every one.

# Actor input Schema

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

reviews = app metadata + reviews. charts = ASO top charts. search = ASO keyword ranking (which apps rank for a term).

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

App names, Apple App Store IDs/URLs, or Google Play package names/URLs. E.g. "Notion", "477128284", "com.spotify.music".

## `searchTerms` (type: `array`):

Keywords to check app rankings for (ASO). Returns the ranked apps per term and country.

## `platform` (type: `string`):

Which store(s) to use.

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

Two-letter country codes (e.g. us, gb, de).

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

Also scrape reviews, not just app metadata.

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

Per app, per country. Up to 1,000 are delivered; higher values are treated as 1,000.

## `sort` (type: `string`):

Order in which Google Play reviews are pulled. Apple returns its own default order.

## `chartType` (type: `string`):

Which Apple chart to pull.

## `appleGenreId` (type: `integer`):

Optional App Store genre/category ID to filter charts (e.g. 6017 = Education, 6013 = Health & Fitness, 6014 = Games). Leave empty for overall.

## `limit` (type: `integer`):

Max apps to return per chart or per search term/country.

## Actor input object example

```json
{
  "mode": "reviews",
  "apps": [
    "com.spotify.music",
    "324684580"
  ],
  "searchTerms": [
    "meditation"
  ],
  "platform": "both",
  "countries": [
    "us"
  ],
  "includeReviews": true,
  "maxReviewsPerApp": 20,
  "sort": "newest",
  "chartType": "topfree",
  "limit": 50
}
```

# Actor output Schema

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

Rows produced by App Store & Google Play Review Scraper, one item per result in the 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 = {
    "apps": [
        "com.spotify.music",
        "324684580"
    ],
    "searchTerms": [
        "meditation"
    ],
    "countries": [
        "us"
    ],
    "maxReviewsPerApp": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/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",
        "324684580",
    ],
    "searchTerms": ["meditation"],
    "countries": ["us"],
    "maxReviewsPerApp": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/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",
    "324684580"
  ],
  "searchTerms": [
    "meditation"
  ],
  "countries": [
    "us"
  ],
  "maxReviewsPerApp": 20
}' |
apify call renzomacar/app-store-scraper --silent --output-dataset

```

## MCP server setup

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