# ⭐ App Reviews Scraper - App Store, Steam & Play (`that_red_bird/app-reviews-scraper`) Actor

⚡ Scrape app ratings and reviews from Apple's App Store, Steam and Google Play through their public endpoints. ✅ Star ratings, review text, versions, playtime, helpful votes. ✅ Filter to 1-2 star reviews to mine complaints, or by keyword like crash or refund.

- **URL**: https://apify.com/that\_red\_bird/app-reviews-scraper.md
- **Developed by:** [mohamed alaya](https://apify.com/that_red_bird) (community)
- **Categories:** E-commerce, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

Ratings and reviews from **Apple's App Store, Steam and Google Play**, through the endpoints
those stores publish openly.

### Sources and what each really gives you

| Store | Source | Reviews | Ratings |
|---|---|---|---|
| **Apple App Store** | official customer-reviews RSS | ✅ full text, title, stars, version, author | ✅ |
| **Steam** | official `appreviews` endpoint | ✅ full text, recommended, playtime, helpful votes | ✅ |
| **Google Play** | listing page | ❌ text not exposed without a browser | ✅ rating + count + metadata |

Google Play is included deliberately and labelled honestly: you get the app's rating, rating
count and metadata, and a `note` field saying why there is no review text — instead of an
empty result that looks like a failure.

### Input

Mix stores freely:

```json
{
  "apps": [
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
    "https://store.steampowered.com/app/440/",
    "com.whatsapp",
    { "app": "440", "store": "steam" }
  ],
  "maxRating": 2,
  "keywords": ["crash", "refund"]
}
```

Bare ids work too: `id310633997`, `440`, `com.whatsapp`.

### Filtering

`minRating` / `maxRating` · `keywords` (title and body) · `country` · `language` (Steam) ·
`maxReviewsPerApp`.

**Set `maxRating: 2`** to pull only angry reviews — that is the fastest way to find what is
actually broken in an app, yours or a competitor's.

### Typical uses

Competitor teardown and feature-gap mining · release-quality monitoring after a version ships ·
ASO and review-sentiment research · support teams tracking recurring complaints · investors
checking product health before a deal.

# Actor input Schema

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

App Store URLs or ids (id310633997), Steam URLs or appids (440), or Play package names (com.whatsapp). To be explicit use objects: {"app":"440","store":"steam"}.

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

Upper bound per app. Apple caps at roughly 500 through its public feed.

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

Two-letter store country for Apple and Google Play, e.g. us, gb, de.

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

Steam review language filter, e.g. english, french, all.

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

Keep reviews at or above this star rating (1-5).

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

Keep reviews at or below this star rating. Set to 2 to mine complaints.

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

Case-insensitive match on review title and body — e.g. crash, refund, slow.

## `includeAppMetadata` (type: `boolean`):

Emit one row per app with name, developer, rating and rating count alongside the reviews.

## `concurrency` (type: `integer`):

How many apps to fetch in parallel.

## `proxyConfiguration` (type: `object`):

Optional Apify proxy configuration.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
    "https://store.steampowered.com/app/440/Team_Fortress_2/"
  ],
  "maxReviewsPerApp": 200,
  "country": "us",
  "language": "english",
  "includeAppMetadata": true,
  "concurrency": 3
}
```

# Actor output Schema

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

No description

## `downloadCsv` (type: `string`):

No description

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

No description

## `count` (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 = {
    "apps": [
        "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
        "https://store.steampowered.com/app/440/Team_Fortress_2/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("that_red_bird/app-reviews-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": [
        "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
        "https://store.steampowered.com/app/440/Team_Fortress_2/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("that_red_bird/app-reviews-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": [
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
    "https://store.steampowered.com/app/440/Team_Fortress_2/"
  ]
}' |
apify call that_red_bird/app-reviews-scraper --silent --output-dataset

```

## MCP server setup

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