Export and monitor public Apple App Store reviews across 50 major markets, with rating, date, version, and keyword filters plus helpful votes and enriched app metadata.
Apple App Store Reviews Scraper saves one public review per dataset row. Use it for ASO, product feedback mining, release monitoring, support triage, competitor review analysis, and mobile app intelligence.
At a glance
- Input: Apple App Store URLs or numeric app IDs in
appUrlsOrIds. - Output: review text, rating, version, date, helpful votes, stable record ID, app metadata, and source feed URL.
- Controls: one or many countries, 50 major markets, rating/date/version/keyword filters, concurrency, review caps, and incremental monitoring.
- Exports: download JSON, CSV, Excel, XML, RSS, or HTML, or read results through API/MCP.
- Best for: ASO analysis, post-release monitoring, competitor review mining, and support issue triage.
What can it do?
- Export public app reviews: Save one row per public Apple App Store review for one or more apps.
- Filter by country and sort: Use localized review feeds and choose recent or helpful review ordering.
- Compare markets in one run: Collect several storefronts or a curated set of 50 major App Store markets.
- Filter before export: Keep selected ratings, dates, versions, or review keywords.
- Track ratings and versions: Capture star ratings, review text, dates, version labels, and public author display names.
- Monitor new reviews: Compare with a previous dataset, save only new stable review IDs, and read
CHANGE_SUMMARYplus per-market diagnostics. - Add app metadata: Include app identity, genre, ratings, current version, release notes, icon, price, and currency when available.
- Use as an App Store reviews API workflow: Run from API, schedules, webhooks, or MCP-compatible agents and export CSV/Excel/JSON.
Input example
{
"appUrlsOrIds": ["https://apps.apple.com/us/app/whatsapp-messenger/id310633997"],
"countries": ["us", "gb"],
"sortBy": "mostrecent",
"maxReviewsPerApp": 20,
"minRating": 1,
"maxRating": 3,
"keywords": ["crash", "subscription"],
"includeAppMetadata": true
}
Output example
{
"appId": "310633997",
"appUrl": "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
"country": "us",
"appName": "WhatsApp Messenger",
"developerName": "WhatsApp Inc.",
"recordId": "apple-review:310633997:us:14177411298",
"outputSchemaVersion": "1.0",
"reviewId": "14177411298",
"reviewUrl": "https://itunes.apple.com/us/review?id=310633997&type=Purple%20Software",
"authorName": "Example reviewer",
"authorUri": "https://itunes.apple.com/us/reviews/id123456789",
"rating": 4,
"voteSum": 0,
"voteCount": 0,
"version": "25.12.0",
"title": "Example review title",
"content": "Example public review text...",
"updatedAt": "2026-06-13T04:03:53-07:00",
"sortBy": "mostrecent",
"status": "ok",
"bundleId": "net.whatsapp.WhatsApp",
"genre": "Social Networking",
"averageUserRating": 4.7,
"userRatingCount": 18000000,
"currentVersion": "25.12.0",
"sourceFeedUrl": "https://itunes.apple.com/us/rss/customerreviews/page=1/id=310633997/sortby=mostrecent/json",
"scrapedAt": "2026-07-03T00:00:00.000Z"
}
Who is it for?
- ASO and growth teams tracking review language, ratings, and country-level product feedback.
- Product managers and support teams monitoring new issues after releases or app-store experiments.
- Competitive-intelligence analysts comparing public review themes across multiple mobile apps.
- Data and AI teams feeding public review text into tagging, summarization, sentiment, or alerting workflows.
Common workflows
- Release monitoring: schedule
mostrecentreviews after each app update and compareversion,rating, andcontent. - ASO review mining: export review text by country to identify feature language, complaints, and competitor positioning.
- Support triage: collect low-star review text and route common issues to support or engineering.
- Competitor analysis: run several app IDs with the same country and cap, then compare themes and ratings.
- Downstream AI analysis: send
title,content,rating,version, andupdatedAtinto tagging or summarization workflows.
Incremental review monitoring
Run once to create a baseline dataset. On the next run, select that dataset in compareDatasetId; optionally enable onlyNewReviews. The Actor writes:
RUN_SUMMARYwith pages fetched, reviews scanned and saved, filter counts, duplicates, existing-review skips, failures, retries, andSUCCEEDEDorPARTIALstatus.CHANGE_SUMMARYwith baseline/current/new/removed/unchanged counts and stable IDs.
For recurring monitoring, schedule a small mostrecent run. Update the task's baseline periodically when you want comparison against the latest accepted snapshot.
Tips for best results
- Use numeric IDs when possible: App Store URLs work, but IDs are easiest to reuse in scheduled tasks.
- Start with a few countries: review availability and language vary by storefront; use
maxAppCountryPairsto control global sweeps. - Keep first runs small: start with 20-50 reviews per app before increasing to 500.
- Use sort intentionally:
mostrecentis best for monitoring;mosthelpfulis useful for evergreen review samples. - Expect optional fields: author URI, review URL, version, and app metadata can be missing for some rows.
Limits and caveats
- Public reviews only: the actor does not log in and does not collect private Apple account data.
- Feed limits: Apple review feeds may expose fewer rows than your requested cap, often up to about 500 per country/sort combination.
- Metadata is optional: review rows can still be saved if app metadata lookup is unavailable.
- No ratings aggregate history: the actor exports review rows, not complete historical rating curves.
- No developer replies: Apple's public RSS review feed does not expose developer responses.
API usage
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/apple-app-store-reviews-scraper').call({
appUrlsOrIds: ['https://apps.apple.com/us/app/whatsapp-messenger/id310633997'],
country: 'us',
sortBy: 'mostrecent',
maxReviewsPerApp: 20,
includeAppMetadata: true
});
console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/apple-app-store-reviews-scraper').call(run_input={
'appUrlsOrIds': ['https://apps.apple.com/us/app/whatsapp-messenger/id310633997'],
'country': 'us',
'sortBy': 'mostrecent',
'maxReviewsPerApp': 20,
'includeAppMetadata': True,
})
print(run['defaultDatasetId'])
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~apple-app-store-reviews-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"appUrlsOrIds":["https://apps.apple.com/us/app/whatsapp-messenger/id310633997"],"country":"us","sortBy":"mostrecent","maxReviewsPerApp":20,"includeAppMetadata":true}'
MCP and AI agents
Focused Apify MCP server URL:
https://mcp.apify.com?tools=fetch_cat/apple-app-store-reviews-scraper
Add the focused server to Claude Desktop/Claude Code:
claude mcp add apple-app-store-reviews "https://mcp.apify.com?tools=fetch_cat/apple-app-store-reviews-scraper"
Or configure an MCP client with JSON:
{
"mcpServers": {
"apple-app-store-reviews": {
"url": "https://mcp.apify.com?tools=fetch_cat/apple-app-store-reviews-scraper"
}
}
}
Example prompts showing MCP usage:
- "Collect the 20 newest US App Store reviews for this app, then group complaints by app version and rating."
- "Compare recent low-star reviews for these two app IDs and summarize recurring subscription complaints."
- "Run a small multi-country review monitor and return the dataset link plus the CHANGE_SUMMARY."
Support
If a run fails or a field looks wrong, report it from the Actor page. Include the Apify run ID or run URL, input JSON, expected output, actual output, and one public App Store URL that reproduces the problem.