> Site index: https://usehardal.com/llms.txt
> Every content route also serves markdown at <url>.md

# What Is SKAdNetwork (SKAN)? iOS Attribution Guide

Learn how Apple's SKAdNetwork handles iOS attribution, SKAN 4 postbacks, crowd anonymity, reporting limits, ROAS, and the move to AdAttributionKit.

Source: https://usehardal.com/skadnetwork-skan-guide
Published: 2026-02-16
Updated: 2026-08-22
Author: Ecem Bircan
Category: Mobile Marketing

---

SKAdNetwork, commonly shortened to SKAN, is Apple's privacy-preserving framework for attributing app installs and post-install activity to ads. It sends signed postbacks without a user or device identifier, so marketers can measure iOS campaign results even when a person has not granted App Tracking Transparency (ATT) permission.

SKAN reports campaign signals while withholding the user journey. Reporting arrives after privacy delays, and Apple may remove detailed fields when a conversion cohort is too small. Those constraints shape campaign structure, conversion mapping, and ROAS analysis.

Apple now directs developers to [AdAttributionKit](https://developer.apple.com/documentation/adattributionkit) for app ad campaigns. SKAdNetwork remains relevant because existing integrations and postbacks still use it, and [the two frameworks interoperate](https://developer.apple.com/documentation/adattributionkit/adattributionkit-skadnetwork-interoperability).

## What is SKAdNetwork (SKAN)?

SKAdNetwork is the full name behind the acronym **SKAN**. The "SKAN method" describes an Apple-controlled attribution flow with three main participants:

1. An **ad network** signs ads and receives install-validation postbacks.
2. A **source app**, or a Safari web page for an attributable web ad, displays the ad.
3. The **advertised app** updates conversion values as the person uses the app.

Apple performs the attribution on the device. An ad network, mobile measurement partner (MMP), or analytics platform receives, validates, maps, and reports the result.

SKAN and ATT handle different parts of iOS measurement. ATT controls permission for cross-app tracking and access to the Identifier for Advertisers (IDFA). SKAN provides an attribution signal without IDFA. Apple allows apps to call [SKAdNetwork APIs regardless of ATT authorisation status](https://developer.apple.com/documentation/storekit/skadnetwork).

## How does SKAdNetwork attribution work?

The SKAN attribution flow has seven steps:

1. **The ad network registers with Apple.** Apple issues an ad network ID, and the network creates the keys it needs to sign ads.
2. **The publisher configures the source app.** The app lists approved ad network IDs in its `Info.plist` file.
3. **The network signs and serves the ad.** SKAN supports StoreKit-rendered ads, view-through ads inside apps, and attributable web ads in Safari.
4. **A person installs and opens the advertised app.** A click-through ad can qualify for an install within 30 days. A view-through ad has a 24-hour window. The installed app then has up to 60 days to launch and send its first conversion update.
5. **The app updates conversion values.** These values encode outcomes such as onboarding, trial start, purchase, or a revenue band.
6. **Apple selects the attribution winner.** Under Apple's current interoperability rules, click-through impressions take priority over view-through impressions. Recency breaks ties within each group, and the system considers up to six impressions for a conversion.
7. **The device sends delayed postbacks.** The winning ad network receives the signed result. From iOS 15, the advertised app's developer can also receive a copy after configuring a postback endpoint.

The signed result identifies the winning ad signal without exposing a user-level trail.

## What data does SKAdNetwork report?

A SKAN postback can contain the following fields. The exact payload depends on the SKAN version, conversion window, and crowd anonymity tier.

| Field | What it tells you | Main restriction |
| --- | --- | --- |
| `source-identifier` | A network-defined campaign hierarchy | SKAN 4 returns two, three, or four digits based on the data tier |
| `conversion-value` | A fine value from 0 to 63 | Available only in the first postback when the privacy tier allows it |
| `coarse-conversion-value` | A low, medium, or high value | Used in lower data tiers and in later postbacks |
| `postback-sequence-index` | Which conversion window produced the postback | SKAN 4 values are 0, 1, or 2 |
| `did-win` | Whether the ad won attribution | Available in SKAN 3 and later |
| `fidelity-type` | Whether attribution came from a view or a click | 0 represents view-through; 1 represents a StoreKit-rendered or attributable web ad |
| `source-app-id` or `source-domain` | Where the ad appeared | Apple may remove it to protect crowd anonymity |
| `redownload` | Whether the Apple Account previously installed the app | It does not identify the person or device |

Campaign labels such as source and medium come from your ad network or MMP's mapping. They are not native SKAN fields. Apple's [postback parameter reference](https://developer.apple.com/documentation/storekit/identifying-the-parameters-in-install-validation-postbacks) lists every field by version.

## SKAN 4 conversion values and postback windows

[SKAdNetwork 4](https://developer.apple.com/documentation/storekit/skadnetwork-4-release-notes), available from iOS 16.1, added three conversion windows, coarse conversion values, hierarchical source identifiers, and web-to-app attribution for Safari ads.

| Conversion window | Activity measured | Possible report | Random delay after the window closes or locks |
| --- | --- | --- | --- |
| Days 0 to 2 | Early actions such as registration, trial start, or purchase | Fine value from 0 to 63, or a coarse value | 24 to 48 hours |
| Days 3 to 7 | Retention and later conversion signals | Coarse value: low, medium, or high | 24 to 144 hours |
| Days 8 to 35 | Longer-term quality or revenue signals | Coarse value: low, medium, or high | 24 to 144 hours |

The app can lock a conversion value before a window closes. Locking starts postback preparation sooner, but the random delivery delay still applies. Tier 0 and nonwinning attributions receive only the first postback.

Fine conversion values can encode 64 states. A subscription app might reserve values for onboarding, trial, paid conversion, and revenue bands. Coarse values need a simpler mapping that remains useful when Apple withholds the fine value. Define low, medium, and high through clear differences in business quality.

## How do crowd anonymity and Apple's privacy threshold work?

Crowd anonymity controls how much detail Apple includes in a postback. Apple assigns a data tier to each app download. Its calculation considers the crowd associated with the source app or domain, the advertised app, the install country, and the hierarchical source identifier.

| Data tier | First postback | Second and third postbacks |
| --- | --- | --- |
| Tier 0 | Two-digit source identifier, without a conversion value | Not sent |
| Tier 1 | Two-digit source identifier and a coarse conversion value | Two-digit source identifier and a coarse value |
| Tier 2 | Two-, three-, or four-digit source identifier and a fine conversion value | Two-digit source identifier and a coarse value |
| Tier 3 | Tier 2 data, plus source app or domain and an optional country code | Two-digit source identifier and a coarse value |

Apple does not publish a fixed threshold such as "20 installs per day." Its [data-tier diagrams are illustrative](https://developer.apple.com/documentation/storekit/receiving-postbacks-in-multiple-conversion-windows), and the numeric cutoffs are not public. Treat a null or redacted field as a privacy outcome before treating it as an integration failure.

Campaign fragmentation can reduce the detail you receive. Keep the source identifier taxonomy stable, avoid campaign splits that serve no reporting purpose, and define coarse values before launch. These choices preserve useful signals when a campaign falls into a lower tier.

## SKAdNetwork limitations for mobile attribution

SKAN's privacy design creates six practical limits:

1. **Reporting is delayed.** The first postback arrives at least 24 to 48 hours after the final conversion update. Later postbacks can arrive up to six days after their window closes.
2. **Granularity depends on campaign volume.** Low-tier postbacks can lose fine conversion values, source details, country, and later windows.
3. **Attribution is single-touch.** Clicks take priority over views, then the most recent eligible impression wins. SKAN does not explain how earlier ads assisted the conversion.
4. **Revenue is encoded.** A six-bit conversion value cannot carry an open-ended purchase amount. Teams use events or revenue bands, then estimate aggregate ROAS.
5. **User-level analysis is unavailable.** SKAN cannot provide a person-level path across an ad, install, session, and purchase.
6. **Implementations vary by network.** Campaign IDs, conversion mappings, forwarding rules, and modelled metrics differ across Snapchat, Meta, Google, and other platforms.

These limits make SKAN one input to an iOS measurement system. Consent-based attribution, first-party product events, ad spend, aggregate revenue, and incrementality tests answer questions that a SKAN postback cannot.

### Does SKAN only work in Safari?

SKAN covers ads shown inside iOS apps. Safari is only required for the web-to-app path introduced with SKAN 4. [SKAdNetwork for Web Ads](https://developer.apple.com/documentation/skadnetworkforwebads) attributes eligible Safari ad clicks that lead to App Store installs. It does not cover clicks inside `SFSafariViewController`, `WKWebView`, or another browser.

## What should a SKAdNetwork solution provide?

Apple supplies the attribution signal. A SKAdNetwork solution or analytics platform makes the postbacks usable. It should:

- collect postback copies from Apple and forwarded postbacks from ad networks;
- verify Apple's signature and deduplicate each `transaction-id`;
- decode source identifiers and fine or coarse conversion values;
- normalise fields across SKAN versions, networks, and conversion windows;
- preserve null and redacted values instead of silently turning them into zeroes;
- join postbacks with campaign spend and aggregate first-party events; and
- report installs, conversion quality, revenue ranges, and ROAS by cohort.

An MMP often handles the app calls and network mappings through its SDK, but teams can also implement Apple's APIs and postback endpoint directly. The choice depends on how much infrastructure the team wants to own. Hardal's [mobile analytics](https://usehardal.com/mobile) keeps privacy-first app events and attribution data in the same first-party data layer.

## How to improve SKAN attribution and ROAS

Start with the decisions your reporting needs to support. Then configure the data around them.

1. **Map the events that separate install quality.** Use the 64 fine values for outcomes that distinguish low- and high-quality installs. Reserve ranges for revenue if purchase value drives bidding.
2. **Give every fine value a coarse equivalent.** Tier 1 and later postbacks may only return low, medium, or high. Each label needs a clear economic meaning.
3. **Control source identifier fragmentation.** Use the leading digits for the dimensions you cannot afford to lose. Apple may return only two digits at lower tiers.
4. **Receive your own postback copies.** Add `NSAdvertisingAttributionReportEndpoint` to the advertised app and verify the payloads against Apple's signature.
5. **Wait for complete cohorts.** A same-day dashboard will undercount SKAN. Compare cohorts only after the relevant conversion window and random delay have passed.
6. **Calculate ROAS as a range when needed.** If a conversion value represents a revenue band, report the lower and upper bound or a clearly labelled estimate. Reconcile it with aggregate first-party revenue.
7. **Keep modelled data separate.** Ad networks may model conversions below the campaign level. Put modelled, consented, and SKAN-reported results in separate columns to prevent double counting.

If installs are missing, check the ad network IDs in the source app, ad signatures, the first conversion update, and the postback endpoint. If installs appear but conversion values are null, check the data tier and the network's conversion mapping before changing the app integration.

## SKAN 4, SKAN 5, and AdAttributionKit

As of August 2026, Apple's released SKAdNetwork documentation ends at SKAN 4.

| Framework or version | Current status | Main capability |
| --- | --- | --- |
| SKAN 4 | Released with iOS 16.1 | Three conversion windows, coarse values, hierarchical source IDs, and Safari web ads |
| SKAN 5 | Announced at WWDC23, but absent from Apple's current SKAdNetwork release notes | Apple announced re-engagement measurement |
| AdAttributionKit | Apple's recommended framework for current app ad campaigns | App Store and alternative marketplace attribution, with re-engagement on iOS 18 and later |

Apple announced SKAN 5 in its [WWDC23 Platforms State of the Union](https://developer.apple.com/videos/play/wwdc2023/102/) and said it would add re-engagement. Apple's current [SKAdNetwork release notes](https://developer.apple.com/documentation/storekit/skadnetwork-release-notes) still list version 4 as the latest release. Re-engagement is now documented under AdAttributionKit.

Apps can support both frameworks during migration. When impressions from both qualify, Apple evaluates them together and chooses one attribution winner. An integration that uses both frameworks should call both conversion-update APIs.

## Does SKAN work with Snapchat and Apple Ads?

### Snapchat SKAdNetwork campaigns

Snapchat supports SKAN for iOS app campaigns. Advertisers opt in, connect a Snap App ID, map conversion values to Snap event types, and can forward postbacks to an MMP. Snapchat also states that some ad-level SKAN results are modelled, so keep those metrics separate from raw Apple postbacks. See Snapchat's [SKAdNetwork setup guide](https://businesshelp.snapchat.com/articles/en_US/Knowledge/skadnetwork).

### Apple Search Ads and SKAN

Apple Search Ads now operates under the Apple Ads name. Apple Ads registered with SKAdNetwork on 10 April 2025 for versions 1 through 3 and click-through attribution. Apple's [AdServices attribution API](https://developer.apple.com/documentation/adservices) remains available for campaign, ad group, placement, and keyword details. Apple describes AdServices and SKAN or AdAttributionKit as complementary measurement sources.

## Official SKAdNetwork documentation

Use Apple's documentation as the source of truth for implementation details:

- [SKAdNetwork overview](https://developer.apple.com/documentation/storekit/skadnetwork)
- [SKAdNetwork release notes](https://developer.apple.com/documentation/storekit/skadnetwork-release-notes)
- [Postback windows and crowd anonymity tiers](https://developer.apple.com/documentation/storekit/receiving-postbacks-in-multiple-conversion-windows)
- [Install-validation postback parameters](https://developer.apple.com/documentation/storekit/identifying-the-parameters-in-install-validation-postbacks)
- [Testing SKAN attribution and postbacks](https://developer.apple.com/documentation/storekit/testing-ad-attributions-with-a-downloaded-profile)
- [AdAttributionKit and SKAdNetwork interoperability](https://developer.apple.com/documentation/adattributionkit/adattributionkit-skadnetwork-interoperability)
