# App Store & Google Play Reviews Scraper + AI-Ready Insights (`galf13/app-store-google-play-reviews`) Actor

Scrape iOS App Store and Google Play reviews in one run, across 150+ countries, and get an insights report: top complaints, bugs by app version, feature requests and rating trends.

- **URL**: https://apify.com/galf13/app-store-google-play-reviews.md
- **Developed by:** [Guilherme Carvalho Bandeira](https://apify.com/galf13) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 reviews

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 Reviews Scraper + Insights

Get iOS App Store **and** Google Play reviews for any app in one run, in 150+ countries, plus a ready-to-read **insights report**: top complaints with real quotes, which app version hurt your rating, feature requests and monthly rating trends.

**Quick start:** paste an App Store link and a Google Play link into **Apps**, press **Start**. You get a table of reviews and a `REPORT` page in about 30 seconds.

#### What you get

- ⭐ **Reviews from both stores in one clean format**: rating, title, text, date, app version, helpful votes, author, and the developer reply (Google Play).
- 🌍 **Any country**: scrape the same app in `us`, `gb`, `br`, `de`, `in`, `jp`... in one run.
- 🧠 **Insights report per app** (optional):
  - top complaint topics (crashes & bugs, performance, login, pricing, ads, design, notifications, battery, support), each with its share of negative reviews and example quotes
  - phrases that show up much more often in 1-2 star reviews ("takes forever", "same songs", "without premium")
  - **ratings by app version**, with problem releases flagged
  - feature requests, monthly trend, developer reply rate
  - works in English, Portuguese and Spanish reviews
- 📅 **Monitoring mode**: `Only reviews since: 7 days` + a weekly schedule = a weekly review digest.
- 🎯 **Complaints only**: set min and max rating to 1-2.

#### Who uses it

- **Product managers & developers**: find the bugs and requests users actually write about, per release.
- **ASO and app marketing agencies**: client reports and competitor benchmarks in minutes.
- **Market researchers**: compare competitors across countries.
- **AI and LLM workflows**: clean JSON, ready to feed into ChatGPT, Claude or your own model for summaries.

#### Input example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.spotify.music"
  ],
  "countries": ["us", "gb"],
  "maxReviewsPerApp": 500,
  "onlyReviewsSince": "30 days",
  "includeInsights": true
}
```

You can paste App Store links, numeric App Store ids (`324684580`), Google Play links or package names (`com.spotify.music`).

#### Output: reviews (dataset)

```json
{
  "store": "google",
  "appId": "com.spotify.music",
  "appName": "Spotify: Music and Podcasts",
  "country": "us",
  "language": "en",
  "reviewId": "6ea9b0e1-6f85-4bbf-8198-4ac96441e693",
  "rating": 2,
  "title": null,
  "text": "Keeps playing the same songs on shuffle...",
  "userName": "Jane D.",
  "date": "2026-11-01T23:53:47.243Z",
  "appVersion": "9.1.94.1929",
  "thumbsUp": 12,
  "developerReply": "Hey Jane, thanks for the feedback...",
  "developerReplyDate": "2026-11-02T08:10:00.000Z",
  "reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=...",
  "scrapedAt": "2026-11-02T10:00:00.000Z"
}
```

Export as JSON, CSV, Excel or HTML, or connect to Google Sheets, Make, Zapier, n8n or the Apify API.

#### Output: insights (key-value store)

- `REPORT`: a readable HTML report, one section per app and country. Open it from the run's **Storage** tab.
- `INSIGHTS`: the same data as JSON, for dashboards and automations.

Example headline:

> 24% of the 1050 sampled reviews are negative (1-2 stars); sample average is 3.9 stars vs 4.3 lifetime on the store. Top complaint: Pricing, subscription & billing (in 29% of negative reviews). Developer replies to 13% of Google Play reviews.

Insights are calculated from the reviews collected in the run, so more reviews give better insights. 300+ per app is a good start.

#### Pricing

Pay only for what you get:

- **Review**: per review saved
- **Insights report**: per app and country report

See the **Pricing** tab for current prices. Set **Maximum cost per run** in the run options and the Actor stops cleanly when it reaches your limit.

#### Limits worth knowing

- **App Store**: Apple's public review feed returns up to **500 reviews per country** for each sort order (newest or most helpful). To get more, add more countries.
- **Google Play**: no fixed limit. Reviews come in the language you choose (`language`).
- Apps that don't exist or aren't sold in a country are skipped and listed in `RUN_SUMMARY`.

#### FAQ

**Is it legal to scrape app reviews?** This Actor only reads publicly visible reviews, with no login. Personal data such as author names may be protected by laws like GDPR, so only keep what you need and use it lawfully.

**Can I monitor reviews automatically?** Yes. Create a schedule (for example every Monday) with `Only reviews since: 7 days` and connect the dataset to Slack, email or Google Sheets.

**Something broke or you need a field?** Open an issue in the **Issues** tab. I usually reply within a day.

# Actor input Schema

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

Paste app links or ids. Mix both stores freely. Examples: https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580, 324684580, https://play.google.com/store/apps/details?id=com.spotify.music, com.spotify.music

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

Two-letter country codes (us, gb, br, de, in...). Each app is scraped once per country. Leave empty to use the country in the link, or 'us'.

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

Stop after this many reviews for each app in each country. Note: Apple's public feed exposes up to 500 newest reviews per country (use several countries for more). Google Play has no such limit.

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

'Newest' is best for monitoring and works with 'Only reviews since'.

## `onlyReviewsSince` (type: `string`):

Skip older reviews. Use a date (2026-10-01) or a relative period (7 days, 4 weeks, 3 months). Great for scheduled weekly monitoring.

## `minRating` (type: `integer`):

Only save reviews with at least this many stars (1-5). Set min and max to 1-2 to get only complaints.

## `maxRating` (type: `integer`):

Only save reviews with at most this many stars (1-5).

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

Two-letter language code for Google Play reviews (en, pt, es, de...). App Store reviews always come in the country's own language.

## `includeInsights` (type: `boolean`):

Adds one report per app and country: top complaint topics with example quotes, ratings by app version (spots bad releases), feature requests, monthly trend and developer reply rate. Saved as INSIGHTS (JSON) and REPORT (readable HTML) in the key-value store.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "https://play.google.com/store/apps/details?id=com.spotify.music"
  ],
  "countries": [
    "us"
  ],
  "maxReviewsPerApp": 100,
  "sort": "newest",
  "minRating": 1,
  "maxRating": 5,
  "language": "en",
  "includeInsights": true
}
```

# Actor output Schema

## `reviews` (type: `string`):

All reviews saved in this run, from both stores, in one format.

## `report` (type: `string`):

Readable report per app and country: top complaints, ratings by version, feature requests, monthly trend.

## `insights` (type: `string`):

The same insights as JSON, for dashboards and automations.

## `summary` (type: `string`):

Reviews saved, reports generated, apps not found.

# 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": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "https://play.google.com/store/apps/details?id=com.spotify.music"
    ],
    "countries": [
        "us"
    ],
    "maxReviewsPerApp": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("galf13/app-store-google-play-reviews").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": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "https://play.google.com/store/apps/details?id=com.spotify.music",
    ],
    "countries": ["us"],
    "maxReviewsPerApp": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("galf13/app-store-google-play-reviews").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": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "https://play.google.com/store/apps/details?id=com.spotify.music"
  ],
  "countries": [
    "us"
  ],
  "maxReviewsPerApp": 100
}' |
apify call galf13/app-store-google-play-reviews --silent --output-dataset

```

## MCP server setup

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

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/W7rQhEO4bfmRqDrsT/builds/AGyKIs7GSa56ZkzgF/openapi.json
