App Store Reviews Scraper
Pricing
from $0.06 / 1,000 results
App Store Reviews Scraper
Monitor new App Store and Google Play reviews for any app and country: rating, text, author, date, helpful votes and app version when the store gives it. Delta mode returns only reviews not seen in earlier runs, so scheduled runs get just the new ones. No login or API key.
Pricing
from $0.06 / 1,000 results
Rating
0.0
(0)
Developer
Axiom Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Returns: one row per Apple App Store review with reviewId, appId, country, rating, title, text, author and updated.
Input: {"appId":"310633997","country":"us","maxReviews":10,"mode":"full"}
Best for: tracking new feedback, triaging low ratings, and comparing reviews across releases.
{"reviewId": "14645059573","appId": "310633997","rating": 4,"title": "Apps","text": "It’s a good working app and I seriously enjoy it and how it’s been operating","author": "Kridarab","updated": "2026-10-09T08:46:38Z"}
See real output: https://api.apify.com/v2/datasets/KgDLGLlEGn7UrzPqE/items?format=json&clean=true
What does App Store Reviews Scraper do?
App Store Reviews Scraper returns one row per written review: rating, title, text, author, timestamp, and available version and helpful votes. It accepts app IDs or URLs, multiple apps and storefronts, and up to 10,000 reviews per target. Choose newest or most helpful order. Optional filters select rating ranges, dates, phrases and exact versions. Delta mode tracks new reviews across scheduled runs. The existing Google Play option remains available. No store login is needed.
What data can you get?
Each item is one written review. The reviewId is stable across runs, so you can use it as a primary key.
| Field | Description | Example |
|---|---|---|
reviewId | Apple review identifier, stable across runs | 14603402613 |
id | Same as reviewId; a stable unique key | 14603402613 |
appId | Apple numeric ID or Android package name | 310633997 |
country | Two-letter storefront country code | us |
sourceUrl | App Store reviews page for the app and storefront | https://apps.apple.com/us/app/id310633997?see-all=reviews |
author | Review author display name | Stve82v |
authorUrl | Public Apple reviewer profile URL when supplied; otherwise null. Profiles are not fetched. | https://itunes.apple.com/us/reviews?userProfileId=1709776423 |
rating | Star rating from 1 to 5 | 5 |
title | Headline of the review | WhatsApp |
text | Full body of the review | I need to update my chat |
version | App version the review was written for. Google Play: always when present. App Store: only for the newest ~500 reviews, and only when Apple's RSS feed answers; otherwise null | 26.37.76 |
voteCount | Helpful votes (App Store) or thumbs-up count (Google Play) | 0 |
voteSum | Net helpful votes (App Store only, null on Google Play) | 0 |
source | Store the review comes from: app-store or google-play | app-store |
replyText | Developer reply (Google Play only; present only when the developer replied) | Thanks for the feedback. |
isEdited | true if the author edited the review after posting | false |
updated | ISO 8601 timestamp of when the review was posted or last edited | 2026-09-28T13:34:56Z |
How to use
- Open the Actor in Apify Console and go to the Input tab.
- Enter the App Store app ID or paste the app's App Store URL. The ID is the number after
idin the URL, for example310633997inhttps://apps.apple.com/us/app/whatsapp-messenger/id310633997. - Choose the Store country (
us,gb,de,jpand so on) and how many reviews you want. - Pick a mode.
fullreturns reviews newest first (or most helpful first) every time.deltareturns only reviews not seen in earlier runs. Set star rating or date filters if you want a narrower dataset. - Click Start, then export the dataset as JSON, CSV, Excel, XML or HTML, or read it through the API. To track an app over time, save the input as a task with a schedule and mode
delta.
Input
Give appId (one app) or appIds (a list of up to 50 apps): numeric App Store IDs or App Store URLs, or Google Play package names such as com.whatsapp when store is google-play. If none is given or an ID is malformed, the run fails immediately with a clear message. country still works for one storefront; countries (up to 20) reads every app in every listed storefront.
| Field | Type | Default / prefill | Description |
|---|---|---|---|
keywords | array | [] | Keep title/text containing any phrase, case-insensitively. |
appVersion | string | empty | Keep this exact version; missing versions are excluded. |
store | string | app-store | app-store or google-play. |
appId | string | prefill 310633997 | Numeric App Store app ID, or the app's App Store URL (a Google Play package name when store is google-play). App names such as 'Spotify' are not accepted. |
appIds | array | empty | Optional list of apps to scrape in one run, each with its own delta state. One failing app does not fail the run. |
countries | array | empty | Optional list of two-letter country codes; replaces country when set. |
language | string | en | Language code for Google Play reviews. |
country | string | us | Two-letter lowercase country code of the App Store storefront, for example us, gb (United Kingdom, not uk), de, jp. |
mode | string | full | full returns the most recent reviews on every run. delta returns only reviews not seen in previous runs, tracked per app and country. The first delta run behaves like full. |
sort | string | recent | recent for newest first, helpful for Apple's most helpful reviews first. Delta mode always uses recent. |
minRating | integer | 1 | Keep reviews with at least this many stars (1-5). |
maxRating | integer | 5 | Keep reviews with at most this many stars (1-5). Must be at least minRating. |
sinceDate | string | empty | Keep reviews updated on or after this date (YYYY-MM-DD). |
untilDate | string | empty | Keep reviews updated on or before this date (YYYY-MM-DD). |
stateKey | string | empty (automatic) | Optional key under which delta mode remembers returned reviews in the review-firehose key-value store. Leave empty for one automatic key per app and country. |
maxReviews | integer | default 100, prefill 10 (1 to 10,000) | Maximum number of reviews to return per app and country in this run. |
maxItems | integer | empty | Optional run-wide result limit (1 to 10,000) across all apps and countries. maxReviews still limits each target. |
proxyConfiguration | object | Apify Proxy | Proxy settings. If Apple returns nothing for the proxy IPs, the Actor retries through residential proxies and then a direct connection. |
Example input for a scheduled delta run:
{"appId": "310633997","country": "us","mode": "delta","maxReviews": 500,"proxyConfiguration": { "useApifyProxy": true }}
Output
This App Store review was returned by a local run using the input above. Review text and author names are copied from the public feed.
[{"id": "14645059573","reviewId": "14645059573","appId": "310633997","country": "us","sourceUrl": "https://apps.apple.com/us/app/id310633997?see-all=reviews","author": "Kridarab","rating": 4,"title": "Apps","text": "It’s a good working app and I seriously enjoy it and how it’s been operating","version": "26.39.75","voteCount": 0,"voteSum": 0,"isEdited": false,"updated": "2026-10-09T08:46:38Z","source": "app-store"}]
Filter reviews by rating, date and content
Set minRating and maxRating to keep a range of star ratings, for example {"minRating":1,"maxRating":2} for one- and two-star reviews. sinceDate and untilDate bound the review's updated date, inclusive. The Actor reads pages until it has enough matching reviews, so a narrow filter can need more requests; only matching reviews are saved and charged. Set keywords to phrases such as ["crash", "login"] to keep reviews containing either phrase in the title or body, without changing the returned text. Unicode case folding supports non-English phrases. Set appVersion to an exact version string to focus on a release; reviews with missing versions are excluded. Both filters are off by default, combine with the rating/date bounds, and apply before saving. Apple version coverage remains limited to RSS matches. In delta mode the automatic state key includes the filters, so each filter combination keeps its own checkpoint; reuse a custom stateKey only with the same filters.
Where the reviews come from
Apple's storefront review feed at itunes.apple.com is the primary source, with up to 500 reviews per request. The apps.apple.com JSON reviews API and legacy RSS feed are fallbacks. RSS also supplies versions for recent matching review IDs when available. source identifies the store; SUMMARY in the default key-value store identifies the endpoint used per target. authorUrl is copied from the feed and can be null on fallback sources.
Google Play uses the store's web RPC (batchexecute, UsvDTd), newest first. Its publication delay can postpone new feedback. Google Play reviews have empty title and null voteSum; available versions and developer replies are preserved.
If an app or country cannot be read (wrong ID, app not sold in that country, Apple or Google blocking the IPs), the Actor logs the real cause at error level, lists it in SUMMARY and in the run's status message, and moves on to the next app. A run in which every target fails finishes with an empty dataset and a status message that says why; malformed input fails immediately.
Delta mode: only new reviews on scheduled runs
In delta mode the Actor keeps a list of the review IDs it has already returned in a named key-value store called review-firehose. On the next run it skips those and pushes only reviews it has not returned before. State is kept per app and country, and reading stops at the first page with nothing new. Skipped reviews are not charged.
Set up: run once in delta mode with a high maxReviews (for example 2,000) to load the backlog, then schedule the same task hourly or daily. Use stateKey only if two tasks for the same app and country need separate state.
Set maxReviews high enough to cover the reviews you expect between runs. Reviews are read newest first, so if more new reviews arrived than maxReviews, the run returns the newest ones and the next run picks up the rest: coverage only advances after a run that got everything, so a capped or interrupted run never leaves a gap. An empty delta run succeeds and suggests mode=full to repeat available reviews. Empty filtered runs suggest widening the rating or date bounds. Target errors suggest checking the app and country or retrying later. Each target has 75 seconds to produce its first matching review; blocked targets and filters with no matches then return control so the run can succeed. After its first saved review, normal pagination continues. Review IDs are deduplicated across targets as well as pages.
How much does it cost?
The Actor uses pay-per-event pricing: you are charged for each review saved to the dataset. A delta run with no new reviews saves nothing, so it adds no result charges. For the exact price per result on each plan, open the Pricing tab on the Actor page. You can also set a maximum cost per run, and the Actor stops when it is reached.
Use with AI agents (MCP)
App Store Reviews Scraper can be called by AI agents through Apify's MCP server at https://mcp.apify.com. Agents find it with the search-actors tool and run it with call-actor. To expose only this Actor to your client, add it to the MCP configuration of Claude, ChatGPT, Cursor or any MCP-compatible tool:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=axiomworks/app-store-reviews-scraper"}}}
Use it from an AI agent
Connect to Apify's hosted MCP server at https://mcp.apify.com and sign in with OAuth. Select the tool axiomworks/app-store-reviews-scraper. Ask: "Read ten US reviews for app 310633997, with maxItems 10." Set maxItems across all targets, then inspect the dataset and the uncharged RUN_SUMMARY record in the default key-value store. Each app/country entry has status ok, 0-items, blocked or invalid, a saved item count and a short reason. Invalid list entries are reported separately. A target skipped after the shared budget is exhausted has 0-items and an explicit reason. Malformed single-target input still fails validation; a valid target with no results succeeds.
Cap API spending through the run option maxTotalChargeUsd, rather than an Actor input:
curl -X POST "https://api.apify.com/v2/acts/axiomworks~app-store-reviews-scraper/runs?maxTotalChargeUsd=1" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"appId":"310633997","country":"us","maxItems":10}'
The run response identifies its default key-value store; read RUN_SUMMARY there after completion. Summary records create no result charges. Existing SUMMARY remains available.
Integrations and API
Start runs and read datasets over the Apify API with the snippets below.
Python:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("axiomworks/app-store-reviews-scraper").call(run_input={"appId": "310633997","country": "us","mode": "delta","maxReviews": 500,})for review in client.dataset(run["defaultDatasetId"]).iterate_items():print(review["rating"], review["title"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('axiomworks/app-store-reviews-scraper').call({appId: '310633997',country: 'us',mode: 'delta',maxReviews: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, 'new reviews');
cURL:
curl -X POST "https://api.apify.com/v2/acts/axiomworks~app-store-reviews-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"appId": "310633997", "country": "us", "mode": "full", "maxReviews": 50}'
The Actor works with Apify integrations and scheduled tasks.
FAQ
How many App Store reviews can I get? Up to 10,000 per run, per app and country. Popular apps have tens of thousands of reviews available, going back many months. Apple's RSS review feed stops at about 500 reviews per app and country; the main feed this Actor reads is not limited to it. Google Play shows reviews with a 24 hour delay.
Why did a delta run return nothing? No new reviews were posted since the last run. Switch to full mode to see the latest reviews again, or change stateKey to start a fresh state.
Why did a run return no reviews and say "No reviews for ..."? Either the app has no written reviews in that storefront, the app ID is wrong or not sold in that country, or the source is throttling the proxy IPs. The status message and the SUMMARY record list the cause for each source that was tried.
Can it fetch developer replies or ratings without text? Developer replies are returned for Google Play (replyText). Apple's feed does not carry developer responses. Star-only ratings without text are not returned on either store.
Is it legal to scrape the App Store?
The Actor reads publicly visible App Store and Google Play reviews, the same ones the stores show. It does not log in or access private data. Reviews can contain personal data such as author names, so make sure your use complies with privacy laws such as GDPR and CCPA and with Apple's terms. You are responsible for how you use the data you collect. This Actor is not affiliated with or endorsed by Apple or Google.
Feedback
Found a bug or need another field? Open an issue in the Issues tab of this Actor with your input and the run link.