# App Store & Google Play Reviews Scraper — Ratings & Reviews API (`f0rty7even/app-reviews-scraper`) Actor

Scrape and aggregate app reviews and ratings from both the Apple App Store and Google Play into one unified dataset. Filter by star rating. Great for ASO, market research, and review monitoring.

- **URL**: https://apify.com/f0rty7even/app-reviews-scraper.md
- **Developed by:** [F0rty7even](https://apify.com/f0rty7even) (community)
- **Categories:** AI, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 review-scrapeds

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Reviews Scraper — Ratings & Reviews API

**Scrape app reviews and ratings from both the Apple App Store and Google Play — in one run, one clean schema.** This **app reviews scraper** pulls recent reviews for any app from *both* stores and normalizes them into a single structured dataset, so you can monitor sentiment, do **ASO** and **market research**, or track competitors without stitching two different formats together.

Most scrapers cover one store. This one does **both**, and lets you filter to exactly the reviews you want (e.g. only 1–2★).

### Why this actor

- **Cross-store in one** — mix App Store and Google Play apps in a single input; get one unified output.
- **Star-rating filter** — isolate negative reviews (`maxScore: 2`) or top reviews, per run.
- **Clean, public data** — Apple's official RSS reviews feed + Google Play public listings. No login, no personal data beyond public reviewer display names.
- **Structured output** — score, title, text, author, app version, date, developer reply, and helpful-count (where available).

### Use cases

- **App developers** — monitor new reviews across both stores and catch issues fast.
- **ASO / marketing** — analyze sentiment, keywords, and version-by-version feedback.
- **Market research** — compare a competitor's reviews across platforms.
- **Support / product** — pipe negative reviews into a triage workflow.

### Input

| Field | Description |
|---|---|
| `apps` | App Store / Google Play URLs, or shorthand `apple:310633997` / `play:com.whatsapp`. |
| `country` | Two-letter store country (reviews are locale-specific), e.g. `us`, `gb`. |
| `lang` | Two-letter language for Google Play reviews, e.g. `en`. |
| `maxReviewsPerApp` | Cap on reviews per app (main cost lever; Apple caps at ~500). |
| `minScore` / `maxScore` | Keep only reviews within a star range (1–5). |

**Finding app ids:** App Store — the `id##########` in the URL. Google Play — the `id=` package name (e.g. `com.whatsapp`).

### Output

Each review becomes one dataset item, unified across stores:

```json
{
  "app": "com.whatsapp",
  "store": "googleplay",
  "appName": "WhatsApp Messenger",
  "score": 2,
  "title": null,
  "text": "Keeps crashing after the update...",
  "author": "Jane D.",
  "version": "2.26.23.74",
  "reviewId": "22eab7da-...",
  "date": "2026-07-09T23:23:03",
  "thumbsUp": 14,
  "developerReply": "Hi Jane, please contact support...",
  "country": "us",
  "url": "https://play.google.com/store/apps/details?id=com.whatsapp",
  "sourceApp": "googleplay:com.whatsapp"
}
````

(App Store reviews include a `title`; Google Play reviews don't — the field is `null` there.)

### Pricing

Pay-per-result: you're charged **per review returned** — no monthly fee, and no charge for apps that can't be found or return nothing.

### Notes

- **Apple App Store** reviews come from Apple's **official, public RSS feed** — reliable and stable.
- **Google Play** has no official reviews API; this actor uses the public listing data. It works well, but if Google changes its front-end, the Google Play side may need a short update — the App Store side is unaffected.
- Reviews are **locale-specific** — set `country` (and `lang` for Google Play) to the market you care about.

### FAQ

**Which stores?** Apple App Store and Google Play, in the same run.

**Can I get only bad reviews?** Yes — set `maxScore: 2` (or `minScore: 4` for top reviews).

**How many reviews can I get?** Apple caps at ~500 per app; Google Play paginates further — bound it with `maxReviewsPerApp`.

**What formats can I export?** JSON, JSONL, CSV, or Excel, or via the Apify API.

# Actor input Schema

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

Apps to scrape reviews for. Paste App Store or Google Play URLs, or use shorthand: `apple:310633997` / `play:com.whatsapp`.

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

Two-letter store country code (reviews are locale-specific), e.g. us, gb, de.

## `lang` (type: `string`):

Two-letter language code for Google Play reviews, e.g. en, es, de.

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

Cap on reviews returned per app (main cost lever). Apple caps at ~500.

## `minScore` (type: `integer`):

Only keep reviews with a star rating >= this (1-5). Leave empty for no minimum.

## `maxScore` (type: `integer`):

Only keep reviews with a star rating <= this (1-5). Set to 2 to isolate negative reviews.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
    "https://play.google.com/store/apps/details?id=com.whatsapp"
  ],
  "country": "us",
  "lang": "en",
  "maxReviewsPerApp": 200
}
```

# Actor output Schema

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

One normalized review per item across both stores. Export as JSON, JSONL, CSV, or Excel.

# 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://play.google.com/store/apps/details?id=com.whatsapp"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("f0rty7even/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://play.google.com/store/apps/details?id=com.whatsapp",
    ] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=f0rty7even/app-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "App Store & Google Play Reviews Scraper — Ratings & Reviews API",
        "description": "Scrape and aggregate app reviews and ratings from both the Apple App Store and Google Play into one unified dataset. Filter by star rating. Great for ASO, market research, and review monitoring.",
        "version": "0.1",
        "x-build-id": "tQj7Jdwe0a2WfKdkt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/f0rty7even~app-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-f0rty7even-app-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/f0rty7even~app-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-f0rty7even-app-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/f0rty7even~app-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-f0rty7even-app-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "apps"
                ],
                "properties": {
                    "apps": {
                        "title": "Apps",
                        "type": "array",
                        "description": "Apps to scrape reviews for. Paste App Store or Google Play URLs, or use shorthand: `apple:310633997` / `play:com.whatsapp`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter store country code (reviews are locale-specific), e.g. us, gb, de.",
                        "default": "us"
                    },
                    "lang": {
                        "title": "Language",
                        "type": "string",
                        "description": "Two-letter language code for Google Play reviews, e.g. en, es, de.",
                        "default": "en"
                    },
                    "maxReviewsPerApp": {
                        "title": "Max reviews per app",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Cap on reviews returned per app (main cost lever). Apple caps at ~500.",
                        "default": 200
                    },
                    "minScore": {
                        "title": "Min score",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only keep reviews with a star rating >= this (1-5). Leave empty for no minimum."
                    },
                    "maxScore": {
                        "title": "Max score",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only keep reviews with a star rating <= this (1-5). Set to 2 to isolate negative reviews."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
