Deeplinkly

Glossary/iOS platform and privacy

AdAttributionKit

Definition

AdAttributionKit 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.

It is SKAdNetwork's successor and keeps SKAN's entire privacy model — crowd anonymity, hierarchical source identifiers, three delayed postbacks, the same 6-bit conversion value. What it adds is the part SKAN never had: re-engagement measurement, support for marketplaces other than the App Store, and configurable windows. The two frameworks run side by side today, and a correctly instrumented ad can produce postbacks from both.

What it changes relative to SKAdNetwork

The privacy architecture is unchanged, so nothing you learned about crowd anonymity or conversion value encoding is wasted. The differences are in scope and control.

AdAttributionKit compared with SKAdNetwork 4.0.
CapabilitySKAdNetwork 4.0AdAttributionKit
Minimum OSiOS 16.1 for 4.0 featuresiOS 17.4
Install attributionYesYes
Re-engagement attributionNoYes — a separate postback type
Install sourceApp Store onlyApp Store and alternative marketplaces
Conversion windowsFixed: 0–2, 3–7, 8–35 daysConfigurable, and may overlap
Developer copy of postbacksNSAdvertisingAttributionReportEndpointAttributionCopyEndpoint
Region in postbackNoCoarse geo, subject to anonymity tier
TestingSandbox-limitedDeveloper mode with fast postbacks

Re-engagement is the substantive addition. SKAN could only ever answer "which ad caused this install"; AdAttributionKit can also answer "which ad brought this existing user back", which is the question every retargeting budget has been spending against blind since 2021.

The three roles and the calls each one makes

Instrumentation splits across a publisher app that renders the ad, the advertised app that gets installed or reopened, and an ad network that signs the impression and receives the postback.

Publisher app: register an impression, then handle the tap
import AdAttributionKit

// The ad network hands you a signed JWS describing the advertised item.
// AdAttributionKit verifies the signature; a bad one throws here rather
// than silently producing an unattributable impression.
let impression = try await AppImpression(compactJWS: signedPayload)

// View-through: the ad was on screen but not tapped.
try await impression.beginView()
// ... ad is visible ...
try await impression.endView()

// Click-through: opens the store or the marketplace product page.
try await impression.handleTap()
Advertised app: report the conversion
import AdAttributionKit

// Fine value is the 6-bit payload (0–63). Coarse is what survives when
// the install cohort is too small to carry the fine value.
try await Postback.updateConversionValue(
    fineConversionValue: 12,
    coarseConversionValue: .medium,
    lockPostback: false
)

// lockPostback: true closes the current window early. It does NOT send
// the postback immediately — the randomised delay still applies.

Lock does not mean send

lockPostback: true finalises the value for the window so later calls are ignored; the postback itself is still held and released on Apple's randomised schedule. Every attribution framework Apple ships decouples "the value is final" from "the report is sent", because sending on demand would let arrival time leak the conversion timing back to the network.

Getting a copy of your own postbacks

Postbacks go to the ad network, not to you. To receive a copy of the ones your app wins, declare an endpoint in Info.plist. AdAttributionKit uses a different key from SKAN's, and an app instrumented for both wants both keys present.

Info.plist
<!-- AdAttributionKit copies -->
<key>AttributionCopyEndpoint</key>
<string>https://postbacks.example.com</string>

<!-- SKAdNetwork copies, for as long as you also run SKAN -->
<key>NSAdvertisingAttributionReportEndpoint</key>
<string>https://postbacks.example.com</string>

<!-- Development builds only. Never ship this true. -->
<key>AdAttributionKitDeveloperMode</key>
<true/>
  • The endpoint must be HTTPS and must accept a POST with a JSON body.
  • Apple appends its own well-known path to the host you declare, so register the origin and let the framework choose the path.
  • Respond 200 quickly. A timeout or a 5xx is a lost postback, and there is no way to ask for it again.
  • Developer mode shortens the delays to seconds so you can test end to end, and marks the resulting postbacks as test traffic — which is also why shipping it enabled would poison your production reporting.

What to do about it now

Apple has not announced a SKAdNetwork end-of-life date, and SKAN remains fully supported, so this is not a migration with a deadline attached. It is also not a reason to defer: the frameworks coexist, and AdAttributionKit is the only path to re-engagement measurement and to attribution for installs from alternative marketplaces under the EU's Digital Markets Act.

A pragmatic sequencing.
If you areDo this
An advertiser running UA on iOSKeep SKAN instrumented, add AdAttributionKit alongside it, and keep one conversion value schema feeding both
Running retargeting on iOSAdAttributionKit is the reason to act — re-engagement postbacks do not exist in SKAN at all
Shipping in the EU via a marketplaceAdAttributionKit is required; SKAN does not attribute non-App-Store installs
A publisher monetising with adsAdopt the impression APIs, since networks increasingly require both frameworks to bid

Adoption is still thin

Two years after launch, industry reporting puts AdAttributionKit volume at a small fraction of SKAN's. Plan for a period where AdAttributionKit is your re-engagement signal and SKAN is still your install signal, and do not build reporting that assumes one of them will be complete.

The framework's surface has moved more than once — iOS 18.4 added configurable and overlapping conversion windows, coarse region data in postbacks, and better developer-mode testing. Check Apple's AdAttributionKit documentation and the WWDC sessions against your target OS version before committing to a schema.

SKAN conversion value builder

Our conversion value builder designs the 6-bit schema both frameworks send, so the encoding you settle on works for SKAdNetwork postbacks and AdAttributionKit postbacks without maintaining two mappings.

Open the skan conversion value builder

Frequently asked questions

What is AdAttributionKit?
AdAttributionKit is Apple's ad attribution framework, introduced in iOS 17.4, that sends privacy-preserving postbacks reporting which ad led to an app install or a re-engagement. It keeps SKAdNetwork's privacy model — crowd anonymity thresholds, hierarchical source identifiers, delayed postbacks and a 6-bit conversion value — while adding re-engagement measurement and support for installs from alternative app marketplaces.
Is AdAttributionKit replacing SKAdNetwork?
It is positioned as the successor, but Apple has published no deprecation date for SKAdNetwork and SKAN remains fully supported. In practice both frameworks run in the same app at the same time, and a single ad can generate postbacks from each, so the current answer is to instrument both rather than to migrate off one.
What is the difference between AdAttributionKit and SKAdNetwork?
The privacy model is the same; the scope is not. AdAttributionKit adds re-engagement postbacks, attributes installs from alternative marketplaces rather than the App Store alone, allows configurable and overlapping conversion windows, can include coarse region data, and uses the AttributionCopyEndpoint Info.plist key instead of NSAdvertisingAttributionReportEndpoint for developer copies.
How do I test AdAttributionKit postbacks?
Add the AdAttributionKitDeveloperMode key set to true in a development build's Info.plist. Developer mode compresses the randomised postback delays down to seconds so a full impression-to-postback cycle is testable in one session, and flags the resulting postbacks as test traffic. It must never be enabled in a build you ship, because those flags would contaminate production reporting.
Does AdAttributionKit require ATT permission?
No. Like SKAdNetwork it is designed to work without the IDFA and without an App Tracking Transparency prompt, which is the point of the framework: attribution is performed by the operating system and reported in aggregate rather than by joining a device identifier across apps. ATT only matters if you separately want device-level identifiers for other purposes.

Related terms

  • SKAdNetworkSKAdNetwork 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.
  • 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.
  • 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.
  • App Tracking Transparency (ATT)App Tracking Transparency is the iOS framework that requires an app to obtain explicit user permission before accessing the device's advertising identifier or otherwise tracking that user across apps and websites owned by other companies.