App Store Listing Change Feed - iOS ASO & Price Change Tracker avatar

App Store Listing Change Feed - iOS ASO & Price Change Tracker

Pricing

from $12.00 / 1,000 listing change detecteds

Go to Apify Store
App Store Listing Change Feed - iOS ASO & Price Change Tracker

App Store Listing Change Feed - iOS ASO & Price Change Tracker

Watches iOS apps across App Store storefronts and emits only what changed since the last run: renamed title, edited description (word-level diff), new version and release notes, price change, new icon or screenshots, category move, delisting or new storefront.

Pricing

from $12.00 / 1,000 listing change detecteds

Rating

0.0

(0)

Developer

Mikkel Bech-Hansen

Mikkel Bech-Hansen

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 days ago

Last modified

Share

Give this actor a list of iOS apps and the App Store storefronts you care about, and it tells you what changed since the last time it ran. Not a snapshot of the listing — the diff. Every other App Store scraper hands you today's title, description and price and leaves you to store the results and compare them yourself; this one keeps that memory for you and returns only the edits: a competitor renamed their app, rewrote their description, shipped a new version, dropped their price, replaced their icon or screenshots, moved category, raised their minimum iOS, got delisted from a storefront, or launched in a new one. Each change comes with the value before, the value after, a word-level diff for text edits, and the rating and review count at the moment the change was spotted. Schedule it daily and it becomes a competitor ASO alert feed.

How it works

On the first run the actor records what each app's listing looks like in each storefront and returns one baseline record per app so you can confirm the watchlist is right. From then on, every run compares against what it saw last time and returns only what moved. On a quiet watchlist an empty dataset is the correct, expected result — that is the point of a change feed. It reads Apple's public iTunes Lookup endpoint, batching up to 100 apps per request, so a 500-app watchlist is a handful of HTTP calls.

Input

Every field has a working default. Run it with no configuration at all and it watches Facebook, Calm and ChatGPT in the US storefront.

