App Store Price Tracker — App & In-App Prices by Country avatar

App Store Price Tracker — App & In-App Prices by Country

Pricing

from $0.40 / 1,000 rows

Go to Apify Store
App Store Price Tracker — App & In-App Prices by Country

App Store Price Tracker — App & In-App Prices by Country

An app's price and its in-app purchase prices in every App Store country, with the price changes since your last run. Give it App Store links or app IDs and a list of countries (or all 175 storefronts); get one row per price and per in-app purchase in the local currency. No login.

Pricing

from $0.40 / 1,000 rows

Rating

0.0

(0)

Developer

Northbell

Northbell

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Give it App Store links or app IDs and a list of countries (or all 175 App Store storefronts) and get the app's price and its in-app purchases with their prices in each country's own currency, one clean row each. $0.50 per 1,000 rows, no login, no API key. One app in all 175 storefronts is 175 price rows, plus its in-app purchase rows when you include them.

Run it again — or put it on a schedule — and every row also tells you what changed since the last run: the previous price, whether it changed, by how many percent, and which in-app purchases are new. The App Store only shows you today's price; this keeps the memory, per app and country.

What you get

FieldWhat it is
typeprice (the app itself), iap (one in-app purchase), summary (one free row per app) or error (free)
appId, appName, developer, url, inputthe app (the name is the one the first country returned, so it is the same on every row), the seller, the App Store link for that country, and the text you gave for this app
country, countryName, currencythe storefront and the currency its prices are in (USD, JPY, EUR, BRL…)
price, formattedPrice, isFreethe app's price as a number, and as the store writes it ($4.99, ¥800, 5,99 €; Free for free apps)
name, position, listingsiap rows: the in-app purchase's name, its place in Apple's list (1 = first), and how many times Apple listed this exact name and price
hasInAppPurchasesprice rows: whether the app page says the app has in-app purchases (null when in-app purchases were not read)
previousPrice, previousCurrency, priceChanged, changePercent, previousObservedAtthe change since your previous run (null on the first run). changePercent is 0 when a paid price is the same; it stays null for a free item and when the currency changed
isNewiap rows: true when this purchase was not in the list last time (null on the first run)
observedAtwhen the row was read

The summary row (free) has, per app: countriesRequested, countriesRead, countriesNotAvailable (the app is not on sale there), countriesFailed, freeInCountries, currencies, iapCount, iapNotRead (countries whose in-app list could not be read), and — from the second run — priceChangesSinceLastRun, iapPriceChangesSinceLastRun, iapNewSinceLastRun, iapNoLongerListedSinceLastRun.

Run it again and again

  • On a schedule — save your input as a task and add a Schedule: the same apps every day. Send each run to Google Sheets, Slack or email with an integration on the task.
  • Watch for changes — Keep the same input on the schedule. Each run is its own dataset with the date it ran, so the series builds up run by run and you can compare one day with the last.
  • In bulk — Put every app in Apps and every store in Countries: one run prices them all.

Use it for

  • Pricing teams — put your own price and your competitors' side by side in every storefront, and see where a rival is cheaper
  • Price-change alerts — schedule it daily and filter for priceChanged = true to hear about a regional increase or a new subscription tier the day it appears
  • Localisation and pricing research — all the in-app purchase prices for an app in every country, in one table

Input

{
"apps": ["https://apps.apple.com/us/app/duolingo-language-lessons/id570060128", "1232780281"],
"countries": ["us", "gb", "de", "jp", "br", "in"],
"includeInAppPurchases": true
}

Leave countries as the pre-filled 20 major storefronts, list your own, or write "all" for every one of Apple's 175. What changed is remembered per app and country in a named key-value store in your Apify account, so the second run of the same Actor already shows changes. Schedule it (Apify → Schedules) for a daily log.

Pricing

$0.50 per 1,000 rows (one row = one app price or one in-app purchase price in one country), plus $0.01 per run. Error rows and the free summary rows are not charged. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing. Example (10/9): Duolingo, Notion and Procreate Pocket in the 20 default countries returned 60 price rows and 200 in-app purchase rows (260 rows = $0.13, plus the 3 free summary rows) — $0.14 with the run fee. One app's price in all 175 storefronts, without in-app purchases, is at most 175 rows: about $0.09, or $0.10 with the run fee.

