Deeplinkly

Glossary/iOS platform and privacy

SKAdNetwork

Definition

SKAdNetwork is Apple's StoreKit framework that attributes app installs to advertising campaigns without exposing a device identifier, by having the operating system send a delayed, aggregated postback to the ad network that won the install.

It exists because attribution used to work by matching an IDFA on the ad click to the same IDFA on the install, and ATT removed that identifier for most users. SKAdNetwork replaces the join: the device does the matching internally and reports the outcome with the identifiers stripped, the timing randomised, and the payload deliberately small. Everything that makes SKAN awkward to work with is a consequence of that trade.

The version history, and why it matters to your schema

SKAN's capabilities changed substantially across versions, and a schema designed for 2.x throws away most of what 4.0 can carry.

SKAdNetwork versions and what each one added.
VersioniOSWhat it added
2.014.0Conversion values, a 24-hour-plus timer, one postback
2.214.5View-through attribution via fidelity-type
3.014.6did-win — losing networks learn they lost
4.016.1Three postbacks, hierarchical source IDs, coarse values, web-to-app

4.0 is the version to design for, and its headline change is that a campaign no longer gets one shot at a single number. Three conversion windows mean you can measure an install, then a day-7 signal, then a day-35 signal, from the same ad.

The three SKAN 4.0 conversion windows.
WindowMeasures daysValue granularityRandom delay after window
10–2Fine (0–63) or coarse24–48 hours
23–7Coarse only24–144 hours
38–35Coarse only24–144 hours

Only window 1 can carry a fine value

Any revenue or event detail you need at bit-level precision has to be measurable within 48 hours of install. Windows 2 and 3 give you low, medium or high and nothing more, so a schema that puts day-30 LTV in the fine value is measuring something SKAN will never report.

The source identifier and the anonymity tiers

4.0 replaced the flat 0–99 campaign ID with a hierarchical source-identifier of two, three or four digits. You always get the first two. Whether the remaining digits and the conversion value survive depends on the install cohort's crowd anonymity tier — Apple's measure of whether a cohort is large enough that a report cannot single out a person.

What each crowd anonymity tier returns.
TierSource identifierConversion value
02 digitsNone
12 digitsCoarse only
23 digitsCoarse only
34 digitsFine (0–63)

Read the hierarchy outwards from the two digits you always receive: put your most important dimension there — campaign, or geo — and the finer splits in digits three and four, because those are the ones a low-volume campaign loses. A network that encodes campaign in digit four gets no campaign reporting at all on small campaigns.

Registering, and what the postback looks like

An advertised app declares every ad network permitted to claim its installs. A network absent from this list receives nothing, which is the first thing to check when a partner reports zero SKAN volume.

Info.plist — the advertised app
<key>SKAdNetworkItems</key>
<array>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>example123.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>partner456.skadnetwork</string>
  </dict>
</array>

<!-- Get your own copy of winning postbacks -->
<key>NSAdvertisingAttributionReportEndpoint</key>
<string>https://postbacks.example.com</string>
A version 4.0 postback
{
  "version": "4.0",
  "ad-network-id": "example123.skadnetwork",
  "source-identifier": "5239",
  "app-id": 525463029,
  "transaction-id": "6aafb7a5-0170-41b5-bbe4-fe71dedf1e28",
  "redownload": false,
  "source-domain": "example.com",
  "fidelity-type": 1,
  "did-win": true,
  "postback-sequence-index": 0,
  "conversion-value": 20,
  "coarse-conversion-value": "high",
  "attribution-signature": "MEQCIQD..."
}
  • fidelity-type is 1 for a StoreKit-rendered click and 0 for a view-through impression. Mixing them in one report inflates your click performance.
  • postback-sequence-index is 0, 1 or 2 and tells you which window this is. Without it, three postbacks for one install look like three installs.
  • did-win is false for networks that were in the running and lost — count only wins.
  • source-domain appears for web-to-app; source-app-id for app-to-app. Neither is guaranteed.
  • attribution-signature must be verified against Apple's public key, or your endpoint will accept fabricated installs.

