What Is SKAdNetwork (SKAN)? Conversion Values and Postbacks Made Simple (Plus AdAttributionKit)
A beginner-friendly guide to SKAdNetwork, the core of iOS ad measurement: conversion values, three postbacks, crowd anonymity, and how it relates to Apple's recommended AdAttributionKit.
If you run iOS app ads, you will often hear, "Why are the SKAN numbers so low?" Based on Apple's official documentation, this guide explains what SKAdNetwork (SKAN) is and how it works.
What is SKAdNetwork?
SKAdNetwork is Apple's API for measuring install performance of ad campaigns without identifying individual users (iOS 11.3+). Three parties take part.
| Party | Role |
|---|---|
| Ad network | Signs ads and receives install-validation postbacks |
| Source app (or Safari web) | Shows the ad |
| Advertised app | Updates conversion values based on user actions |
According to Apple's documentation, apps don't need App Tracking Transparency (ATT) consent to call the SKAdNetwork API.
Conversion values and postbacks
The advertised app registers the install by updating a conversion value at first launch, and can then update the value based on user actions (sign-up, purchase and so on). The app or ad network decides what each value means.
Since iOS 16.1 there are three conversion windows, so ads signed with version 4 can receive up to three postbacks.
| Item | Details |
|---|---|
| Fine value | A number from 0 to 63, included only when privacy thresholds are met |
| Coarse value | Three levels: low / medium / high |
| Winning postback | Only the ad that wins attribution gets a conversion value |
| Non-winning postbacks | Up to five networks receive did-win=false postbacks with no conversion value |
Crowd anonymity decides how much data you get
Apple assigns a postback data tier to each install. At lower tiers the source identifier has fewer digits, and the conversion value is replaced by a coarse value or dropped entirely. That is why smaller campaigns are more likely to show "missing" data. Apple doesn't publish the thresholds themselves.
Is there a SKAN 5? And AdAttributionKit
Many articles describe "SKAN 5", but Apple's official SKAdNetwork documentation now recommends AdAttributionKit for app ad campaigns and provides a separate document on interoperability between the two. Because blogs disagree on the SKAN 5 specification, this guide covers only what Apple's documentation confirms. AdAttributionKit includes re-engagement measurement on iOS 18 and later, and can send up to three postbacks when a user reopens or reinstalls an app from an ad.
Practical checklist
- Design conversion values around one decision (for example, whether a user subscribes within seven days).
- Make sure your MMP (AppsFlyer, Adjust and so on) is set up to receive both SKAN and AdAttributionKit postbacks.
- Read reports assuming small campaigns may only get coarse values.
What confuses people when they first see SKAN reports
1. Conversion values arrive as null (empty)
If many rows in a SKAN report have an empty conversion value, it's easy to think tracking is broken. Usually it's normal.
- Low crowd-anonymity tier: for campaign and source-app combinations with few installs, Apple sends only a coarse value, or no conversion value at all.
- Non-winning postbacks: postbacks to networks that didn't win attribution never carry a conversion value.
- Second and third postbacks: these carry only coarse values, so a dashboard built on fine values (0 to 63) shows them as blank. At the lowest tier (Tier 0), the second and third postbacks don't arrive at all.
How to check: compare the null rate with campaign size (daily installs). If smaller campaigns show more nulls, the anonymity threshold is the likely cause.
2. Postbacks arrive late, on the "wrong" dates
SKAN postbacks aren't real time. According to Apple, the conversion windows are days 0 to 2, 3 to 7 and 8 to 35 after first launch, and each postback is sent after its window ends (or after the app locks the conversion value) plus a random delay: 24 to 48 hours for the first postback and 24 to 144 hours for the second and third. The third postback can therefore arrive well over a month after install. Postbacks also have no field telling you when the install happened.
So SKAN data is often recorded by postback receipt date rather than install date, and it's normal for yesterday's campaign to look small in today's report. Wait at least a few days for data to build up before changing budgets.
3. Crowd-anonymity tiers truncate source information
At low tiers (Tier 0 and 1), the source identifier comes with only two digits instead of up to four, and the source app ID is dropped. The source app ID is included only at the highest tier (Tier 3). Splitting campaigns and creatives too finely lowers installs per combination and hides even more data. Keeping campaign structure simple is how you get more data back.
Why don't SKAN numbers match MMP numbers?
It's common for installs and revenue in SKAN reports and MMP dashboards (AppsFlyer, Adjust, Singular and others) not to match. The main causes:
| Cause | Explanation |
|---|---|
| Different populations | Standard MMP attribution centres on ATT-consenting users (IDFA), while SKAN counts installs Apple attributes regardless of consent. |
| Different date basis | MMPs usually count by install date, SKAN often by postback receipt date. |
| Conversion value decoding | SKAN revenue is an estimate mapped from pre-set revenue ranges, so it differs from actual payments. |
| Reinstalls and duplicates | The rules for reinstalls and installs claimed by several networks differ. |
| Nulls and anonymity | Postbacks without conversion values disappear from SKAN revenue and events entirely. |
Practical tip: rather than trying to make the numbers match, check whether trends move in the same direction on the same basis (same date basis, same campaign level). Most MMPs offer a SKAN-only dashboard or a combined "SKAN plus standard attribution" report, so start by confirming which number uses which basis.
Wrapping up
SKAN gives you direction within privacy limits, not exact numbers. Understanding those limits lets you read the reports far more wisely.
Sources: Apple Developer Documentation (SKAdNetwork, "Receiving postbacks in multiple conversion windows", AdAttributionKit).