iOS after ATT: campaign-level truth when user-level attribution isn't on offer
Deterministic iOS attribution largely went away with App Tracking Transparency. SKAdNetwork and AdAttributionKit are what's left, and they need handling.
Updated Sep 3, 2026
Who runs this
- Performance & paid
- Engineers
What it uses
- SKAdNetwork postback ingestion and conversion values
- AdAttributionKit
- Post-install events
- Ad-network cost data (Meta, Google, TikTok, X)
On iOS, the click-to-install path that attribution was built on is mostly gone. There is no advertising identifier to join on unless the user opts in, and most don't. What Apple offers instead is a postback — a delayed, aggregated, privacy-thresholded signal from the store that says a campaign produced an install and, within limits, what the user did next.
What problem does this solve?
You still need to know which iOS campaigns are paying back. The postback can tell you, but only if something ingests it, maps its coarse conversion value back to events you understand, and lines it up against the spend. Left raw, it is a number in a network console with no context.
How do you set it up?
Postbacks arrive from Apple, not from a click, so there is no link to configure for the attribution itself. What you configure is the conversion value schema — which post-install events map to which value — and the campaign identifiers, so the postback's campaign field joins to the spend you imported. The deferred link still matters for the user's first screen; it just isn't the attribution source on iOS.
{
"deepLinkPath": "/onboarding",
"customData": {"cmp": "asa-brand-us", "step": "trial"}
}What do the two Apple frameworks give you?
| SKAdNetwork | AdAttributionKit | |
|---|---|---|
| Availability | iOS 14+ | iOS 17.4+, with re-engagement on 18.4+ |
| Granularity | Campaign-level, privacy-thresholded | Campaign-level, with more postback windows |
| Re-engagement | No | Yes, from 18.4 |
| What you get | A conversion value, delayed | Conversion values across up to three windows |
Neither tells you which user installed. Both tell you which campaign did, at a delay, and both need the conversion value mapped to something you can reason about. Ingest both — networks are moving to AdAttributionKit at different speeds.
What's the catch?
Delay and thresholds. Postbacks arrive hours to days after the install, and a campaign below Apple's privacy threshold gets a null conversion value. Small campaigns therefore report late and vaguely. That is a property of the framework, not a bug in the ingestion, and any tool that claims to know the individual user behind an iOS postback is claiming something Apple does not provide.
Which metric should you watch?
Conversion-value distribution by campaign, not install count. Two iOS campaigns with equal postback volume can have completely different value distributions, and the distribution is the only signal about user quality the framework gives you.
Related use cases
Cost reconciliation
Channel cost reconciliation: one CPI across networks that each count their own way
Meta says 900, TikTok says 1,100, the dashboard says 1,400 — and nobody can explain the gap.
Verify first
Verify attribution before you spend: proving the funnel works in staging, not in a campaign report
Run the whole loop — click, install, first open, match — and check the audit log says deterministic before a single ad dollar goes out.
Every one of these depends on the same two things: link context surviving an install, and an honest answer to which click produced it. The scoring model is published in full on our methodology page, and you can check any domain's association files with our free link validator.