Monitor New App Store Reviews for Your App Every Day
Get each day's new App Store reviews of your app in several countries with App Store Reviews Scraper, plus an alert for every 1 and 2 star review.
The actor referenced in this article. Pay only for results delivered.
Most app teams read their App Store reviews when someone remembers to, which means a bad release can collect a week of one-star reviews before anyone connects them to the build that caused them. Each country’s App Store keeps its own reviews, so checking five markets by hand every morning is five lists to scroll, and the habit rarely survives the second week.
Try it live: App Store Reviews Scraper: iOS Reviews from 174 Countries. Pay per result delivered. Failed and empty results are never charged.
This guide schedules the App Store Reviews Scraper to read your app’s newest reviews in your main countries every morning, return only reviews it has not given you before, and alert you to every 1 and 2 star review.
What you get and who it is for
One row per review. For a daily alert, these fields carry the signal:
| Field | Why it matters here |
|---|---|
rating | Stars, 1 to 5; the alert filter |
title, text | What went wrong, in the reviewer’s words |
app_version | The build the review was written on, to tie a spike to a release |
country | Which App Store the review came from |
reviewed_at | Review date, ISO 8601 UTC |
review_id | Apple’s own id, stable across runs |
app_rating, app_ratings_count | The app’s average and rating count in that country |
sort | mostRecent for live reviews, featured for the fallback described below |
Product managers use it to catch a broken release early, support teams to find users who need a reply, and agencies to send clients a morning digest without logging in to anything.
The input
{
"apps": ["324684580"],
"countries": ["us", "gb", "ca", "au", "in"],
"maxReviewsPerCountry": 500,
"sort": "mostRecent",
"onlyNewReviews": true
}
appstakes the numeric App Store id (the number at the end of the app’s App Store link) or the link itself. Spotify’s id stands in for yours here.countriesare two letter codes, each read separately. A country where the app is not sold is skipped and never charged.maxReviewsPerCountryat 500 is the whole most recent list Apple’s feed offers for one country. WithonlyNewReviewson, reading stops at the first page of reviews you already have, so a high cap costs nothing on a quiet day.sortset tomostRecentis the order to use for monitoring.onlyNewReviewsskips every review an earlier run of this actor in your Apify account already delivered, and does not charge for it.
What the output looks like
Two rows, trimmed, from our run on October 7, 2026: WhatsApp and Spotify in the US, 100 most recent reviews each, with onlyNewReviews off. Reviewer names are masked here; the dataset has them in full.
[
{
"app_id": "324684580",
"app_name": "Spotify: Music and Podcasts",
"country": "US",
"review_id": "14632280511",
"user_name": "H**********",
"rating": 2,
"title": "Ads",
"text": "Absolutely way too many ads it used to be 2 and now it’s 5",
"app_version": "9.1.88",
"reviewed_at": "2026-10-05T22:55:45.000Z",
"vote_sum": 0,
"vote_count": 0,
"app_rating": 4.77,
"app_ratings_count": 42454826,
"sort": "mostRecent",
"position": 11,
"scraped_at": "2026-10-07T11:13:00.726Z"
},
{
"app_id": "310633997",
"app_name": "WhatsApp Messenger",
"country": "US",
"review_id": "14630614023",
"user_name": "G***********",
"rating": 1,
"title": "HORRIBLE APP BANNED ME FOR NO REASON",
"text": "I got banned after only 1 week of using the app they didn’t say why or what I did just banned me and said I can’t appeal",
"app_version": "26.39.73",
"reviewed_at": "2026-10-05T13:29:50.000Z",
"app_rating": 4.68,
"app_ratings_count": 18723283,
"sort": "mostRecent",
"position": 27
}
]
The recent stream is much harsher than the store average. In that run, 41 of WhatsApp’s 100 newest US reviews had 1 or 2 stars, while its US average stood at 4.68 across 18,723,283 ratings. Spotify had 20 of 100 against a 4.77 average. app_version splits the damage by release: 14 of WhatsApp’s 30 reviews on 26.39.73 were low, against 27 of 70 on 26.38.74. And Spotify’s 100 reviews were all written in under six hours on October 5, the newest about 36 hours old when the run started, which is the delay to expect from Apple’s feed.
Run it in Apify Console
- Open https://apify.com/themineworks/app-store-reviews-scraper and click Try for free.
- In Apps, enter your app’s id or App Store link, one per line.
- In Countries, enter your markets, one two letter code per line.
- Set Max reviews per app in each country to 500 and Sort to Most recent first.
- In the Schedules section of the form, switch on Only reviews not delivered before.
- Click Start, read the rows in the Output tab, then click Export for CSV, JSON or Excel.
A test run in the same Apify account counts as an earlier run: reviews it delivered will not come back in the scheduled run.
Run it from Python
pip install apify-client, then:
import csv
import json
import os
import urllib.request
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("themineworks/app-store-reviews-scraper").call(run_input={
"apps": ["324684580"],
"countries": ["us", "gb", "ca", "au", "in"],
"maxReviewsPerCountry": 500,
"sort": "mostRecent",
"onlyNewReviews": True,
})
new_reviews, alerts = [], []
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("_type") == "info":
continue # the run summary row, never billed
if item.get("sort") == "featured":
continue # store page fallback: old helpful reviews, not new ones
new_reviews.append(item)
if item["rating"] <= 2:
alerts.append(item)
print(f"{len(new_reviews)} new reviews, {len(alerts)} with 1 or 2 stars")
fields = ["reviewed_at", "country", "rating", "app_version", "title", "text", "review_id"]
with open("low_star_reviews.csv", "a", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=fields, extrasaction="ignore")
if f.tell() == 0:
writer.writeheader()
writer.writerows(alerts)
webhook = os.environ.get("SLACK_WEBHOOK_URL")
if webhook and alerts:
lines = [f"{a['rating']}/5 {a['country']} v{a.get('app_version', '')}: {a['title']}"
for a in alerts[:25]]
body = json.dumps({"text": "\n".join(lines)}).encode("utf-8")
req = urllib.request.Request(webhook, data=body,
headers={"Content-Type": "application/json"})
urllib.request.urlopen(req)
The script appends every low-star review to low_star_reviews.csv, so the file becomes a running log you can chart by app_version or country. If a SLACK_WEBHOOK_URL environment variable holds a Slack incoming webhook, the first 25 alerts of the day are posted as one message. Swap that block for email or a ticket in your support tool if you prefer.
Run it every morning
In Apify Console, save the input above as a task, open Schedules, create a schedule with the cron expression 0 7 * * * (every day at 07:00) and pick the task. onlyNewReviews makes each run deliver only what arrived since the last one. To get the rows out without your own script, Apify’s Google Sheets integration can add each run’s rows to a sheet, a webhook on a successful run can call your own endpoint, and Make, Zapier or n8n can forward 1 and 2 star reviews to Slack or email. If you run the Python script instead, a daily cron line on any machine does the same job.
What it costs
$0.10 per 1,000 reviews on the Bronze plan, and the same $0.10 on Silver, Gold and the higher plans, plus a flat $0.005 per run. Say your app collects 200 new reviews a day across the five countries: 6,000 reviews a month cost $0.60, plus 30 start fees of $0.005, $0.15, for $0.75 a month. The first run brings the backlog, at most 500 reviews in each of five countries, 2,500 reviews for $0.25. A day with nothing new costs the $0.005 start fee and nothing else.
Limits worth knowing
- Apple’s feed holds the 500 most recent reviews per country. Spotify’s US pace on October 5 was 100 reviews in under six hours, so an app that busy is close to the 500 cap with one run a day and safer with two in its largest market.
- Expect about a day between a review being written and it reaching the feed.
- Apple sometimes answers with an empty feed. If it stays empty for a country, the actor delivers the 10 featured reviews from the App Store page, marked
featured, withoutapp_versionor votes. Three of our seven runs from October 5 to 7, 2026 got this fallback for at least one app and country. Reviews missed that day were never delivered, so the next run still picks them up while they are within the latest 500. - Developer responses only appear on the 10 featured reviews, so a most recent run will not show whether your team has replied.
- App Store only. Google Play reviews need a different actor, such as https://apify.com/themineworks/app-reviews-monitor.
Related
- Compare an App’s App Store Reviews Across Countries, the companion guide for market by market analysis
- Building a review monitoring pipeline, the same daily pattern applied to Trustpilot
- Mining 1-star reviews to validate an idea, for what to do with the complaints you collect
- App Store Reviews Scraper on The Mine Works
Explore the scraper referenced in this article: inputs, outputs, and pricing, then run it on Apify.
Frequently asked questions
What does a day with no new reviews cost? +
Only the $0.005 run start fee. With onlyNewReviews on, reviews you already received are skipped and never charged, and each country stops at the first page that holds nothing new.
What happens on the first run with onlyNewReviews on? +
Nothing has been delivered to your account yet, so the first run returns the full recent list, up to maxReviewsPerCountry in each country. From the second run on, you get only reviews that earlier runs did not deliver.
How soon after it is written does a review show up? +
Expect about a day. In our runs the newest review in Apple's public feed was roughly 24 to 36 hours old, so each run mostly brings reviews written one to two days earlier.
Can I watch several apps in one run? +
Yes. List up to 200 apps, by id or App Store link, and each one is read in every country you list. Every row carries app_id and app_name, so one alert script can cover them all.
Compare an App's App Store Reviews Across Countries
Read one app's App Store reviews in many countries in one run with App Store Reviews Scraper, then compare ratings and top complaints country by country.
Track Daily Rank Changes in an Amazon Best Sellers Category
Run Amazon Bestsellers Scraper every morning, diff each ASIN's rank against yesterday, and flag new entrants, drop outs and big movers in Python.
Track New People at Your Target Accounts Every Week
Schedule B2B Leads Finder in monitor mode so each weekly run returns only people you have not been sent before, and never bills the same person twice.
Trustpilot Business Search: Discover Companies by Category with TrustScore Data
Search Trustpilot by category or keyword in Python to build company lists with TrustScore, review count and verification status, no login required.