# App Store & Google Play Reviews Scraper API (`best_apis/app-store-play-reviews`) Actor

Scrape App Store and Google Play reviews, ratings and app details in one run. Unified JSON/CSV output, country and date filters, only-new-reviews monitoring. $0.30 per 1,000 reviews.

- **URL**: https://apify.com/best_apis/app-store-play-reviews.md
- **Developed by:** [A Q](https://apify.com/best_apis) (community)
- **Categories:** Marketing, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 25.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/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 API

**App Store & Google Play Reviews Scraper** extracts **app reviews, star ratings and app details from the Apple App Store and Google Play in one run**, in one unified format. Paste App Store URLs or IDs and Google Play URLs or package names, click **Start**, and download the reviews as JSON, CSV or Excel. Turn on **monitoring mode** to get **only new reviews since the last run**, which makes it an easy app review monitoring and alert tool.

### What can this app review scraper do?

- 🍏🤖 **Both stores in one Actor**: iOS App Store reviews and Android Google Play reviews, mixed freely in one input.
- 📝 **Review data**: rating, title, text, date, username, app version, helpful votes and developer reply.
- 📱 **App details**: title, developer, rating, ratings count, rating histogram, installs, price, version, last update, release notes, genre, content rating and screenshots.
- 🔔 **Only new reviews** mode remembers the newest review per app, so a daily schedule returns just what changed.
- 🌍 **Country and language** selection, a date filter (`reviewsSince`) and per-app limits.
- ⚡ **Fast and cheap**: about 1,200 reviews in under 10 seconds, at $0.30 per 1,000 reviews.
- 🔒 Public data only. No login, no cookies, no app developer account.

### Why use it?

- **App review analysis and sentiment**: feed reviews into a spreadsheet, BI tool or LLM to find bugs, feature requests and churn reasons.
- **ASO and competitor research**: compare ratings, histograms and release notes for your app and competitors.
- **Review alerts**: send new 1-star reviews to Slack or email for faster customer support.
- **Datasets**: build app store review datasets for machine learning and research.

On the Apify platform you also get scheduling, API access, monitoring, integrations and proxy rotation without managing servers.

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

1. Open the Actor and add apps in **Apps**, for example `https://apps.apple.com/us/app/duolingo-language-lessons/id570060128` and `com.duolingo`.
2. Set **Max reviews per app**, **Country** and **Language**.
3. Optional: set **Only reviews since date**, or enable **Monitoring mode** and add a daily schedule.
4. Click **Start** and export the results, or call the Actor through the API.

### Input

| Field | What it does |
|---|---|
| `apps` | App Store URLs or numeric IDs, Google Play URLs or package names |
| `maxReviewsPerApp` | Maximum reviews per app (default 100) |
| `includeReviews`, `includeAppDetails` | Choose reviews, app details or both |
| `country`, `language` | Store country (e.g. `us`, `gb`, `de`) and Google Play language |
| `reviewsSince` | Only reviews on or after this date |
| `onlyNewReviews`, `stateKey` | Monitoring mode and a name for each independent monitor |

```json
{ "apps": ["570060128", "com.duolingo"], "maxReviewsPerApp": 200, "country": "us", "language": "en", "onlyNewReviews": true }
```

### Output example

Real results from a run on Duolingo (long fields shortened). Reviews have `"type": "review"` and app records have `"type": "app"`.

#### Google Play review

```json
{
  "type": "review",
  "store": "google",
  "appId": "com.duolingo",
  "reviewId": "c8c7b388-8f86-4a1a-a369-cad23fb3dfb2",
  "userName": "Wizard lizard",
  "date": "2026-10-08T23:09:11.779Z",
  "rating": 4,
  "title": null,
  "text": "Yummy app, just wish that this damn bird stopped threatening me.",
  "appVersion": "6.100.3",
  "thumbsUp": 0,
  "replyText": null,
  "replyDate": null,
  "url": "https://play.google.com/store/apps/details?id=com.duolingo&reviewId=c8c7b388-8f86-4a1a-a369-cad23fb3dfb2",
  "country": "us",
  "language": "en"
}
```

#### App Store review

```json
{
  "type": "review",
  "store": "apple",
  "appId": "570060128",
  "reviewId": "14642278292",
  "userName": "merrickbaby",
  "date": "2026-10-08T14:44:10.000Z",
  "rating": 1,
  "title": "Annoying AF",
  "text": "I just had to click through over 10 things to get to the next module. 3-4 progress things, add a widget, add all of these pre selected friends with a button i almost accidentally hit, turn on notifications, commit to mai…",
  "appVersion": "7.142.0",
  "thumbsUp": 0,
  "replyText": null,
  "replyDate": null,
  "url": "https://apps.apple.com/us/app/id570060128",
  "country": "us",
  "language": null
}
```

#### App details (Google Play)

```json
{
  "type": "app",
  "store": "google",
  "appId": "com.duolingo",
  "bundleId": "com.duolingo",
  "title": "Duolingo: Learn Languages",
  "developer": "Duolingo",
  "developerId": "6957685454452609502",
  "url": "https://play.google.com/store/apps/details?id=com.duolingo&hl=en&gl=us",
  "icon": "https://play-lh.googleusercontent.com/tw_coGKgk1K_zO-Ypf9zBKV1s-KT3dYN1MIUxIqtnbfmON5x_YmuoAr31gE4oSfJHNtA-aStTd-qe9R8S6NVyA",
  "description": "Learn a new language, chess & more with the world’s most downloaded education app! Duolingo is the fun, free app for learning 40+ languages through qu…",
  "genre": "Education",
  "genres": [
    "Education"
  ],
  "price": 0,
  "currency": "USD",
  "free": true,
  "rating": 4.7367954,
  "ratingsCount": 50582618,
  "reviewsCount": 963789,
  "histogram": {
    "1": 1016971,
    "2": 365434,
    "3": 1164094,
    "4": 5821135,
    "5": 42214934
  },
  "installs": "500,000,000+",
  "minInstalls": 500000000,
  "version": "VARY",
  "released": "May 29, 2013",
  "updated": "2026-10-06T18:53:36.000Z",
  "releaseNotes": "Our mascot owl, Duo, is trading in his usual diet of mice for bugs this week. Yup, we’re squashing those pesky bugs to make the experience better for …",
  "contentRating": "Everyone",
  "containsAds": true,
  "offersIAP": true,
  "screenshots": [
    "https://play-lh.googleusercontent.com/twmCellsRXWs4bZsSXRv19x-3BIp19FzlQPdu_Va-zE10aL468HHFKJBvEOXo0g67Xsvl3nkIKnpjY7L62OOiA",
    "https://play-lh.googleusercontent.com/VtdxxfTA0xfkAgAj7iIr2DfvYJUoQctTvFDC_1xrX1NLm4d4av-xqaHMH8zqicW7AoXo56kT55LOQCW7gRFRyg",
    "https://play-lh.googleusercontent.com/2Oz7x5RCZOO5ZEpL8BmQDPxW-VoikeAXwOi-fRLWJGvM619evIcWE6QCPsGbW3XTeYeG-3CKcRTbedFtd71vVw"
  ],
  "country": "us",
  "scrapedAt": "2026-10-09T23:16:30.125Z"
}
```

### How much does it cost to scrape app reviews?

Pay only for results: **$0.30 per 1,000 reviews** and **$0.002 per app details record**. No monthly rental. Each run also has a $0.005 start fee (from October 25, 2026).

| Job | Approximate cost |
|---|---|
| 1,000 reviews for one app | about $0.30 |
| 10 apps × 500 reviews + app details | about $1.52 |
| Daily new-review monitor for 5 apps (≈50 new reviews/day) | about $0.60 per month (including start fees) |

Apify's free plan includes monthly credits, enough for thousands of reviews. Set a **maximum cost per run** and the Actor stops at that limit.

### How to use the API (Python, JavaScript, cURL)

Every run is available through the [Apify API](https://docs.apify.com/api/v2). Get your API token in **Apify Console → Settings → API & Integrations**.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("best_apis/app-store-play-reviews").call(run_input={"apps": ["570060128", "com.duolingo"], "maxReviewsPerApp": 100})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('best_apis/app-store-play-reviews').call({"apps": ["570060128", "com.duolingo"], "maxReviewsPerApp": 100});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### cURL (run and get reviews in one request)

```bash
curl -X POST "https://api.apify.com/v2/acts/best_apis~app-store-play-reviews/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apps": ["570060128", "com.duolingo"], "maxReviewsPerApp": 100}'
```

#### Integrations

Connect results to **Google Sheets, Slack, email, Zapier, Make, n8n, Airbyte, webhooks** or AI agents through the **Apify MCP server**. Use **Schedules** in Apify Console to run it hourly, daily or weekly. Export any dataset as **JSON, CSV, Excel, XML or HTML**.

### FAQ

**How do I export Google Play reviews to CSV or Excel?** Run the Actor and choose CSV or Excel in the **Export** menu of the dataset, or add `&format=csv` to the API dataset URL.

**Is there an App Store reviews API?** Apple offers no public reviews API for other developers' apps. This Actor works as an App Store reviews API: call it over HTTP and get JSON back.

**How many App Store reviews can I get?** Apple's public review feed returns up to about 500 of the most recent reviews per app per country. Run more countries to get more. Google Play has no such limit.

**Can I get only new reviews?** Yes. Enable **Monitoring mode** and schedule the Actor. Use a different **Monitor name** for each schedule.

**Can I scrape reviews in other languages or countries?** Yes. Set **Country** for both stores and **Language** for Google Play.

**Is it legal to scrape app reviews?** This Actor only collects publicly available data, does not log in and does not bypass paywalls. Scraping public data is generally legal, but personal data is protected by laws such as GDPR and CCPA, and you are responsible for how you use the results. If unsure, ask a lawyer. Read more in Apify's [guide to the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Related Actors

- [US Retail Price Scraper](https://apify.com/best_apis/us-retail-price-scraper): prices and stock from Walmart, Target, Best Buy, Home Depot and Lowe's
- [Walmart Scraper](https://apify.com/best_apis/walmart-product-price-scraper): Walmart products, prices, UPCs and a price tracker
- [Government Tenders Scraper](https://apify.com/best_apis/government-tenders-scraper): UK, EU TED and SAM.gov tenders with daily alerts
- [YouTube Transcript Scraper](https://apify.com/best_apis/youtube-transcript-scraper): bulk YouTube transcripts, subtitles and captions
- [Google Trends API](https://apify.com/best_apis/google-trends-api): interest over time, regions, related queries and Trending Now

Questions, bugs or feature requests? Open an issue on the **Issues** tab. We usually reply within 24 hours.

# Actor input Schema

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

App Store URLs/IDs (e.g. https://apps.apple.com/us/app/spotify/id324684580 or 324684580) and Google Play URLs/package names (e.g. com.spotify.music). Mix both stores freely.

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

Collect user reviews (newest first).

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

Upper limit of reviews per app. Apple's public feed exposes up to ~500 most recent reviews per country.

## `includeAppDetails` (type: `boolean`):

Output one app metadata record (title, rating, installs, version, price...) per app.

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

Two-letter country code, e.g. us, gb, de.

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

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

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

Optional. Skip reviews older than this date (YYYY-MM-DD).

## `onlyNewReviews` (type: `boolean`):

Remembers the newest review seen per app and returns only newer ones on the next run. Perfect for scheduled runs and alerts.

## `stateKey` (type: `string`):

Separate monitoring state per name, so different schedules don't interfere.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.spotify.music"
  ],
  "includeReviews": true,
  "maxReviewsPerApp": 100,
  "includeAppDetails": true,
  "country": "us",
  "language": "en",
  "onlyNewReviews": false,
  "stateKey": "default"
}
```

# Actor output Schema

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

Scraped records 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": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "com.spotify.music"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("best_apis/app-store-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",
        "com.spotify.music",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("best_apis/app-store-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",
    "com.spotify.music"
  ]
}' |
apify call best_apis/app-store-play-reviews --silent --output-dataset

```

## MCP server setup

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