FieldTypeDefaultNotes
appIdsarray of stringsFacebook, Calm, ChatGPTApp Store URLs (https://apps.apple.com/us/app/id284882215), bare IDs (284882215) or id284882215 fragments — all accepted
countriesarray of strings["us"]Two-letter storefront codes: us, gb, de, jp, br… Each app is diffed separately per storefront
seedFromChartselectnoneAlso watch the current Apple top-free / top-paid / top-grossing chart for the first storefront
chartSizeinteger25Chart positions to take, 1–200
searchTermsarray of strings[]Keywords, e.g. habit tracker. Adds the top App Store search results for each to the watchlist
maxAppsPerSearchTerminteger251–200
maxAppsPerRuninteger200Hard cap on app × storefront checks per run, 1–5000. 50 apps × 3 storefronts = 150 checks
trackedFieldsmulti-selectall except supportedDevicestitle, description, version, price, icon, screenshots, genres, minimumOs, supportedDevices, seller, availability
minDescriptionWordsChangedinteger1Report a description edit only when at least this many words moved. Raise it to silence typo fixes
storefrontLanguagestring"" (storefront default)Locale for returned text, e.g. en_us, de_de, ja_jp
maxChangeEventsinteger500Cap on change events returned and charged per run
markDelistedAfterMissesinteger2Consecutive runs an app must be missing before a delisted event fires
includeBaselineRecordsbooleantrueEmit one uncharged baseline record the first time an app is seen
forceBaselinebooleanfalseDiscard stored state and treat every app as new. Use after changing storefrontLanguage
stateKeyValueStoreNamestringapp-store-change-feed-stateNamed key-value store holding the memory. Change it to run two independent watchlists
requestsPerMinuteinteger18Apple rate-limits at roughly 20/min per IP. 1–60
requestTimeoutSecsinteger305–120
maxRequestRetriesinteger30–10. A batch that fails every retry is skipped — not charged, and never read as a delisting
proxyConfigurationobjectno proxyOptional. Apple's public endpoints do not IP-block; most watchlists never need this

Output

One record per typed change, per app, per storefront. changeType is one of title, description, version, price, icon, screenshots, genres, minimumOs, supportedDevices, seller, delisted, appeared, or baseline.

A real record, from a run where the watched app had shipped a new version since the previous run:

{
"changeType": "version",
"appId": 571800810,
"appName": "Calm",
"bundleId": "com.calm.calmapp",
"country": "us",
"appStoreUrl": "https://apps.apple.com/us/app/calm/id571800810",
"developerName": "Calm.com",
"developerId": 571800813,
"field": "version",
"previousValue": "6.9.0",
"newValue": "7.0.5",
"addedWords": [],
"removedWords": [],
"wordsAdded": 0,
"wordsRemoved": 0,
"wordDiff": null,
"addedItems": [],
"removedItems": [],
"version": "7.0.5",
"previousVersion": "6.9.0",
"releaseNotes": "Thanks for using Calm, the #1 app to help you sleep more, stress less and live mindfully...\n\nThis update contains multiple bug fixes and performance improvements.",
"currentVersionReleaseDate": "2026-08-30T04:19:50Z",
"price": 0,
"formattedPrice": "Free",
"currency": "USD",
"iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/68/23/11/6823110c-7640-5606-1cae-0a453864343e/AppIcon-0-0-1x_U007emarketing-0-11-0-85-220.png/512x512bb.jpg",
"ratingAtChange": 4.77282,
"userRatingCountAtChange": 1977970,
"previousObservedAt": "2026-09-02T23:35:00.688Z",
"observedAt": "2026-09-02T23:35:13.955Z"
}

Field notes:

  • previousValue / newValue — the before and after, as text, for every change type.
  • wordDiff — inline word-level rendering for title and description edits, e.g. Calm is the [-number one-] {+#1+} app for [-sleep-] {+sleep, meditation,+} and relaxation. Find anxiety relief, stress …. Long unchanged stretches are elided.
  • addedWords / removedWords — the individual words, capped at 60 each; wordsAdded / wordsRemoved carry the true counts.
  • addedItems / removedItems — for list fields: the screenshot URLs added and removed, the genres gained and lost, the device identifiers added and dropped.
  • ratingAtChange / userRatingCountAtChange — the star rating and review count at the moment the change was observed. Ratings are never a change trigger (they move constantly); they are context for the change.
  • delisted records carry the last known listing values; newValue is null.
  • baseline records are the first sighting and are never billed as a change event.

Cost

Two pay-per-event charges: app-checked ($0.0008) for each app polled in each storefront, and change-detected ($0.012) for each change event delivered. baseline records are free.

RunCharges
Zero-config first run (3 apps, 1 storefront)3 × app-checked = $0.0024
100 apps, 1 storefront, quiet day100 × app-checked = $0.08
100 apps, 1 storefront, typical day (~4 changes)$0.08 + 4 × $0.012 = $0.13
100 apps, 3 storefronts, daily for a month~300 checks/day → $7.20/mo + changes
500 apps, 1 storefront, weekly500 × $0.0008 = $0.40 per run

A first run never charges a change event — it has nothing to compare against, so it charges only for the polling.

Known limitations

Read these before you buy; they are the honest edges of what the public endpoint exposes.

  • No subtitle, promotional text, in-app purchase list or keyword field. Apple's Lookup endpoint does not return them. Getting them would mean scraping and parsing the App Store's client-rendered web page, which is fragile; this actor deliberately does not. If the subtitle is the ASO field you care about most, this is not your tool.
  • Price is the base price only. Subscription and in-app purchase price changes are not visible to this endpoint, so an app going from a $9.99/mo to a $4.99/mo subscription shows no price event.
  • The first run for any app in any storefront cannot report a change. It records a baseline. Real change events start on the second run.
  • Detection is only as fine-grained as your schedule. A title that is changed and changed back between two runs is invisible. Daily is the useful cadence; hourly rarely finds more.
  • Screenshot changes are detected by URL. Apple issues a new URL when a developer re-uploads an image, which is the signal used here. Re-uploading a byte-identical screenshot therefore counts as a change, and the actor cannot tell you what is visually different — only which URLs appeared and disappeared.
  • delisted is inferred from absence, not announced. An app pulled from a storefront and an app that has become region-locked look identical from here. The actor waits for markDelistedAfterMisses consecutive runs before reporting, and a failed HTTP request is never read as a delisting — but a genuinely long Apple outage could still produce a false delisted.
  • supportedDevices is noisy and off by default. Apple adds a new device identifier to most apps at once when new hardware ships, which produces a change event for the whole watchlist on the same day.
  • Rate limits. Apple allows roughly 20 requests per minute per IP on the Lookup endpoint. Because each request carries 100 app IDs, the default of 18/minute covers a 1,800-app watchlist per minute. Very large, very frequent watchlists may need the proxy input.
  • Chart and search seeding occasionally returns an ID the Lookup endpoint will not resolve. Those apps are skipped, not charged for, and never reported as delisted.
  • iOS and iPadOS apps only. Mac App Store, tvOS-only apps, and Google Play are out of scope.
  • Changing storefrontLanguage re-baselines every localised field. Turn on forceBaseline for the run where you change it, or you will get one wave of bogus "edits".

This actor is not affiliated with, endorsed by, or sponsored by Apple Inc. "App Store", "iTunes", "iOS" and "iPadOS" are trademarks of Apple Inc.

It reads two public, unauthenticated Apple endpoints — the iTunes Lookup/Search API at itunes.apple.com and the Apple Marketing Tools RSS chart feed at rss.marketingtools.apple.com. Both are documented by Apple, but they are published for Apple's affiliate and marketing-tools programs, and Apple's terms for those programs and for its websites generally restrict automated access, impose request-rate limits, and constrain how the returned data may be stored, redistributed and displayed. Using this actor may not comply with those terms, regardless of the fact that the underlying listing data is publicly visible on the App Store — "public" and "permitted by the terms of service" are separate questions. You are responsible for reviewing Apple's applicable terms, for your own compliance with them, and for how you use, store and redistribute the data this actor returns.

The actor returns product and company information only: app listings and the developer entity that publishes them. It does not collect reviews, reviewer names, or any other personal data, and it does not access anything behind a login.