SKAdNetwork (SKAN) is Apple's privacy-preserving way to attribute an iOS app install to the ad campaign that drove it — without ever identifying the user. It trades the user-level detail marketers had before 2021 for data that is aggregated, deliberately delayed, and sometimes withheld entirely. If your iOS install reports look coarse, late, and full of gaps, SKAdNetwork is usually why.
Why SKAdNetwork exists
Apple introduced SKAdNetwork in its current form alongside App Tracking Transparency (ATT) in iOS 14.5, released in April 2021 (Apple Developer). ATT requires apps to ask permission before tracking a user across other companies' apps and sites, and most people decline: industry benchmarks put average opt-in at roughly a third of users, with wide variation by vertical and country (eMarketer ATT benchmarks, AppsFlyer).
Without that permission there's no shared device identifier (IDFA) to match an ad click to an install. SKAdNetwork is Apple's answer: the ad network, the App Store, and the developer cooperate to confirm an install happened and which campaign won the credit — and Apple returns the result in a way that can't be traced back to an individual.
What a SKAdNetwork postback actually contains
When an install is attributed, Apple sends a signed postback to the ad network with a small, fixed payload rather than user-level events:
- Campaign / source identifier: which campaign won, at limited granularity.
- Conversion value: a single value summarizing early in-app behavior. In SKAN 4 this is either a fine value from 0–63 (a 6-bit number) or a coarse value of low, medium, or high (Apple Developer).
- No user or device ID: nothing that ties the install to a person.
The catch is the crowd anonymity threshold. If a campaign doesn't have enough installs to keep an individual unidentifiable, Apple downgrades the fine value to a coarse one, or strips the conversion value to null altogether. Small campaigns routinely get null values — the privacy model is working as designed, but it means low-volume tests come back nearly blind.
SKAN 4 spreads measurement across three windows
Earlier SKAN versions sent a single postback shortly after install, which told you almost nothing about whether those users stuck around. SKAN 4 changed that by delivering up to three postbacks across staggered windows (Adjust):
- Window 1: days 0–2 after install.
- Window 2: days 3–7.
- Window 3: days 8–35.
Each window carries its own conversion value, so you can see early signal (did they finish onboarding?) separately from later signal (did they subscribe in week two?). Apple also randomizes the timing of each postback, which is why SKAN data always arrives a day or more late and can never be reconciled in real time.
It's also winner-take-all: for a given install, Apple attributes the single ad with the highest priority, not every touch the user saw. A multi-touch journey across several networks collapses to one credited source, which is part of why SKAN totals and a multi-touch tool like Firebase rarely line up.
Mapping conversion values to revenue
Because a fine conversion value is just a number from 0 to 63, it carries no revenue, currency, or event name on its own — your team decides what each value means before campaigns run. A subscription app might encode behavior into the 6-bit space like this:
- 0: install only, no further action.
- 1–9: completed onboarding or a key first action.
- 10–30: started a free trial, bucketed by source or plan.
- 31–63: converted to paid, bucketed into revenue tiers (for example, $0–5, $5–20, $20+).
You then read revenue back from the bucket rather than from an exact figure. Get the encoding wrong and you can't re-run history, since Apple only ever sends the value you defined — which is why most teams lean on an attribution provider to manage the schema and infer revenue and lifetime value from these coarse signals.
What this means for your ROAS
Put together, SKAdNetwork reshapes how mobile ROAS can be measured:
- It's delayed. Randomized timers mean you optimize on data that's already a few days old.
- It's coarse. A 6-bit conversion value can't carry exact revenue, so teams map purchase tiers onto the 0–63 range and infer revenue from the bucket.
- It's incomplete. Null values below the anonymity threshold leave low-volume campaigns underreported.
This is also why SKAN numbers rarely match a tool like Firebase. Firebase measures what consenting users do inside your app; SKAN measures privacy-limited install attribution from Apple. The practical pattern is to keep first-party, owned events as your source of truth for product behavior and revenue, and treat SKAN as the campaign-attribution layer on top — never expecting the two to reconcile to the same number.
What comes after SKAdNetwork
At WWDC 2024 Apple introduced AdAttributionKit (AAK), built on the same privacy model and designed to interoperate with SKAdNetwork while adding re-engagement attribution, configurable conversion windows, and support for alternative app marketplaces (Apple Developer). Apple has not announced a deprecation date for SKAdNetwork, and because the two frameworks interoperate, SKAN remains what most iOS campaigns still run on today. The honest takeaway: iOS attribution is permanently aggregate and privacy-first now, and the winning setup is one that treats coarse, delayed campaign data as a signal to combine with owned data — not a ledger to trust on its own.