App Store Reviews Scraper - Apple Reviews by App and Country avatar

App Store Reviews Scraper - Apple Reviews by App and Country

Pricing

$0.50 / 1,000 reviews

Go to Apify Store
App Store Reviews Scraper - Apple Reviews by App and Country

App Store Reviews Scraper - Apple Reviews by App and Country

Apple App Store reviews for any apps across any countries, from Apple's own public review feeds: rating, title, text, version, author, votes, plus app details. One row per review, charged only per review delivered. No browser, no proxies needed.

Pricing

$0.50 / 1,000 reviews

Rating

0.0

(0)

Developer

Lee Kung

Lee Kung

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Categories

Share

App Store Reviews Scraper - Apple reviews by app and country, pay per review

App Store Reviews Scraper collects Apple App Store reviews for the apps you list, in the countries you choose: stars, title, text, app version, author, helpful votes and date, one row per review, plus an optional free app details row (name, seller, average rating, rating count, version, price). Give it App Store URLs or app ids; export JSON, CSV or Excel, or call it from code as an Apple App Store reviews API. You pay only per review delivered.

  • Apple's public sources, no login. Reviews come from Apple's public customer-review RSS feed, app details from Apple's public lookup endpoint. No Apple API key, no browser, no proxies.
  • Per country, most recent or most helpful: up to 500 reviews per app, storefront and sort order.
  • Star filter for only complaints (1-2 stars) or only praise. Filtered-out reviews are not charged.

What data you get

  • Review rows: rating (1-5), title, content, version (app version reviewed), author (public display name), author_url, updated (date), vote_sum / vote_count (helpful votes), review_id, app_id, country, sort, source.
  • App rows (free, optional): app_name, seller, bundle_id, primary_genre, price, currency, current_version, current_version_release_date, release_date, average_rating, rating_count, app_url, icon.

Use cases

  • Competitor research - what users of a rival app praise and complain about, country by country.
  • Complaint mining - only 1-2 star reviews, before a redesign or roadmap review.
  • Release monitoring - group reviews by version to see the reaction to a specific update.
  • Datasets for analysis or AI - review text plus stars, ready for sentiment or topic analysis.

How to use it (quick start)

  1. Open App Store Reviews Scraper in Apify Console.
  2. In Apps, paste App Store URLs or numeric ids. Set Countries and, if you want, a star range. Click Start.
  3. When the run finishes, open the Dataset tab and export to JSON, CSV or Excel.

From Python, JavaScript or cURL: see Use it from code.

Input

FieldWhat it doesDefault
apps (required)App Store URLs (id read from id310633997) or bare ids like 310633997. Duplicates read once.WhatsApp URL
countriesTwo-letter storefront codes, each read separately. Empty = the country in each URL (or us).["us"]
sortmostRecent or mostHelpfulmostRecent
maxReviewsPerAppStop after this many reviews per app and country (1-500)500
minRating / maxRatingStar range to keep; minRating 0 = all0 / 5
includeAppDetailsOne free app-details row per app and countrytrue
emptyRetrySecsSeconds to keep re-asking when an app and country come back empty (0-600). Raise to ~180 for scheduled runs; keep low for synchronous calls.25

Complaints only, two countries:

{
"apps": ["https://apps.apple.com/us/app/whatsapp-messenger/id310633997"],
"countries": ["us", "gb"],
"minRating": 1,
"maxRating": 2
}

Most helpful reviews in three storefronts:

{
"apps": ["310633997"],
"countries": ["de", "fr", "jp"],
"sort": "mostHelpful",
"maxReviewsPerApp": 200
}

Scheduled run with a longer retry window:

{
"apps": ["310633997"],
"countries": ["us"],
"maxReviewsPerApp": 100,
"emptyRetrySecs": 180
}

Output

Real rows from a default-input run (WhatsApp, us; run j0Q4sCh0e5QdasFmI, 2026-10-02 UTC): 1 app row (trimmed here) and 400 reviews.

[
{
"type": "app",
"app_id": "310633997",
"country": "us",
"app_name": "WhatsApp Messenger",
"seller": "WhatsApp Inc.",
"primary_genre": "Social Networking",
"price": 0,
"currency": "USD",
"current_version": "26.38.74",
"average_rating": 4.68372,
"rating_count": 18693516
},
{
"type": "review",
"app_id": "310633997",
"country": "us",
"sort": "mostRecent",
"source": "rss",
"review_id": "14613052160",
"title": "Indispuesta",
"content": "No me. Gusta. Que. Se me. Bloquean los chat despues. De tantos mensajes enviados al mes",
"rating": 2,
"version": "26.38.74",
"author": "Mal servicio en iphone",
"author_url": "https://itunes.apple.com/us/reviews/id1817769269",
"updated": "2026-09-30T18:14:26-07:00",
"vote_sum": "0",
"vote_count": "0"
}
]
FieldMeaning
typereview or app
source / sortrss with mostRecent/mostHelpful, or app_page with appPage for fallback rows
ratingStars, 1-5 (integer)
version, vote_sum, vote_countFeed values (votes come as strings); null on fallback rows
average_rating, rating_countOn app rows: Apple's figures for that country

Every run also writes a SUMMARY record: apps, countries, reviews delivered, seconds, whether the spending limit was hit, and any app/country pairs with no reviews (empty_app_countries).

Use it with AI agents (MCP)

