App Store analytics reference
What every figure on Home and Analytics means: proceeds versus customer spend, first-time downloads versus updates, trials versus paid, currency conversion and freshness.
Which revenue number this is
Apple publishes two revenue figures, and they disagree. Everything Broctic shows today is the first one.
| Sales and Trends | Financial reports | |
|---|---|---|
| Cadence | Next day, by 08:00 Pacific | Monthly, roughly five weeks behind |
| Calendar | Gregorian | Apple's fiscal calendar |
| Currency | Per storefront | Payment currency |
| Status | Provisional — restated as payments settle | Final |
Broctic ingests Sales and Trends. Financial reports are not ingested yet; the store keeps a basis column so they can be, and the two are never added together — a fiscal month and a calendar month overlap in a way that double-counts.
Recent days change, on purpose
Apple restates recent days as payments settle. A day is therefore replaced when it is re-fetched rather than merged, so a transaction that moved to another day stops appearing instead of existing twice. Expect the last week to shift slightly.Proceeds, customer spend, and Apple's cut
- Customer spend — what buyers paid, before Apple's commission.
- Proceeds — what Apple pays out, after their commission and before any cost of yours. This is the headline figure.
- The gap between the two is Apple's commission plus, in storefronts where the customer price includes it, sales tax or VAT that Apple remits. It is shown rather than assumed, because the rate depends on the programme you are in — 15% under the Small Business Program, 30% standard — and a constant would be wrong for most accounts.
The word is proceeds, not profit and not revenue. Calling it profit would ignore every cost you have; calling it revenue invites confusion with what customers paid.
Units: four different things in one column
This is the single biggest way an App Store dashboard misleads. Apple counts a first download, a re-download, an app update and an in-app purchase in the same Units column, separated only by a Product Type Identifier. An app with a healthy release cadence can report five to ten times its real download count, and most of the excess is a measure of how often you shipped.
Broctic buckets every row on the way in and keeps Apple's raw identifier beside the bucket. Nothing in the console adds them back together: "downloads" always means first-time downloads.
| Identifier | Apple's meaning | Bucket | Counts as |
|---|---|---|---|
| 1 | Free or paid app, iOS / iPadOS / visionOS / watchOS | First-time download | Download, revenue |
| 1F | Universal app, excluding tvOS | First-time download | Download, revenue |
| 1T | iPad app | First-time download | Download, revenue |
| F1 | Mac app | First-time download | Download, revenue |
| 1E / 1EP / 1EU | Custom (B2B) app: iOS, iPadOS, universal | First-time download | Download, revenue |
| 1-B / F1-B | App bundle | App bundle | Revenue only |
| 3 | Re-download, iOS / tvOS / visionOS / watchOS | Re-download | Neither |
| 3F | Re-download, universal excluding tvOS | Re-download | Neither |
| 7 / 7F / 7T / F7 | Update of an installed app | Update | Neither |
| IA1 / IA1-M / FI1 | In-app purchase | In-app purchase | Revenue only |
| IA3 | Restored non-consumable in-app purchase | In-app purchase | Revenue only |
| IA9 / IA9-M | Non-renewing subscription | Subscription | Revenue only |
| IAY / IAY-M | Auto-renewable subscription | Subscription | Revenue only |
| IAC | Auto-renewable subscription, later years (legacy) | Subscription | Revenue only |
| anything else | An identifier Apple added after this table | Other | Neither — shown as Other, never guessed |
Why unknown identifiers stay visible
Apple adds identifiers as it adds platforms. An identifier that is not in the table above falls into Other and stays there next to its raw code, rather than being guessed from the shape of the string. An unexplained bucket is a question somebody can answer; a wrong bucket is a number nobody questions.Trials versus paid subscriptions
Subscription transactions arrive as units at a price. A free trial or an introductory offer is a subscription unit at zero, so Broctic reports trials and paid subscription units separately, and one-off in-app purchases separately again — recurring revenue and one-time revenue behave nothing alike, and a "subscribers" figure that includes free trials is the number every subscription app flatters itself with.
Because these are transactions rather than a subscriber roster, they answer "how many trials started this week", not "how many people are subscribed right now". Active counts, churn and cohorts come from Apple's subscription reports, which are not ingested yet.
Refunds
Refunds are reported as their own count and are not netted out of the unit counts silently. A refund can land days or weeks after the sale it reverses, so a refund rate over a short window is a lagging figure — which is exactly why it is shown as a rate against the same window rather than adjusted into the totals.
Currencies
The App Store bills in the storefront's currency, so an account earns in a dozen of them. Broctic converts per day, at that day's European Central Bank reference rate, and shows the per-currency breakdown next to the converted total.
- Per day matters: a month of sales converted at one closing rate is a different number from the same sales converted daily, and only the second reconciles with what actually happened.
- The ECB quotes about thirty currencies. Anything it does not quote is reported separately, in its own currency — never approximated and never dropped, because dropping it understates revenue with no sign that anything happened.
- The raw per-currency rows are kept, so any blended figure can be taken apart.
- The display currency selector at the top of Analytics changes the presentation, not the underlying data.
Freshness: what 'yesterday' means
Nothing here is live. The console reads Broctic's store, never Apple at page load, and the honest question it has to answer is has Apple published yesterday yet?
- Apple's dates are Pacific dates. Sales close at midnight Pacific and publish by 08:00 Pacific the next morning. Computing "yesterday" in UTC is wrong for eight hours a day and reports Apple as late when it is not.
- Apple answers
404both for a day it has not published and for a day with genuinely no sales, and nothing in the response separates them — so the clock does. Before 08:00 Pacific the console says not published yet; after it, Apple reported no sales, which is a real zero. - A day never successfully fetched is drawn as a gap, not a zero. A zero and an absence look identical on a chart and mean opposite things.
- Every sync outcome is recorded per day, so the freshness card can say how far behind the data is, how many gaps exist, and when the last run happened — including its error, if it failed.
Time ranges and comparisons
The range selector offers the last 7 days, 30 days, 90 days and 12 months, and it scopes everything on the page — one filter row above all the cards rather than a control per card, so no two figures on screen can be describing different fortnights.
Changes are stated against the immediately preceding window of the same length. When the previous window was zero, the change is shown as nothing at all rather than as an infinite increase: a first sale is better stated as a first sale.
Breakdowns
By app
Every linked app, with its own totals and the same period-over-period comparison. Apps Apple exposes but you have not linked still ingest, so linking one later does not lose history.
By country
Apple reports the storefront a sale happened in. This is where the currency question bites hardest, which is why the country table is always readable in the display currency and in the currencies actually earned.
By device
Apple's device column, as reported. Useful mainly for spotting that an iPad or Mac audience exists that the product was not designed for.
By product and product type
In-app purchases and subscriptions by SKU, so a paywall change can be read against the specific product it affected, plus the Product Type Identifier breakdown that the buckets above are derived from.
What Apple does not give us (yet)
- Impressions, product page views, installs by source, retention and crashes come from App Store Analytics reports — a different API where you request a report and Apple produces it asynchronously over hours or days. Not ingested yet.
- Active subscribers, churn and cohorts come from the subscription reports. Not ingested yet.
- Financial reports — the authoritative, post-commission, fiscal-calendar figure. Not ingested yet.
- Nothing about what happens inside the app. That is what product events are for.