# App Store Reviews Scraper - All Countries (`olsols4/app-store-reviews-all-countries`) Actor

Scrape iPhone and iPad app reviews from all 155 App Store countries in one run. Filter by stars, date and keywords. App rating summary included. No proxy, no login.

- **URL**: https://apify.com/olsols4/app-store-reviews-all-countries.md
- **Developed by:** [Olly](https://apify.com/olsols4) (community)
- **Categories:** Developer tools, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.18 / 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.
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 Reviews Scraper - All Countries

**Scrape iPhone and iPad app reviews from all 155 App Store countries in a single run.** Most review scrapers only read one country at a time, so you miss what users in Germany, Brazil or Japan are saying. This Actor sweeps every storefront you choose, removes duplicates, and lets you filter by star rating, date and keywords.

✅ All 155 App Store countries in one run   ✅ Up to 500 reviews per country   ✅ Star, date and keyword filters   ✅ App summary row (rating, rating count, version)   ✅ No proxy, no login, no browser, so it's fast and cheap

### What can you use it for?

- **Product teams**: find every 1- and 2-star review mentioning "crash", "login" or "subscription" since your last release
- **Competitor research**: compare what users say about rival apps, country by country
- **ASO and marketing**: mine real user language for keywords, screenshots and store copy
- **AI and analytics**: feed clean review text into sentiment analysis, topic clustering or an LLM
- **Agencies**: monthly review reports for client apps across all their markets

### Quick start

Click **Start** with the prefilled input: it pulls the 20 newest Duolingo reviews from the US and UK stores in a few seconds for about **$0.01**. Then swap in your own app.

### How to scrape App Store reviews

1. Paste one or more **App Store URLs** (e.g. `https://apps.apple.com/us/app/duolingo/id570060128`), numeric IDs, or app names.
2. Pick **countries**: a list like `us, gb, de`, or `ALL` for every storefront.
3. Optional: set **star range**, **only reviews since** a date, or **keywords**.
4. Click **Start**. Download results as JSON, CSV, Excel or HTML, or pull them via API.

#### Input example

```json
{
  "apps": ["https://apps.apple.com/us/app/duolingo/id570060128"],
  "countries": ["ALL"],
  "maxReviewsPerCountry": 500,
  "maxRating": 2,
  "reviewsSince": "2026-09-01",
  "keywords": ["crash", "subscription", "refund"]
}
```

### Output

One row per review, plus one `type: "app"` summary row per app.

```json
{
  "type": "review",
  "appId": "570060128",
  "appName": "Duolingo - Language Lessons",
  "country": "DE",
  "reviewId": "11834467712",
  "rating": 2,
  "title": "Too many ads now",
  "text": "Since the last update I get an ad after every lesson...",
  "author": "Lena_92",
  "appVersion": "7.21.0",
  "voteCount": 3,
  "voteSum": 2,
  "date": "2026-10-12T08:41:17-07:00"
}
```

```json
{"type": "app", "appId": "570060128", "name": "Duolingo - Language Lessons", "developer": "Duolingo", "averageRating": 4.73, "ratingCount": 4500000, "version": "7.21.0", "genre": "Education", "url": "https://apps.apple.com/..."}
```

### How much does it cost?

Pay per result, no subscription, no proxy or compute surcharge. Paid Apify plans get Store discounts automatically:

| What you get | Free plan | Starter (Bronze) | Scale (Silver) | Business (Gold) |
|---|---|---|---|---|
| 1,000 reviews | $0.25 | $0.225 | $0.20 | $0.175 |
| App summary row (per app) | $0.002 | $0.0018 | $0.0016 | $0.0014 |

**Examples:** one app, all countries, newest 50 per country ≈ 4,000-7,000 reviews ≈ **$1.00-$1.75**. One app, 5 countries, 500 each = 2,500 reviews = **$0.63**. Countries with no reviews cost nothing.

### Use it via API

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("olsols4/app-store-reviews-all-countries").call(run_input={
    "apps": ["570060128"], "countries": ["us", "gb", "de"], "maxRating": 2})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["country"], item["rating"], item["title"])
```

Works with Make, Zapier, n8n, Google Sheets, Slack and webhooks through Apify integrations. Schedule it weekly to track new reviews.

### FAQ

**Why only 500 reviews per country?** Apple's public review feed returns the newest (or most helpful) 500 per country. Sweeping all countries is how this Actor gets you far more than a single-country scraper.

**Does it need a proxy or an Apple account?** No. It uses Apple's public review feed and lookup API.

**Can I get Google Play reviews?** Not in this Actor. It's built for the Apple App Store.

**Is it legal?** It reads publicly available review data that Apple publishes. Reviews contain user nicknames; handle them in line with GDPR and your local rules.

### Support

Found a bug or need a field? Open an issue on the **Issues** tab. Issues are answered within a few days.

# Actor input Schema

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

App Store links (https://apps.apple.com/us/app/duolingo/id570060128) or numeric app IDs (570060128). One per line.

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

App names to look up. The top App Store match for each name is used.

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

Two-letter App Store country codes (us, gb, de, fr, jp...). Enter ALL to sweep all 155 storefronts.

## `maxReviewsPerCountry` (type: `integer`):

Apple serves up to 500 reviews per country and sort order. Lower it for quick, cheap tests.

## `sortBy` (type: `string`):

Newest reviews first, or the ones most users found helpful.

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

Lowest star rating to keep (1-5).

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

Highest star rating to keep (1-5). Set to 2 to get only complaints.

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

A date (YYYY-MM-DD) or a relative period like "30 days". Older reviews are skipped.

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

Keep only reviews whose title or text mentions any of these words (case-insensitive).

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

Adds one row per app with average rating, rating count, version and developer ($0.002 per app).

## `maxConcurrency` (type: `integer`):

How many countries to fetch at once.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/duolingo/id570060128",
    "284882215"
  ],
  "searchTerms": [
    "spotify"
  ],
  "countries": [
    "us",
    "gb",
    "de",
    "fr"
  ],
  "maxReviewsPerCountry": 20,
  "sortBy": "mostrecent",
  "minRating": 1,
  "maxRating": 2,
  "reviewsSince": "30 days",
  "keywords": [
    "crash",
    "subscription",
    "refund"
  ],
  "includeAppDetails": true,
  "maxConcurrency": 8
}
```

# Actor output Schema

## `overview` (type: `string`):

Reviews in a table view.

## `apps` (type: `string`):

App summary rows.

## `allItems` (type: `string`):

Every row with every field.

# 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/duolingo/id570060128"
    ],
    "countries": [
        "us",
        "gb"
    ],
    "maxReviewsPerCountry": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("olsols4/app-store-reviews-all-countries").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/duolingo/id570060128"],
    "countries": [
        "us",
        "gb",
    ],
    "maxReviewsPerCountry": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("olsols4/app-store-reviews-all-countries").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/duolingo/id570060128"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "maxReviewsPerCountry": 20
}' |
apify call olsols4/app-store-reviews-all-countries --silent --output-dataset

```

## MCP server setup

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

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/p5oT4gjZaOVRRsvYb/builds/xXT5UVjdqJRImhjU1/openapi.json
