App Store Monitor — Competitor iOS App Tracking
Pricing
from $10.00 / 1,000 app change detecteds
App Store Monitor — Competitor iOS App Tracking
Track any iOS app across storefronts and get only what changed: new versions with release notes, price moves, rating shifts, delistings and fresh reviews.
Pricing
from $10.00 / 1,000 app change detecteds
Rating
0.0
(0)
Developer
Mohanad Alshaka
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Watch any iOS app and get only what changed since your last run: new versions with their release notes, price moves, rating shifts, delistings, and the fresh reviews behind a rating drop.
Point it at your competitors, schedule it daily, and each run returns a short list of what moved instead of a fresh dump of the same app records.
Why this one is reliable
It reads Apple's own public endpoints. No key, no login, no proxies, no browser, nothing scraped from a page layout that changes when Apple restyles the store.
lookup https://itunes.apple.com/lookup?id=<id>&country=<cc>search https://itunes.apple.com/search?term=<q>&entity=software&country=<cc>reviews https://itunes.apple.com/<cc>/rss/customerreviews/page=<n>/id=<id>/sortBy=mostRecent/json
Storefronts are tracked separately, because they differ
Price, currency and rating are per storefront. Measured on the same app on the same day, 13 September 2026:
| Storefront | Rating | Ratings |
|---|---|---|
| us | 4.69 | 29,477,391 |
| gb | 4.70 | 4,207,382 |
| de | 4.59 | 2,484,997 |
| ae | 4.50 | 955,986 |
| sa | 4.34 | 2,350,179 |
A tool that reports one global number for an app is hiding the thing you are usually looking for. Each storefront gets its own baseline here.
What a change row looks like
{"country": "us","changeType": "became_free","reasons": ["became_free", "rating_fell"],"title": "WhatsApp Messenger","previousPrice": 9.99,"price": 0,"formattedPrice": "Free","previousRating": 5.08,"averageUserRating": 4.68,"ratingMove": -0.4,"newRatingsSinceLastRun": 1043,"previousVersion": "26.35.73","version": "26.35.74","releaseNotes": "Bug fixes and performance improvements.","url": "https://apps.apple.com/us/app/..."}
Change types: new_version, price_drop, price_rise, became_paid, became_free, rating_fell, rating_rose, title_change, developer_change, screenshots_changed, size_changed, delisted, new_app, first_seen.
Three details that matter in practice
Rating noise is filtered. An app with 29 million ratings drifts in the fourth decimal every single day. Reporting that as a change buries the real signal, so a move has to clear ratingDelta (0.05 by default) before it counts.
Delisting is detected. An app that answered last run and returns nothing now has been pulled from that storefront. That is often the most valuable thing this Actor tells you, and a diff that only walked the current results would never surface it.
A search-ranking drop is not a delisting. Only apps you explicitly listed in apps can be reported as delisted. Apps discovered through searchTerms falling out of the results are a ranking move, and are never mislabelled as removals.
Every row carries the same fields, including delisted rows, so CSV exports stay rectangular.
Input
| Field | What it does |
|---|---|
apps | Numeric IDs, bundle IDs, or apps.apple.com URLs. All three work and can be mixed. |
searchTerms | Discover apps by keyword instead of naming them, to watch a whole category. |
countries | Two-letter storefront codes. Each is tracked separately. |
mode | changes returns only what moved. snapshot returns everything each time. |
stateKey | Names the saved baseline. One key per watchlist. |
ratingDelta | How far the average must move before it counts. Default 0.05. |
includeNewReviews | Attach recent reviews to changed apps, so a rating drop arrives with the reviews that caused it. |
Daily competitor watch
{"apps": ["389801252","com.spotify.client","https://apps.apple.com/us/app/id310633997"],"countries": ["us", "gb", "sa"],"mode": "changes","stateKey": "competitors","includeNewReviews": true}
The first run records the baseline. Every run after returns just the moves.
Watch a whole category
{"searchTerms": ["habit tracker", "meditation"],"countries": ["us"],"maxAppsPerSearch": 50,"mode": "changes"}
Notes and limits
- Public App Store data only. No developer account, no App Store Connect credentials, nothing behind a login.
- Reviews come from Apple's public RSS feed, which serves the 50 most recent per page and does not expose the full review history.
ratingDeltaapplies to the average star rating.newRatingsSinceLastRunis always reported exactly, whatever the delta.changesmode keeps its baseline in a named key-value store. Deleting that store resets it and the next run reportsfirst_seenagain.
Development
npm installnpm testnode src/main.js