Give an AI agent this Actor through Apify's hosted MCP server, with your Apify token as a Bearer header:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=actors,docs,leekung125/app-store-reviews-scraper",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Apify's docs also describe a browser sign-in flow without a token. Example prompt:

Get the 100 most recent 1- and 2-star App Store reviews for app 310633997 in the US and UK, and summarise the top complaints.

Use it from code

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("leekung125/app-store-reviews-scraper").call(run_input={
"apps": ["https://apps.apple.com/us/app/whatsapp-messenger/id310633997"],
"countries": ["us", "gb"],
"maxReviewsPerApp": 100,
})
items = client.dataset(run.default_dataset_id).list_items().items

JavaScript (npm i apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('leekung125/app-store-reviews-scraper').call({
apps: ['310633997'],
countries: ['us'],
minRating: 1,
maxRating: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

cURL (runs the Actor and returns the dataset items in one call):

curl -X POST "https://api.apify.com/v2/acts/leekung125~app-store-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"apps": ["310633997"], "countries": ["us"], "maxReviewsPerApp": 50}'

For synchronous calls like this one, keep emptyRetrySecs low. Schedules, webhooks and integrations (Make, Zapier, n8n, Google Sheets) work as they do for any Apify Actor.

Pricing

Pay per event: $0.0005 per review row delivered ($0.50 per 1,000 reviews). There is no separate charge for compute or platform usage on this Actor; you pay only the event price.

Reviews deliveredCost
1,0001,000 x $0.0005 = $0.50
10,00010,000 x $0.0005 = $5.00
100,000100,000 x $0.0005 = $50.00

The default-input run above delivered 400 reviews: 400 x $0.0005 = $0.20.

Never charged: app-details rows; reviews removed by your star filter; duplicate review ids; empty answers from Apple, including every retry inside emptyRetrySecs. If you set a maximum charge per run, the Actor stops at that limit and pushes only the reviews that were charged.

Limits and honesty notes

  • 500 per app, country and sort. The Actor reads Apple's feed pages 1 to 10, 50 reviews per page. For more coverage of a large app, run both mostRecent and mostHelpful, and each country.
  • The star filter is applied after reading, so a narrow star range returns only the matching reviews among those the feed exposes.
  • Apple's feed is sometimes empty. For some app/country pairs it answers with no entries for a while, then recovers. The Actor re-asks on a fresh connection (waits start at 3 s and double) until emptyRetrySecs runs out.
  • Fallback: about 10 reviews from the app page. If the feed stays empty for the whole window, the Actor reads the reviews on the app's public page instead - about 10, Apple's selection. Those rows have source: "app_page", sort: "appPage", null version, author_url and votes, and are charged as reviews.
  • Single empty pages. Apple can serve one empty feed page while other pages carry reviews. The Actor skips it and reads the rest; it does not re-request that page in the same run.
  • A succeeded run can have zero reviews for a pair. If feed and fallback both return nothing, the run still succeeds, that pair costs nothing, and it is listed in SUMMARY.empty_app_countries.
  • App not found in a country: the app row carries only app_id and country.
  • Public data only. Author names are the public display names Apple shows. Nothing behind a login is read.
  • Reliability, measured on our own runs: 126 of 127 runs in the last 30 days succeeded (our account's run history, read 2026-10-02); the one failure was an input with no valid app id, which fails by design. These are our own test and monitoring runs, not customer runs.

FAQ

Do I need an Apple API key or App Store Connect account? No Apple key or login. You do need an Apify account (and an Apify API token to call it from code).

Why did I get fewer reviews than maxReviewsPerApp? The app may have fewer reviews in that storefront; the feed reaches at most 500 per app, country and sort; your star filter removed some; Apple served some feed pages empty (they are skipped); the feed stayed empty for the whole emptyRetrySecs window and the Actor fell back to the ~10 reviews on the app's page (Apple's selection, no version or votes); or a spending limit stopped the run. The default WhatsApp/us run on 2026-10-02 returned 400 reviews with maxReviewsPerApp at 500. The run log shows each app and country.

What happens when Apple's feed returns nothing? The Actor retries for up to emptyRetrySecs (default 25 s), then tries the app's public page. If that is empty too, you get no review rows and no charge for that pair. For scheduled runs, set it higher, e.g. 180.

What is charged? Only review rows delivered, at $0.0005 each. See Pricing for what is free.

Is it legal to scrape App Store reviews? It collects public data Apple publishes without a login. You are responsible for lawful use and for Apple's terms, including data-protection rules for author names. Do not resell personal data.

Can I export to CSV or Excel? Yes. Open the run's Dataset tab and export as JSON, CSV or Excel, or fetch the items through the Apify API.

Can I run it on a schedule? Yes, with Apify schedules, like any Actor. Raise emptyRetrySecs (e.g. 180) for scheduled runs.

Can I use it from an AI agent / MCP? Yes, through Apify's hosted MCP server; see Use it with AI agents (MCP).

ActorWhat it does
Google Play Reviews ScraperAndroid app reviews from Google Play
Google Trends ScraperGoogle Trends interest, regional and related data
YouTube Transcript ScraperTranscripts for a list of YouTube videos
YouTube Channel TranscriptsEvery video of a channel or playlist, with transcript
YouTube Search ScraperKeyword to ranked YouTube video rows

Support

Open an issue on the Issues tab with the run ID and your input; we read every issue.