App Review Radar - Apple App Store & Podcast Review Monitor
Pricing
$4.00 / 1,000 review record returneds
App Review Radar - Apple App Store & Podcast Review Monitor
Monitor Apple App Store apps & Apple Podcasts shows for new customer reviews, correlate complaints to app versions, tag sentiment themes, and get a 'what changed since last run' delta digest. Pure HTTP on Apple's official zero-auth APIs — no browser, no proxies, cheap and reliable.
Pricing
$4.00 / 1,000 review record returneds
Rating
0.0
(0)
Developer
CQ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
App Review Radar — Apple App Store & Podcast Review Monitor
Watch your app (and your competitors) on the Apple App Store and Apple Podcasts — and know exactly what changed since last time.
App Review Radar is an unattended review-intelligence monitor, not a one-off review dumper. Point it at one or many App Store app IDs (and/or Apple Podcasts show IDs), add a few competitor IDs, and each run returns the newest customer reviews enriched with version correlation, keyword-based complaint themes, rating deltas, and a "what changed since last run" digest.
It runs entirely on Apple's official, zero-auth public APIs (iTunes RSS Customer Reviews, iTunes Lookup, iTunes Search). No headless browser, no residential proxies, no login walls, no Cloudflare/reCAPTCHA. That means it keeps working unattended — and because it's pure HTTP, runs are cheap.
What it does
For every app/show × country you monitor, each run gives you:
- Latest customer reviews — author, star rating, title, content, the exact app version each review was left on, vote count/sum, and timestamp.
- Per-version breakdown — average rating + review count + top complaint themes grouped by the version reviews were left on, so you can pin complaints to a release.
- Theme breakdown — crash, login, price, ads, bug, performance, feature requests (fully customizable), counted from real review text with sample snippets.
- Rating deltas vs last run — movement in Apple's official
averageUserRatinganduserRatingCount, plus version-change detection. - Change digest + negative-spike flag — new reviews, spiking complaint themes, and an
isNegativeSpikealert when 1-2 star share jumps past your threshold.
State is persisted in the Apify key-value store, so the sinceLastRun delta works automatically across scheduled runs.
Inputs
| Field | Type | Description |
|---|---|---|
appIds | array | App Store numeric IDs or app URLs to monitor |
podcastIds | array | (optional) Apple Podcasts show IDs/URLs — same pipeline |
searchTerms | array | (optional) names resolved to IDs via iTunes Search |
competitorIds | array | (optional) competitors included for side-by-side comparison |
countries | array | 2-letter storefront codes (default ["us"]) |
maxPages | int | 1–10 pages per app per country (≈50 reviews/page) |
minRating / maxRating | int | (optional) star filter, e.g. only 1–2★ for support triage |
sinceLastRun | bool | only emit new reviews/changes since last run (default true) |
themeKeywords | object | (optional) custom theme → keyword groups |
includeAggregates | bool | also pull rating/version snapshot via iTunes Lookup (default true) |
negativeSpikeThreshold | number | fraction jump in 1–2★ share that flags a spike (default 0.15) |
Outputs
Each dataset item is one app/show × country, with:
| Field | Description |
|---|---|
appId, trackName, country, kind, role | identity + primary/competitor role |
sellerName, genres | publisher + categories |
averageUserRating, userRatingCount | Apple's official aggregate |
currentVersion, currentVersionReleaseDate | latest release info |
reviewsReturned, totalReviewsFetched, newReviewsCount | reported / fetched / new-since-last-run counts |
reviews[] | each with reviewId, author, rating, title, content, appVersion, voteCount, voteSum, updatedAt, country |
perVersionBreakdown[] | per app version: version, reviewCount, avgRating, topComplaintThemes[] |
themeBreakdown[] | theme, count, sampleSnippets[] (from real text) |
ratingDelta | averageUserRatingChange, userRatingCountChange, versionChanged, previousVersion vs last run |
changeDigest | newReviewsCount, isFirstRun, spikingThemes[], negativeShare |
isNegativeSpike | boolean alert when the 1–2★ share jumps past your threshold |
scrapedAt | ISO timestamp of the record |
A table view (Overview) summarizes app, rating, version, new reviews and spike flags.
Sample output (one dataset item, trimmed)
{"appId": "310633997","kind": "software","role": "primary","country": "us","trackName": "WhatsApp Messenger","sellerName": "WhatsApp Inc.","genres": ["Social Networking"],"averageUserRating": 4.68,"userRatingCount": 12873440,"currentVersion": "25.x.x","currentVersionReleaseDate": "2026-06-18T12:00:00Z","reviewsReturned": 37,"totalReviewsFetched": 120,"newReviewsCount": 37,"reviews": [{"reviewId": "1234567890","author": "someuser","rating": 1,"title": "Broken after update","content": "Crashes every time I open a chat now…","appVersion": "25.x.x","voteCount": 14,"voteSum": 12,"updatedAt": "2026-06-21T08:42:00Z","country": "us"}],"perVersionBreakdown": [{ "version": "25.x.x", "reviewCount": 19, "avgRating": 2.8, "topComplaintThemes": [{ "theme": "crash", "count": 11 }, { "theme": "login", "count": 6 }] }],"themeBreakdown": [{ "theme": "crash", "count": 11, "sampleSnippets": ["app keeps crashing right after the latest update…"] },{ "theme": "login", "count": 6, "sampleSnippets": ["can't verify my number since updating…"] }],"ratingDelta": { "averageUserRatingChange": -0.01, "userRatingCountChange": 2231, "versionChanged": false, "previousVersion": "25.x.x" },"isNegativeSpike": false,"changeDigest": { "newReviewsCount": 37, "isFirstRun": false, "spikingThemes": [{ "theme": "crash", "was": 4, "now": 11 }], "negativeShare": 0.32 },"scrapedAt": "2026-06-21T09:00:00Z"}
Example use cases
1. Indie dev — release regression triage. Schedule daily with appIds: ["YOUR_APP_ID"], minRating: 1, maxRating: 2. Every morning you get only the new 1–2★ reviews, grouped by the version they landed on — instantly see if your latest release spiked "crash" or "login" complaints.
2. ASO / app-marketing agency — competitive watch. appIds: ["CLIENT_ID"], competitorIds: ["RIVAL_1","RIVAL_2","RIVAL_3"], weekly cadence, countries: ["us","gb","de"]. Side-by-side rating deltas and theme breakdowns across storefronts for your weekly client report.
3. Podcast network — audience feedback monitor. podcastIds: ["SHOW_ID_A","SHOW_ID_B"], weekly. Track complaint themes and feature requests per show, with a digest of what's newly spiking.
Example input
{"appIds": ["389801252", "https://apps.apple.com/us/app/slack/id618783545"],"competitorIds": ["310633997"],"countries": ["us"],"maxPages": 10,"sinceLastRun": true,"includeAggregates": true}
Pricing
App Review Radar is pay-per-result — you're billed per dataset item produced (one result = one app/show × country, per run), not for compute minutes. Because it runs on Apple's free zero-auth APIs with no proxies or browser, runs are fast and lightweight (see the Pricing tab for the current rate).
That makes your cost predictable up front:
| What you monitor | Results / run | Daily for a month |
|---|---|---|
| 1 app, 1 country | 1 | ~30 results |
| 5 apps, 1 country | 5 | ~150 results |
| 5 apps + 3 competitors, 3 countries | 24 | ~720 results |
It scales linearly — add an app, a competitor, or a storefront and you add exactly one result each. The only other cost is a few seconds of Apify platform compute per run, which is minimal by design.
Why it's reliable & cheap
- Apple official APIs, zero auth — no Cloudflare, no reCAPTCHA, no fingerprinting. The same infrastructure that powers
apps.apple.com. - Pure HTTP GETs — no headless browser, no proxies, minimal compute → low cost per run, high margin on pay-per-result.
- Built-in request throttle (min 1.2s between calls) + exponential backoff on HTTP 429/503 to stay within Apple's per-IP limits.
- No mock data, ever — every field is derived from the live JSON for the IDs you supply.
Limitations
Please read these before scheduling — they reflect exactly what the code does and what Apple's public APIs expose.
- Review count / pagination cap. Reviews come from Apple's iTunes RSS Customer Reviews feed, which exposes at most 10 pages of ~50 newest reviews (≈500 reviews) per app, per country.
maxPages(1–10) caps this further. There is no way to page beyond that limit through these endpoints. - Newest-only, no historical guarantee. The RSS feed returns only the most recent reviews, sorted most-recent-first. Older reviews roll off and cannot be back-filled. This actor is a forward-looking monitor, not a full historical review exporter.
- Per-store rate limits. Apple applies per-IP rate limits (~20 req/min in practice). The actor enforces a minimum 1.2s gap between requests plus exponential backoff on HTTP 429/503, so large runs (many apps × many countries) take proportionally longer rather than failing.
- Country / language scoping. Reviews and aggregates are per storefront. You only get data for the
countriesyou list, and each storefront returns reviews in that region's language.averageUserRating/userRatingCountcome from iTunes Lookup for the requested country and reflect Apple's own (rounded) aggregate. - Theme tagging is keyword-based, not ML/sentiment.
themeBreakdown,perVersionBreakdown.topComplaintThemes, andisNegativeSpikeare computed by matching your (or the default) keyword groups against real review text and by 1–2★ share — there is no machine-learning sentiment model or LLM involved. - Static HTTP fetch bounds. Pure HTTP GETs against Apple's public JSON endpoints — no headless browser. If an ID is invalid, region-restricted, or exposes no reviews for a storefront, that target still emits one dataset record with
reviews: []and null aggregates (the run does not fail). - Delta state depends on the key-value store.
sinceLastRun,ratingDelta,changeDigest, andisNegativeSpikecompare against state saved in the actor's default key-value store (RUN_STATE). The first run (or any run after the store is reset) is treated as a full snapshot withchangeDigest.isFirstRun: trueand no rating delta. - Podcasts coverage. Apple Podcasts shows are monitored through the same RSS review pipeline and only return data where Apple exposes customer reviews for that show/storefront.
- No valid targets. If you supply no resolvable
appIds/podcastIds/competitorIds/searchTerms, the run does not crash — it emits a single marker record (status: "NO_TARGETS") and exits cleanly.
FAQ
Do I need an Apple developer account or any API key? No. It uses Apple's public, zero-auth endpoints — just supply the app/show IDs and run.
Will Apple block or rate-limit it?
It uses the same official APIs that power apps.apple.com, with a built-in request throttle (minimum 1.2s between calls) and exponential backoff on HTTP 429/503, so it stays within Apple's per-IP limits and keeps running unattended. Very large multi-app / multi-country runs simply take longer as a result.
How do I find an app's ID?
Paste the full App Store URL into appIds — the actor extracts the numeric ID for you (e.g. https://apps.apple.com/us/app/slack/id618783545). Or put a name in searchTerms and it resolves the ID via iTunes Search.
Does it really track Apple Podcasts too?
Yes — put show IDs/URLs in podcastIds; they run through the same review + theme + delta pipeline as apps.
How is "what changed since last run" calculated?
State is persisted in the Apify key-value store between runs, so each scheduled run emits only new reviews and flags spiking complaint themes via changeDigest and isNegativeSpike — no duplicate noise.
Can I watch multiple countries at once?
Yes — list storefront codes in countries (e.g. ["us","gb","de"]); each app × country is a separate result with its own reviews and deltas.
What's the best way to run it?
On an Apify schedule — daily for release-regression triage, weekly for competitive reports — with sinceLastRun: true, and let the digest do the watching for you.
Tip: run it on a daily or weekly schedule and let the sinceLastRun digest do the watching for you.