App Review Radar - Apple App Store & Podcast Review Monitor avatar

App Review Radar - Apple App Store & Podcast Review Monitor

Pricing

$4.00 / 1,000 review record returneds

Go to Apify Store
App Review Radar - Apple App Store & Podcast Review Monitor

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

CQ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

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:

  1. Latest customer reviews — author, star rating, title, content, the exact app version each review was left on, vote count/sum, and timestamp.
  2. 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.
  3. Theme breakdown — crash, login, price, ads, bug, performance, feature requests (fully customizable), counted from real review text with sample snippets.
  4. Rating deltas vs last run — movement in Apple's official averageUserRating and userRatingCount, plus version-change detection.
  5. Change digest + negative-spike flag — new reviews, spiking complaint themes, and an isNegativeSpike alert 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

FieldTypeDescription
appIdsarrayApp Store numeric IDs or app URLs to monitor
podcastIdsarray(optional) Apple Podcasts show IDs/URLs — same pipeline
searchTermsarray(optional) names resolved to IDs via iTunes Search
competitorIdsarray(optional) competitors included for side-by-side comparison
countriesarray2-letter storefront codes (default ["us"])
maxPagesint1–10 pages per app per country (≈50 reviews/page)
minRating / maxRatingint(optional) star filter, e.g. only 1–2★ for support triage
sinceLastRunboolonly emit new reviews/changes since last run (default true)
themeKeywordsobject(optional) custom theme → keyword groups
includeAggregatesboolalso pull rating/version snapshot via iTunes Lookup (default true)
negativeSpikeThresholdnumberfraction jump in 1–2★ share that flags a spike (default 0.15)

Outputs

Each dataset item is one app/show × country, with:

FieldDescription
appId, trackName, country, kind, roleidentity + primary/competitor role
sellerName, genrespublisher + categories
averageUserRating, userRatingCountApple's official aggregate
currentVersion, currentVersionReleaseDatelatest release info
reviewsReturned, totalReviewsFetched, newReviewsCountreported / 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)
ratingDeltaaverageUserRatingChange, userRatingCountChange, versionChanged, previousVersion vs last run
changeDigestnewReviewsCount, isFirstRun, spikingThemes[], negativeShare
isNegativeSpikeboolean alert when the 1–2★ share jumps past your threshold
scrapedAtISO 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 monitorResults / runDaily for a month
1 app, 1 country1~30 results
5 apps, 1 country5~150 results
5 apps + 3 competitors, 3 countries24~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 countries you list, and each storefront returns reviews in that region's language. averageUserRating / userRatingCount come 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, and isNegativeSpike are 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, and isNegativeSpike compare 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 with changeDigest.isFirstRun: true and 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.