Notes

  • Public data only: the app price from Apple's public iTunes Lookup service and the "In-App Purchases" list on the app's public page at apps.apple.com. No reviews, reviewer names, emails or phone numbers are returned.
  • The country you choose is the App Store you get. Currency and prices differ by storefront, and Apple answers for the country named in the request, not for where the caller is. On 10/9, from the same machine, Procreate Pocket came back as $5.99 in us, ¥1,000 in jp, 6,99 € in de, R$ 39,90 in br and ₹ 599 in in. Apple has 175 storefronts; "all" reads every one of them.
  • No currency conversion. Every row keeps its own storefront's currency. Apple publishes no exchange rates, so a "cheapest country" would rest on a rate taken from somewhere else; the summary row therefore has no cheapestCountry. Compare prices inside one currency (many storefronts share USD or EUR), or convert in your own sheet. In a 10/9 check of three paid apps across all 175 storefronts the prices came back in 43 currencies.
  • Country codes. Use Apple's two-letter codes; the United Kingdom is gb, not uk. A code Apple does not have (uk, zz) gives a free error row instead of another country's data, because Apple would quietly show the US store for it. A code that is not an App Store country (for example bd) gives a free error row too.
  • An app that is not on sale in a country shows up in the summary row's countriesNotAvailable (it is not an error row and costs nothing). An app on sale in none of the countries you asked for gives one free error row.
  • In-app purchases are Apple's "Top In-App Purchases" list, not the full catalogue. The page lists at most 10 per country, in Apple's own order (position), and the ten can differ between countries. Apple gives no purchase IDs, and one name can appear at several prices (monthly, yearly, family plans). Entries with the same name and price are returned once, with listings saying how many times Apple listed them, so a country can return fewer than 10 rows.
  • Since the last run, purchases are matched by name. The same name with the same price is the same purchase (isNew: false, priceChanged: false). If the leftovers under one name are equally many on both sides, they are paired lowest price to lowest price and flagged priceChanged: true with previousPrice and changePercent. Anything else is isNew: true — it can be a purchase that moved into the top 10 rather than one that was just created. iapNoLongerListedSinceLastRun counts the ones that dropped out.
  • A change of currency (a country joining the euro, for example) is reported as priceChanged: true with previousCurrency, changePercent stays null, and that run's in-app purchases are not compared with the old currency's.
  • Fields that are empty on some rows: previousPrice, previousCurrency, priceChanged, changePercent, previousObservedAt and isNew are null on the first run for an app and country. changePercent is 0 for an unchanged price and the percentage for a changed one; it is null for a free item (nothing to divide by), when the currency changed, and when a price could not be read as a number. hasInAppPurchases is null when Include in-app purchases is off or the page could not be read. The summary's ...SinceLastRun fields are null until an app has been read before.
  • price of an in-app purchase is the number read from the storefront's own text (89,99 € is 89.99, Rp 119ribu is 119000); formattedPrice always keeps the text as the store writes it. For a paid app the same reading is checked against Apple's own number for the app price: in a 10/9 check of 519 paid prices (three apps, 175 storefronts) every one matched. A storefront whose format does not reproduce Apple's number would get text only (price: null) for its in-app purchases rather than a wrong number.
  • appName is the name the first country returned, asked for in English, so all of an app's rows carry the same name; Apple's own name for an app can still differ by country (on 10/9 one game's name ended with a different subtitle in France and Japan).
  • If one country's in-app purchases cannot be read, you still get the price row and a free error row for that country. If Apple's price service cannot be reached at all, the run fails instead of finishing empty.
  • Run time. Apple documents about 20 calls a minute for its price service, so the Actor reads one country about every 3.5 seconds, however many apps you give it for prices (up to 100 apps per run). Reading in-app purchases adds one app page per app and country, three at a time, about a quarter of a second each (30 pages took 8 seconds on 10/9). Measured on 10/9: three apps in the 20 default countries, with in-app purchases, took 64 and 70 seconds in two runs; the prices of three apps in all 175 storefronts (no in-app purchases) took 10 minutes 26 seconds. A very large run, such as 100 apps in all 175 storefronts with in-app purchases (about 17,500 app pages, roughly 80 minutes at that rate), is better split into several runs.

To track an app's keyword ranks and rating swings every day, see App Store Rank & Rating Watch. For the full app page (privacy labels, version history, release notes), use App Store App Details. For the reviews of an app, see App Store Reviews Scraper.

For AI agents

{"apps": ["570060128"], "countries": ["us", "jp", "de"]} returns, for each country, one price row (price, currency, formattedPrice), the app's in-app purchases as iap rows with prices in the local currency, and one free summary row. Rows have type: price, iap, summary or error. Call it again with the same input to get previousPrice, priceChanged, changePercent and isNew. There is no currency conversion: compare prices inside one currency.

**Something broke or looks wrong?** Open an issue on this Actor's Issues tab and I'll look at it. **Found it useful?** A short review on the Store page helps other people find it.