Absent fields are the norm, not an error

Every optional field above disappears at lower anonymity tiers. Parse defensively: treat a missing conversion-value as "not reported" rather than zero, since collapsing the two is how SKAN dashboards end up showing a large cohort of worthless users who were simply never measurable.

Where SKAdNetwork stands now

AdAttributionKit is SKAN's successor and has been available since iOS 17.4. Apple has not published a SKAdNetwork deprecation date, and SKAN is still where the overwhelming majority of iOS attribution volume lands, so the honest position is that SKAN is the present and AdAttributionKit is the direction.

The practical consequence is that you maintain one conversion value schema and feed it to both frameworks, rather than treating them as a migration. The bit budget, the windows and the anonymity tiers are shared, so a schema designed properly for SKAN 4.0 is already an AdAttributionKit schema.

SKAN conversion value builder

Our conversion value builder maps your events and revenue buckets into the 6 bits SKAN actually transmits, shows what survives at each anonymity tier, and exports the mapping your SDK and your ad networks both need to agree on.

Open the skan conversion value builder

Frequently asked questions

What is SKAdNetwork?
SKAdNetwork is Apple's StoreKit framework for attributing app installs to advertising campaigns without exposing a device identifier. When a user installs an advertised app, the operating system itself decides which ad network won, then sends that network a delayed postback containing a campaign identifier and an optional conversion value, with the device-level identifiers stripped out.
What is the difference between SKAN 3 and SKAN 4?
SKAN 4.0, available from iOS 16.1, added three conversion windows instead of one, replaced the flat 0–99 campaign ID with a hierarchical source identifier of up to four digits, introduced coarse conversion values of low, medium and high for cases where the fine value cannot be sent, and added web-to-app attribution via a source domain. SKAN 3.0's main addition was the did-win flag.
Why is my SKAdNetwork conversion value missing?
Because the install cohort did not reach the crowd anonymity tier required to carry it. At tier 0 no conversion value is sent at all, and at tiers 1 and 2 only the coarse low, medium or high value is sent. Low-volume campaigns and narrow geo splits sit at the bottom tiers, so the fix is consolidating campaigns rather than changing your instrumentation.
How long does a SKAdNetwork postback take to arrive?
The first postback arrives 24 to 48 hours after the end of the first conversion window, which itself covers days 0 to 2 after install, so expect roughly three to five days. The second and third postbacks add a randomised delay of 24 to 144 hours after their windows close, putting window 3 as much as six weeks after the install.
Do I need ATT permission for SKAdNetwork to work?
No. SKAdNetwork was designed to function without the IDFA and without an App Tracking Transparency prompt, since the operating system performs the match internally rather than handing anyone a cross-app identifier. ATT consent is only relevant if you additionally want device-level identifiers for purposes SKAdNetwork does not serve.

Related terms

  • Conversion ValueA conversion value is a 6-bit integer between 0 and 63 that an iOS app sets after install to describe post-install behaviour, and which the operating system reports to the ad network in an attribution postback.
  • SKAN PostbackA SKAN postback is a signed JSON report that iOS sends from the device to an ad network's server after an advertised app is installed, containing the campaign identifier and any conversion value the install's privacy tier permits.
  • Crowd AnonymityCrowd anonymity is Apple's privacy mechanism that decides how much campaign and conversion detail an attribution postback may contain, based on whether the install cohort is large enough that the report cannot identify an individual.
  • AdAttributionKitAdAttributionKit is Apple's ad attribution framework, introduced in iOS 17.4, that reports privacy-preserving install and re-engagement postbacks for advertised apps installed from the App Store or an alternative app marketplace.
  • IDFAThe IDFA, or Identifier for Advertisers, is a resettable per-device UUID that iOS provides to apps for advertising measurement, and which is only readable when the user has granted App Tracking Transparency permission.