# App Store Reviews Scraper - iOS Reviews from 76 Countries (`pandabear/app-store-reviews-scraper`) Actor

App Store reviews scraper: get Apple App Store reviews from 76 countries via Apple's official feed, with app details and analytics: rating by version, country and month, plus top complaint keywords. $0.15 per 1,000 reviews.

- **URL**: https://apify.com/pandabear/app-store-reviews-scraper.md
- **Developed by:** [Andy zeng](https://apify.com/pandabear) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.15 / 1,000 review saveds

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 Reviews Scraper: All Countries + Analytics

**Scrape Apple App Store reviews for any iPhone, iPad or Mac app across 76 country storefronts, with app details and ready-made review analytics.** The actor uses Apple's **official public customer-reviews feed** and the **official iTunes Lookup/Search API**: no login, no cookies, no browser. Apple serves up to about 500 reviews per country and sort order, so scanning many countries and both sort orders collects far more reviews than a single-store scraper.

### Why this scraper

- **Many countries in one run.** Pick storefronts (`us`, `gb`, `de`, `jp` …) or enable **all 76 major countries**. Reviews are de-duplicated automatically.
- **More reviews per country.** The `both` sort option combines most-recent and most-helpful reviews, giving up to about 2× more unique reviews.
- **App details included:** overall rating, rating count, current version, release notes, price, genre, developer, size, languages and the App Store URL.
- **Analytics out of the box:** rating histogram, % negative reviews, average rating **by app version** (spot bad releases), **by country** and **by month**, plus **top complaint keywords** (1–2★) and **top praise keywords** (4–5★).
- **Flexible input:** App Store URLs, numeric IDs, bundle IDs (`com.burbn.instagram`) or plain app names.
- **Filters:** star rating range (for example, only 1–2★ reviews), a "since" date and a max reviews limit.
- **Fast and cheap:** about 2,000 reviews in about 10 seconds, at $0.15 per 1,000 reviews.

### Use cases

- **Product and UX teams:** find what users complain about after each release.
- **Competitor research:** compare ratings and complaints for competing apps across markets.
- **App Store Optimization (ASO):** mine review keywords and track rating trends by country.
- **Customer support and QA:** catch crash or login complaints early, filtered by version.
- **AI / LLM pipelines:** feed clean review text to sentiment analysis, topic clustering or RAG.
- **Market research:** see how an app is received in different countries.

### Input

| Field | Description | Default |
|---|---|---|
| `apps` | App Store URLs, app IDs, bundle IDs or app names | WhatsApp (sample) |
| `countries` | Two-letter storefront codes | `["us"]` |
| `allCountries` | Add 76 major storefronts | `false` |
| `maxReviewsPerApp` | Maximum reviews per app (all countries combined) | 50 |
| `sortBy` | `mostRecent`, `mostHelpful` or `both` | `mostRecent` |
| `reviewsSince` | Only reviews on or after this date | – |
| `minRating` / `maxRating` | Star rating filter | 1 / 5 |
| `includeAppDetails` | Save app details and analytics (`APPS` record) | `true` |
| `concurrency` | Parallel requests | 4 |

```json
{
  "apps": ["https://apps.apple.com/us/app/duolingo-language-lessons/id570060128", "com.burbn.instagram", "Notion"],
  "countries": ["us", "gb", "de", "fr", "jp"],
  "maxReviewsPerApp": 2000,
  "sortBy": "both"
}
```

### Output

**Dataset:** one record per review.

```json
{
  "appId": "310633997",
  "appName": "WhatsApp Messenger",
  "developer": "WhatsApp Inc.",
  "country": "us",
  "reviewId": "14707841268",
  "rating": 1,
  "title": "WhatsApp tiene problemas",
  "text": "De un tiempo para acá mi WhatsApp en iPhone 16 Plus ...",
  "appVersion": "26.41.75",
  "date": "2026-10-24T19:31:13-07:00",
  "userName": "Trébol ink",
  "voteSum": 0,
  "voteCount": 0,
  "appStoreUrl": "https://apps.apple.com/us/app/id310633997"
}
```

**`APPS` key-value record:** one entry per app with `details` (rating, rating count, version, price, genre, developer …) and analytics: `averageRating`, `ratingHistogram`, `negativeShare`, `byVersion`, `byCountry`, `byMonth`, `topComplaintKeywords` and `topPraiseKeywords`.

### Pricing (pay per event)

| Event | Price |
|---|---|
| Actor start (per run) | $0.005 |
| Review saved | $0.00015 (= $0.15 per 1,000 reviews) |
| App details and analytics (per app) | $0.003 |

10,000 reviews for one app across many countries cost about **$1.51**. Set a maximum cost per run, and the actor stops cleanly at your limit while keeping the results collected so far.

### FAQ

**Is this legal?** The actor reads Apple's public RSS review feed and the public iTunes Search/Lookup API, the same public data anyone sees on the App Store. It doesn't log in or bypass any protection. Use the data in line with privacy rules (reviewer nicknames are public pseudonyms).

**Why at most ~500 reviews per country?** That is the limit of Apple's public feed per storefront and sort order. Add more countries, or use `sortBy: both`, to get more.

**Does it support Google Play?** Not yet. This actor covers the Apple App Store (iOS, iPadOS and macOS apps).

**Need app search, top charts or keyword ranks?** Use [App Store Scraper - Search, Top Charts & Keyword Ranks](https://apify.com/pandabear/app-store-search-charts-scraper).

### Related actors by pandabear

- [App Store Scraper - Search, Top Charts & Keyword Ranks](https://apify.com/pandabear/app-store-search-charts-scraper): iOS apps by keyword, top chart, category or developer, with full details and ASO keyword rank tracking.
- [Bulk WHOIS & Domain Availability Checker](https://apify.com/pandabear/bulk-whois-domain-checker): registrar, creation and expiry dates, domain age, availability and DNS for thousands of domains.
- [Sitemap Extractor & SEO Index Audit](https://apify.com/pandabear/sitemap-seo-auditor): extracts every sitemap URL and finds 404, noindex and canonical problems.
- [Wayback Machine URL Extractor & Lost Page Finder](https://apify.com/pandabear/wayback-lost-url-finder): lists a domain's historical URLs, finds lost pages and suggests 301 redirects.
- [Website Contact Scraper - Emails, Phones, Socials & Tech Stack](https://apify.com/pandabear/website-contact-enrichment): emails, phones, social links, company info and tech stack from any list of websites.
- [Trending Topics Scraper - Google Trends, HN, Wikipedia & More](https://apify.com/pandabear/trending-topics-aggregator): trending topics from Google Trends, Hacker News, Wikipedia, GitHub, Bluesky, Baidu and more, with heat scores and cross-platform clusters.

***

### 中文说明

#### 这个工具做什么

抓取苹果 App Store 上任意 iPhone、iPad 或 Mac 应用的用户评论，最多可覆盖 76 个国家/地区的商店，同时附带应用详情和现成的评论分析。数据来自苹果**官方公开的评论 RSS 接口**和**官方 iTunes Lookup/Search API**，无需登录、无需 Cookie、无需浏览器。苹果每个国家、每种排序最多提供约 500 条评论，所以同时扫描多个国家和两种排序，能拿到比只抓单个商店多得多的评论。

#### 主要特点

- 一次运行覆盖多个国家，或开启"全部 76 个主要国家"，评论自动去重
- `both` 排序同时抓取"最新"和"最有帮助"两种评论，每个国家最多可多拿约一倍
- 应用详情：总评分、评分人数、当前版本、更新说明、价格、分类、开发者、大小、支持语言
- 自动分析：星级分布、差评占比、**按版本**的平均分（用来发现有问题的版本）、按国家和按月份的平均分、差评高频词和好评高频词
- 输入灵活：App Store 链接、数字 ID、bundle ID 或应用名称都可以
- 可按星级、日期、最大数量过滤
- 速度快、价格低：约 10 秒抓取约 2000 条，每 1000 条 $0.15

#### 适用场景

- 产品和用户体验团队：了解每个版本发布后用户在抱怨什么
- 竞品分析：跨国家对比竞品的评分和差评内容
- ASO（应用商店优化）：挖掘评论关键词，跟踪各国评分趋势
- 客服和测试：按版本筛选，尽早发现闪退、登录等问题
- AI/大模型：为情感分析、话题聚类、RAG 提供干净的评论文本

#### 输入参数

- `apps`：App Store 链接、应用 ID、bundle ID 或应用名称（必填）
- `countries`：国家代码，例如 us、gb、de、jp（默认 us）
- `allCountries`：加入全部 76 个主要国家（默认关闭）
- `maxReviewsPerApp`：每个应用最多抓多少条（所有国家合计，默认 50）
- `sortBy`：最新、最有帮助或两者都要
- `reviewsSince`：只抓这个日期之后的评论
- `minRating` / `maxRating`：星级范围（例如只抓 1-2 星差评）
- `includeAppDetails`：是否保存应用详情和分析结果（默认开启）

#### 输出

- 数据集：每条评论一条记录，包含应用、国家、星级、标题、正文、应用版本、日期、用户昵称、有用票数
- `APPS`：每个应用的详情和分析（星级分布、差评占比、按版本/国家/月份的平均分、差评和好评关键词）

#### 价格（按事件计费）

- 每次运行启动：$0.005
- 每保存一条评论：$0.00015（每 1000 条 $0.15）
- 每个应用的详情和分析：$0.003

可以设置单次运行的费用上限，达到上限后工具会正常停止并保留已有结果。

#### 常见问题

- **合法吗？** 只读取苹果公开的评论 RSS 和 iTunes 公开 API，和任何人在 App Store 上看到的数据相同，不登录、不绕过任何限制。评论者的昵称是公开的化名，使用时请遵守隐私相关规定。
- **为什么每个国家最多约 500 条？** 这是苹果公开接口的限制（每个国家、每种排序约 500 条）。想要更多，就多选几个国家，或使用 `sortBy: both`。
- **支持 Google Play 吗？** 暂不支持，本工具专门针对苹果 App Store。

#### pandabear 的其他工具

- [App Store Scraper - Search, Top Charts & Keyword Ranks](https://apify.com/pandabear/app-store-search-charts-scraper)：按关键词、排行榜、分类或开发者抓取苹果应用数据，并跟踪 ASO 关键词排名
- [Bulk WHOIS & Domain Availability Checker](https://apify.com/pandabear/bulk-whois-domain-checker)：批量查询域名注册商、注册和到期日期、域名年龄、是否可注册以及 DNS
- [Sitemap Extractor & SEO Index Audit](https://apify.com/pandabear/sitemap-seo-auditor)：提取网站全部 sitemap 网址，找出 404、noindex、canonical 等问题
- [Wayback Machine URL Extractor & Lost Page Finder](https://apify.com/pandabear/wayback-lost-url-finder)：提取域名的历史网址，找出丢失页面并给出 301 重定向建议
- [Website Contact Scraper](https://apify.com/pandabear/website-contact-enrichment)：从网站列表中提取邮箱、电话、社交媒体链接、公司信息和技术栈
- [Trending Topics Scraper](https://apify.com/pandabear/trending-topics-aggregator)：汇总 Google Trends、Hacker News、维基百科、GitHub、Bluesky、百度热搜等平台的热门话题，附热度分和跨平台聚类

# Actor input Schema

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

App Store URLs (https://apps.apple.com/us/app/.../id310633997), numeric app IDs, bundle IDs (com.example.app) or app names (the top search result is used).

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

Two-letter App Store country codes, e.g. us, gb, de, jp. Apple serves up to ~500 recent reviews per country, so add more countries to get more reviews.

## `allCountries` (type: `boolean`):

Add 70+ major App Store storefronts to the list above to collect as many reviews as possible.

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

Stop after this many reviews per app (all countries combined).

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

Most recent, most helpful, or both (both = up to ~2x more unique reviews per country).

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

Optional. Only reviews on or after this date, e.g. 2026-01-01.

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

E.g. set max rating 2 to collect only negative reviews.

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

Maximum star rating to keep.

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

Save app metadata (rating, rating count, version, price, genre, developer...) and review analytics per app to the APPS record.

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

Parallel requests to Apple. Keep it low to avoid rate limiting.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997"
  ],
  "countries": [
    "us"
  ],
  "allCountries": false,
  "maxReviewsPerApp": 50,
  "sortBy": "mostRecent",
  "minRating": 1,
  "maxRating": 5,
  "includeAppDetails": true,
  "concurrency": 4
}
```

# Actor output Schema

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

All collected reviews with rating, title, text, app version, date, country and votes.

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

Per app: metadata, rating histogram, average rating by version / country / month, top complaint and praise keywords.

# 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"
    ],
    "countries": [
        "us"
    ],
    "maxReviewsPerApp": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("pandabear/app-store-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"],
    "countries": ["us"],
    "maxReviewsPerApp": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("pandabear/app-store-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"
  ],
  "countries": [
    "us"
  ],
  "maxReviewsPerApp": 50
}' |
apify call pandabear/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

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