App Store App Details Tracker - Ratings, Star Counts & Versions
Pricing
from $1.83 / 1,000 app details returneds
App Store App Details Tracker - Ratings, Star Counts & Versions
For ASO teams, app marketers and competitor trackers: exact rating count, count per star (5 to 1), rating, version, update date, price, size and chart rank of App Store apps. Matched the live store page on 5 of 5 apps checked 2026-09-21. Monitoring mode returns only apps that changed.
Pricing
from $1.83 / 1,000 app details returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
For ASO teams, app marketers and competitor trackers: the exact rating count, the count per star (5 to 1), the average rating, version, last update date, release notes, price, size, minimum OS, age rating and chart position of every App Store app in your list, one row per app. On 2026-09-21 the rating, rating count label, star bars, version, price and size matched what the live App Store page shows in a browser for 5 of 5 apps checked (Instagram, Facebook, Minecraft, Things 3, YouTube). Paste app ids or store URLs, get a clean table, and turn on monitoring mode to receive only the apps whose ratings, release or price changed since the last run.
Export as JSON, CSV or Excel. Unofficial. Public data only.
What it does
- Reads the public app page
https://apps.apple.com/<country>/app/id<id>for each app, in the country you choose. - Many apps per run (up to 1,000), from numeric ids (
389801252),id389801252or URLs, mixed. - Exact numbers from the app page itself. The store shows "30M Ratings"; the row has
ratingCount29507938 and the count for each star, which add up to exactly that total. - Does not fail on bad entries. An app that does not exist or is not sold in that country, an unknown country code, a block or a typo comes back as a free row that says why. The run carries on with the rest of the list.
- Monitoring mode remembers each app and returns only the apps whose rating, rating count, last update, version or price changed, with the previous value and the difference.
It only reads app pages on apps.apple.com, which its robots.txt allows. It does not use the iTunes lookup or search API or the review RSS feeds (robots.txt of itunes.apple.com disallows those for crawlers). Looking for Google Play? See the sister Actor Google Play App Details Tracker.
Input
| Field | What it does |
|---|---|
apps | App Store ids or app URLs. Bundle ids (com.burbn.instagram) are not accepted: turning them into an id needs the iTunes lookup API, which robots.txt disallows. A URL's own country (/jp/) wins over country for that app. Leave it out (with monitoring off) to read two example apps. |
country | Two-letter store country (us, gb, de, jp, in ...). The rating, rating count, count per star, price, currency and chart position are per country (Minecraft: 838,771 ratings in the US, 106,260 in Japan). Each page is in the store's own language; pageLanguage says which. |
maxApps | With monitoring off, stop after this many charged rows (a free row says how many entries were not read). |
monitoringMode | Return an app only when it changed since the row last returned for it. The first run returns every app once. |
changeOn | What counts as a change in monitoring mode: any, rating, release or price. |
resetMonitoringState | Forget everything remembered and start over (turn it off again after one run). |
useProxy | Retry a page through a datacenter proxy only when the App Store answers with a rate limit or a block. |
Example:
{"apps": ["389801252", "id570060128", "https://apps.apple.com/jp/app/minecraft/id479516143"],"country": "us","monitoringMode": true,"changeOn": "any"}
Output
One row per app. Example (Instagram, US, read on 2026-09-21 in the first monitoring run, so it is a first check; monitoring columns that are null on a first check are left out):
{"status": "ok","appId": "389801252","appUrl": "https://apps.apple.com/us/app/instagram/id389801252","country": "us","pageLanguage": "en-US","bundleId": "com.burbn.instagram","title": "Instagram","subtitle": "Videos, creators & friends","developer": "Instagram, Inc.","developerId": "389801255","category": "Photo & Video","genres": ["Photo & Video", "Social Networking"],"ratingsShown": true,"rating": 4.7,"ratingCount": 29507938,"ratingCountShown": "30M Ratings","ratingHistogram": { "fiveStars": 25307557, "fourStars": 2001517, "threeStars": 696535, "twoStars": 274969, "oneStar": 1227360 },"price": 0,"currency": "USD","priceText": null,"isFree": true,"appleArcade": false,"inAppPurchases": true,"version": "447.0.0","updatedAt": "2026-09-14T21:46:56.000Z","releaseNotesStart": "Performance optimizations and stability improvements for a smoother, more reliable experience.","sizeText": "603.4 MB","sizeMb": 603.4,"minimumOsVersion": "16.3","compatibility": "Requires iOS 16.3 or later. Compatible with iPhone, iPad, and iPod touch.","platforms": ["phone", "pad"],"ageRating": "13+","languagesCount": 39,"editorsChoice": false,"chartPosition": 2,"chartName": "Photo & Video","chartType": "top-free","descriptionStart": "Little moments lead to big friendships. Share yours on Instagram. ...","descriptionLength": 1353,"iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/.../512x512bb.png","change": "first-check","isFirstCheck": true}
How exact are the numbers?
ratingCountis the full number from the app page's own data (29,507,938 for Instagram); the page shows it rounded ("30M Ratings", kept inratingCountShown). The iTunes lookup API that many scrapers use gave different counts for 3 of 5 apps compared at the same moment on 2026-09-21 (Facebook 13,548 lower than its page); this Actor reads the page.ratingHistogramis the count per star, from 5 stars to 1 star. For all 8 apps read on 2026-09-21 the five counts added up to exactlyratingCount, and so did 99 of 99 apps in a 100-app test run the same day. The page data sometimes carries them with a floating-point tail (1020965.0000000001 for Facebook); they are rounded to whole numbers. The star bars shown in a browser matched the split for 5 of 5 apps.ratingis the average the page shows, with one decimal (4.7).- Numbers did not move between reads. Reading 8 apps 4 times, one minute apart, and 3 apps again from Apify's own network, gave the same rating count, count per star, average, version, update date, price and size every time. The App Store appears to update these numbers in steps, so any difference in monitoring mode is reported, with no tolerance band.
ratingsShownis false when the page shows no rating at all (measured: Final Cut Pro, a Mac-only app, whose page data says 0 ratings).rating,ratingCountandratingHistogramare then null, never 0.updatedAtis the date of the latest version (UTC);versionis the version number shown under "What's New" andreleaseNotesStartis the start of its notes.priceis incurrency(6.99 USD for Minecraft in the US, 1300 JPY in Japan);priceTextis what the store shows on the buy button of a paid app ("$6.99") and null for free apps. Apple Arcade games (measured: Hello Kitty Island Adventure) come back withappleArcade: true,isFree: falseandpricenull: the page data says 0, but playing needs a paid Apple Arcade plan.- In monitoring mode, a value that is missing from the page in one run (it was there before) is not reported as a change, and the previous value stays remembered, so a value that disappears and comes back is never charged twice.
sizeTextis the size the page shows ("1.3 GB");sizeMbis the same value in MB (1 GB = 1,000 MB, as the store counts).minimumOsVersionis the first version incompatibility(iOS for iPhone apps, macOS for Mac-only apps).chartPosition,chartNameandchartType(top-freeortop-paid) are the category chart rank shown on the page, when it shows one.categoryis the category shown on the page;genreslists every category the app is filed under. Both are in the store's language.- Personal contact details that appear inside
descriptionStartorreleaseNotesStart(emails, phone numbers) are replaced with[email removed]/[phone removed].
Rows that are not charged
Every row has status. Only ok rows are charged. The others say why in note:
| status | Meaning |
|---|---|
ok | The app page was read. Charged. |
no-such-app | The App Store answered 404 for this id in that country. It gives the same answer when the app does not exist, was removed, or is not sold in that country (measured: PayPay is 200 in Japan and 404 in the US), so the row does not say which. |
country-not-available | The App Store sent the request to another country's store (it redirects codes it does not know, such as xx, to the US store). The other store's numbers are not returned. |
different-app-returned | The page belonged to another app than the one asked for; not sold as this app. |
blocked | A rate limit, block or empty answer, even after retries. The app is not reported as missing. |
unreadable | The page loaded but its data block was missing or had an unknown shape. |
invalid-input | Not an App Store id or app URL (bundle ids included), or an input setting is wrong. |
duplicate | Same app and country as an earlier entry in the list. |
no-change | Monitoring mode: nothing changed since the rows last returned. Only the check fee applies. |
not-checked | Entries after maxApps rows, or beyond the first 1,000. |
budget-reached | The run's maximum total charge left no room for another row; says how many entries were not read. |
In monitoring mode, an app that disappears (404) keeps its remembered values and its free row carries lastSeenRatingCount, lastSeenVersion and lastSeenAt.
Monitoring mode
Schedule the Actor (for example daily) with monitoringMode: true:
- First run: every app comes back with
change: "first-check". - Later runs: an app comes back only with
change: "details-changed", listingchangedFieldsand the previous values (previousRating,previousRatingCountandratingCountDelta,previousUpdatedAt,previousVersion,previousPrice,previousCurrency,previousCheckedAt,previousDetailsReadAt,hoursSincePreviousDetails). - An app that is not returned is not charged a row; only the check fee applies to it.
Details are remembered per app, country and changeOn, across all your runs; a schedule with a different changeOn keeps its own memory and starts with a first check. The same app in two countries is two separate apps (their numbers differ). Do not put the same app in two schedules that can run at the same time: the store has no atomic update, so one run can overwrite what the other remembered.
Pricing
Pay per event:
- $2.50 per 1,000 app rows, charged only for rows with
status: "ok". - In monitoring mode, also $0.30 per 1,000 app checks: every app whose page was read is a check, changed or not. 100 apps checked every day is 3,000 checks a month, which is $0.90 on top of the rows for the apps that changed.
- Free rows (missing apps, blocked pages, bad input, duplicates, notes) are never charged.
The Actor never reads more apps than your run's maximum total charge can pay for. In monitoring mode it reserves a check and a change row for each app before reading it. If the maximum total charge stops a run early, a free row says how many entries were not read.
Tips
- Paste the URL from your browser:
https://apps.apple.com/gb/app/instagram/id389801252reads the UK store. - The same app in several countries: list its URL once per country (
/us/,/jp/...) or run once percountry. - For release tracking only, use
changeOn: "release"; for price drops,changeOn: "price".