SKAdNetwork 4.0 Guide: How the Three Postback Windows Work

opoinstall
2026-08-19
5 min read

How does SKAdNetwork 4.0 multi-window attribution work? SKAdNetwork 4.0 divides conversion measurement into three sequential windows spanning days 0–2, 3–7, and 8–35 after the app’s first launch. Apple assigns a postback data tier to each app download, which determines whether eligible postbacks expose fine-grained, coarse-grained, or reduced attribution data.

SKAdNetwork 4.0 is Apple’s privacy-preserving mobile advertising attribution framework that enables privacy-safe campaign measurement on iOS. It introduces three sequential conversion windows spanning up to 35 days after first launch, hierarchical source identifiers, coarse-grained conversion values, and window locking mechanics to evaluate mid-funnel user lifetime value without harvesting persistent device identities.

Term Definition
SKAdNetwork Apple’s platform-level framework for privacy-preserving ad campaign attribution.
Conversion Window One of three designated measurement periods beginning at first app launch during which the advertised app may update conversion values.
Postback Data Tier A platform-assigned tier (Tier 0 to Tier 3) that governs the granularity of metadata returned in postbacks.
Coarse Conversion Value A three-level conversion signal (low, medium, high) that may be disclosed when fine-grained conversion data is unavailable or in later conversion windows.

At a Glance: Key Postback Timelines and Disclosure Rules

  • Window 1 (Day 0–2 After First Launch): May disclose fine-grained (0–63) or coarse-grained (low, medium, high) values; dispatches after an additional randomized 24–48 hour delay.
  • Window 2 (Day 3–7 After First Launch): May disclose a coarse-conversion-value when provided and permitted by the postback data tier; otherwise that field is absent. Dispatches after an additional randomized 24–144 hour delay.
  • Window 3 (Day 8–35 After First Launch): May disclose a coarse-conversion-value when provided and permitted by the postback data tier; otherwise that field is absent. Dispatches after an additional randomized 24–144 hour delay.
  • Tier 0 Data Constraint: Downloads landing in Tier 0 receive a single postback containing a 2-digit source ID and no conversion value; second and third postbacks are omitted.
  • Multiple-Postback Requirement: To be eligible for multiple winning postbacks, the ad must be signed using SKAdNetwork 4 or later, and the advertised app must update conversion values during the applicable conversion windows.

What Is SKAdNetwork 4.0 and How Does Multi-Window Attribution Operate

The Structural Evolution from Single-Timer Constraints to Multi-Window Lifecycle Tracking

Early versions of Apple’s StoreKit Ad Network (SKAdNetwork 2.0 and 3.0) operated under a single 24-hour rolling timer. Under SKAdNetwork 3 and earlier, valid increasing conversion-value updates could extend the rolling conversion period by restarting the 24-hour timer. Once 24 hours elapsed without an update, the window closed, and Apple dispatched a single postback following a randomized delay.

This single-timer architecture created operational friction:

  • Restricted Observation Horizons: Advertisers could only measure early engagement occurring during the initial days post-install.
  • Reporting Delays: Repeated qualifying conversion updates could extend the effective measurement period and delay the final postback, slowing automated ad bidding algorithms.
  • Limited Long-Tail Visibility: SKAdNetwork 3 had no dedicated later conversion windows for structured Day-7-to-Day-30 measurement.

SKAdNetwork 4.0 restructures this model by establishing three fixed, sequential measurement windows anchored to the user’s first application launch.

Decoupling Attribution Timers from Active User Sessions

In SKAdNetwork 4.0, conversion windows advance based on fixed calendar duration rather than continuous user activity. When an app is opened for the first time following an attributed ad impression, the operating system initiates Window 1.

Whether the user opens the application once or fifty times during the first 48 hours, Window 1 closes at the 48-hour mark (unless explicitly finalized early via window locking). The system then automatically advances to Window 2 (Day 3 through Day 7), followed by Window 3 (Day 8 through Day 35). This decoupling guarantees structured postback dispatch intervals for downstream data pipelines.

The Two-Legged Cryptographic Signature Chain

SKAdNetwork maintains data integrity using public-key cryptography across two distinct phases:

  • Ad Impression Leg (Ad Network to Apple): When an ad network serves an impression, it signs the ad payload using its private key. Upon app installation and launch, the operating system validates this signature against the ad network’s public key registered with Apple to verify attribution eligibility.
  • Install-Validation Leg (Apple to Ad Network/Developer): When a conversion window closes, Apple signs the install-validation postback payload. The receiving ad network and developer endpoint verify this signature using Apple’s public key to verify the authenticity and integrity of the postback.

See Also: SKAdNetwork ──> Mobile Attribution Model

The Mechanics of the Three Postback Windows and Measurement Timelines

Window 1: Capturing Early Engagement and High-Precision Conversion Signals

  • Measurement Interval: Day 0 to Day 2 (first 48 hours after first launch).
  • Data Disclosure Available: Fine-grained conversion value (6-bit integer from 0 to 63) or coarse-grained value (low, medium, high), determined by the assigned postback data tier.
  • Randomized Postback Delay: 24 to 48 hours after the window closes or locks.
  • Analytical Objective: Measuring immediate onboarding completion, tutorial milestones, initial purchase conversion, and early churn risk.

Window 2: Evaluating Early User Retention and Mid-Funnel Milestones

  • Measurement Interval: Day 3 to Day 7 after first launch (hours 48 through 168).
  • Data Disclosure Available: May disclose a coarse-conversion-value (low, medium, high) when provided and permitted by the postback data tier; otherwise that field is absent. Fine-grained values (0 to 63) are not supported in Window 2.
  • Randomized Postback Delay: 24 to 144 hours (1 to 6 days) after the window closes or locks.
  • Analytical Objective: Assessing Day-3 to Day-7 retention, multi-day engagement loops, initial subscription trials, and repeat purchasing behavior.

Window 3: Measuring Long-Tail Retention and Cumulative Lifetime Value

  • Measurement Interval: Day 8 to Day 35 after first launch (hours 168 through 840).
  • Data Disclosure Available: May disclose a coarse-conversion-value (low, medium, high) when provided and permitted by the postback data tier; otherwise that field is absent.
  • Randomized Postback Delay: 24 to 144 hours (1 to 6 days) after the window closes or locks.
  • Analytical Objective: Capturing Month-1 retention benchmarks, trial-to-paid subscription conversions, and long-tail monetization milestones.

Technical timeline diagram illustrating SKAdNetwork 4.0 three sequential conversion windows, postback delay ranges, and fine versus coarse value rules on a warm soft cream grid background.

Ad Impression
      │
      ▼
App Install
      │
      ▼
First App Launch  ← conversion measurement t = 0
      │
      ├── Window 1: Day 0–2 after first launch
      │      Fine or coarse disclosure
      │      24–48h randomized delay after close/lock
      │
      ├── Window 2: Day 3–7 after first launch
      │      Coarse disclosure only (or absent)
      │      24–144h randomized delay after close/lock
      │
      └── Window 3: Day 8–35 after first launch
             Coarse disclosure only (or absent)
             24–144h randomized delay after close/lock

Randomized Delay Mechanics: Window 1 versus Windows 2 and 3

To prevent timing-attack heuristics where an observer correlates the exact millisecond of an in-app transaction with the receipt of an attribution postback, Apple applies randomized dispatch delays:

  • Window 1 Timer: If Window 1 closes naturally without an early lock, the first postback is sent after an additional randomized 24-to-48-hour delay.
  • Windows 2 and 3 Timers: Apple expands the randomized delay window to 24 through 144 hours (up to 6 full days) to account for the extended duration of the measurement periods.

How Postback Data Tiers Control Disclosure

The Official Postback Data Tier Matrix

Apple assigns a postback data tier (Tier 0 through Tier 3) to app downloads based on the crowd associated with the source app or domain, the advertised app, the country of install, and the hierarchical source identifier. Apple does not publish universal install-count thresholds for Tier 0 through Tier 3.

Postback Data Tier First Postback (Window 1) Second & Third Postbacks (Windows 2 & 3)
Tier 3 2, 3, or 4-digit source ID + fine value (if provided) + eligible source/country metadata 2-digit source ID + coarse value (if provided)
Tier 2 2, 3, or 4-digit source ID + fine value (if provided) 2-digit source ID + coarse value (if provided)
Tier 1 2-digit source ID + coarse value (if provided) 2-digit source ID + coarse value (if provided)
Tier 0 2-digit source ID only (no conversion value) No second or third postbacks sent

Enterprise comparison matrix chart illustrating SKAdNetwork 4.0 postback data tier disclosure rules across Tier 0 to Tier 3 with distinct status badges on a warm cream grid backdrop.

How Hierarchical Source Identifiers Work

Structure and Granularity of the Source Identifier

SKAdNetwork 4.0 replaces the legacy 2-digit Campaign ID with a 4-digit hierarchical integer called the Source Identifier:

Source Identifier=d4d3d2d1(0000 to 9999)\text{Source Identifier} = d_4 d_3 d_2 d_1 \quad (0000 \text{ to } 9999)

Ad networks and developers define the meaning of the hierarchical source identifier based on internal reporting requirements:

  • Lower Two Digits (d2d1d_2 d_1): Form the minimum two-digit portion of the hierarchical source identifier that may be disclosed. Ad networks may use this portion for broad campaign grouping, but Apple does not prescribe a fixed business meaning.
  • Higher-Order Digits (d4d3d_4 d_3): May encode internal dimensions such as ad placement, creative ID, or geographic target. Apple does not assign fixed business semantics to individual digits.

Technical architecture diagram breaking down the 4-digit SKAdNetwork 4.0 hierarchical source identifier into 2-digit versus 4-digit disclosure states on a warm soft cream grid backdrop.

Original Source Identifier: [ d4 ] [ d3 ] [ d2 ] [ d1 ]

Possible disclosed forms in first winning postback:
2-digit disclosure:          [ d2 ] [ d1 ]
3-digit disclosure:    [ d3 ][ d2 ] [ d1 ]
4-digit disclosure: [ d4 ][ d3 ][ d2 ] [ d1 ]

The exact number of digits disclosed depends on Apple's postback data tier.

Campaign consolidation may increase the crowd associated with particular source identifiers, but Apple does not publish universal install thresholds and consolidation does not guarantee a specific postback data tier.

Fine-Grained versus Coarse-Grained Conversion Values

Fine-Grained Conversion Values

Fine-grained conversion values operate as 6-bit binary numbers representing integers from 0 to 63 (26=642^6 = 64 discrete values). Available strictly in Window 1 under Tier 2 or Tier 3 postback data tiers, fine values allow developers to encode granular revenue ranges, funnel stages, or bitwise event combinations.

Coarse-Grained Conversion Values

Coarse-grained conversion values provide a lower-granularity alternative when the applicable postback data tier does not permit fine-grained disclosure and serve as the conversion-value format for the second and third postbacks. Apple assigns no predefined business semantics to low, medium, or high; the examples below are illustrative application-defined mappings:

  • low: Illustrative mapping for baseline engagement (e.g., initial app open or registration).
  • medium: Illustrative mapping for intermediate engagement (e.g., completed tutorial or multi-day active session).
  • high: Illustrative mapping for high-value conversion milestones (e.g., in-app purchase or trial activation).

For implementation-specific conversion schema design, see the SKAN conversion mapping documentation.

Postback Sequence Index Mapping

In SKAdNetwork 4 postbacks, the postback-sequence-index field identifies the corresponding conversion window:

postback-sequence-index Corresponding Conversion Window Permitted Conversion Value Formats
0 Window 1 (Day 0–2 after first launch) Fine-grained (0–63) OR Coarse-grained (low, medium, high)
1 Window 2 (Day 3–7 after first launch) Coarse-grained (low, medium, high) only (or absent)
2 Window 3 (Day 8–35 after first launch) Coarse-grained (low, medium, high) only (or absent)

Apple specifies that an install-validation postback may contain either a conversion-value (fine) or a coarse-conversion-value (coarse), but never both simultaneously.

The following payloads are illustrative SKAdNetwork 4 examples. Actual postback fields vary by postback sequence, postback data tier, ad type, and privacy disclosure conditions. The sample attribution-signature values are placeholders and are not cryptographically valid.

Example 1 below illustrates a Window 1 fine-grained postback payload, and Example 2 illustrates a Window 2 coarse-grained postback payload:

{
  "version": "4.0",
  "ad-network-id": "example123.skadnetwork",
  "source-identifier": "4821",
  "app-id": 1234567890,
  "transaction-id": "6a8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
  "postback-sequence-index": 0,
  "conversion-value": 47,
  "fidelity-type": 1,
  "did-win": true,
  "attribution-signature": "MEQCIFz8...SAMPLE_CRYPTOGRAPHIC_SIGNATURE...=="
}
{
  "version": "4.0",
  "ad-network-id": "example123.skadnetwork",
  "source-identifier": "48",
  "app-id": 1234567890,
  "transaction-id": "6a8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
  "postback-sequence-index": 1,
  "coarse-conversion-value": "high",
  "fidelity-type": 1,
  "did-win": true,
  "attribution-signature": "MEQCIFz8...SAMPLE_CRYPTOGRAPHIC_SIGNATURE...=="
}

Trade-Offs of Locking a Conversion Window Early

Accelerating Measurement with the lockWindow Parameter

By default, each measurement window remains open for its full calendar duration (48 hours for Window 1, 5 days for Window 2, 28 days for Window 3). When lockWindow is true, the update becomes the final conversion-value update for the active window. The system prepares the postback and ignores additional conversion-value updates for the remainder of that window.

Technical diagram comparing default 48-hour measurement window against early window locking acceleration in SKAdNetwork 4.0 on a warm soft cream grid backdrop.

Default Window 1 (No Lock):
[First Launch] ─────────────── 48 Hours Open ───────────────► [Closes] ──► Delay (24-48h) ──► Postback 1

Locked Window 1 (Purchase at Hour 6):
[First Launch] ── 6h (Lock: true) ──► [Conversion Value Locked / Postback Prepared] ──► Delay (24-48h) ──► Postback 1 Sent Sooner

Operational Considerations When Invoking Window Locks

  • Accelerated Postback Dispatch: When a conversion is finalized early, the postback delay begins as soon as the locked conversion is finalized, rather than waiting for the full calendar window to elapse.
  • Window Independence: Locking the current window does not move the start of the next window forward. The next conversion window still begins at its predefined time boundary (e.g., Window 2 begins on Day 3 regardless of when Window 1 was locked).
  • Subsequent Event Lockout: Once lockWindow: true is executed, the operating system ignores all subsequent conversion value update calls during the remainder of that specific window.

The Swift code below demonstrates how to update fine and coarse conversion values and invoke window locks using StoreKit:

import Foundation
import StoreKit

enum SKANError: Error {
    case invalidFineValue
    case unsupportedOSVersion
}

final class SKAN4Manager {

    static let shared = SKAN4Manager()
    private init() {}

    /// Updates conversion values and optionally locks the active SKAN 4.0 window
    /// - Parameters:
    ///   - fineValue: 6-bit integer (0 to 63) for Window 1. Note: In Windows 2 and 3, SKAdNetwork ignores the fineValue parameter.
    ///   - coarseValue: Coarse value string ("low", "medium", "high") for all windows
    ///   - shouldLock: Boolean flag to immediately finalize the active window
    func updateConversionState(
        fineValue: Int,
        coarseValue: SKAdNetwork.CoarseConversionValue,
        shouldLock: Bool,
        completion: ((Error?) -> Void)? = nil
    ) {
        guard #available(iOS 16.1, *) else {
            completion?(SKANError.unsupportedOSVersion)
            return
        }

        // Validate fine-grained value bounds (0 to 63)
        guard (0...63).contains(fineValue) else {
            completion?(SKANError.invalidFineValue)
            return
        }

        // Execute asynchronous SKAN 4.0 conversion update
        SKAdNetwork.updatePostbackConversionValue(
            fineValue,
            coarseValue: coarseValue,
            lockWindow: shouldLock
        ) { error in
            if let error = error {
                print("SKAN 4.0 update failed: \(error.localizedDescription)")
            } else {
                print("SKAN 4.0 update succeeded - Fine: \(fineValue), Coarse: \(coarseValue.rawValue), Locked: \(shouldLock)")
            }
            completion?(error)
        }
    }

    /// Illustrative revenue mapping workflow (Do not copy specific thresholds directly to production)
    /// Note: In production, determine the active conversion window and define window-specific coarse-value logic.
    func handleInAppPurchase(amountUSD: Double) {
        let fineVal: Int
        let coarseVal: SKAdNetwork.CoarseConversionValue
        let lock: Bool

        switch amountUSD {
        case 0.0..<5.0:
            fineVal = 10
            coarseVal = .low
            lock = false
        case 5.0..<25.0:
            fineVal = 25
            coarseVal = .medium
            lock = false
        case 25.0...:
            fineVal = 60
            coarseVal = .high
            // Lock window immediately to expedite postback preparation for high-value conversion
            lock = true
        default:
            fineVal = 0
            coarseVal = .low
            lock = false
        }

        updateConversionState(fineValue: fineVal, coarseValue: coarseVal, shouldLock: lock)
    }
}

SKAdNetwork 4.0 and AdAttributionKit Interoperability

The Relationship Between SKAdNetwork and Apple AdAttributionKit

Apple introduced AdAttributionKit as an expanded attribution framework for iOS 17.4 and later. AdAttributionKit and SKAdNetwork can coexist, but they remain distinct attribution APIs:

  • Framework-Specific API Invocations: Apps should call the conversion-update API that corresponds to the framework used by the ad network. If an ad network serves ads via AdAttributionKit, the app invokes AdAttributionKit conversion methods; if using SKAdNetwork, it calls StoreKit APIs.
  • Cross-Framework Winner Selection: When both frameworks record qualifying impressions for a single installation, the operating system evaluates them together and selects a single winning impression for attribution.
  • Bridging Behavior: Apple provides conversion-value bridging behavior for certain SKAdNetwork update calls to ensure compatibility across measurement layers.

SKAdNetwork 4 remains important for operating existing App Store attribution integrations, while Apple directs new app advertising implementations toward AdAttributionKit and documents interoperability between the two frameworks.

Comparative Matrix: Legacy SKAN 3.0 versus SKAN 4.0 Multi-Window Model

Functional Dimension Legacy SKAdNetwork 3.0 SKAdNetwork 4.0
Number of Winning Postbacks One Postback Up to Three Winning Postbacks
Measurement Timeline Rolling 24-hour timer after latest qualifying increasing update Up to 35 Days (Three Windows from First Launch)
Source ID Structure 2-Digit Integer (00 to 99) Hierarchical 4-Digit Source ID (2, 3, or 4 digits)
Conversion Value Granularity 6-Bit Integer (0 to 63) Only Fine-Grained (0 to 63) + Coarse-Grained (low, medium, high)
Early Finalization Not Supported Supported via Window Locking API (lockWindow: true)
Web-to-App Attribution Not Supported Supported for Attributable Web Ads in Safari

Frequently Asked Questions (FAQ)

Can an application receive fine-grained conversion values in Window 2 or Window 3?
No. Under the SKAdNetwork 4.0 specification, fine-grained conversion values (6-bit integers from 0 to 63) are exclusively available in the first postback window (0–2 days), provided the applicable postback data tier is Tier 2 or Tier 3. Windows 2 and 3 return coarse-grained values (`low`, `medium`, `high`) or omit the field.
What happens if an application does not lock a postback window early?
If an application does not invoke `lockWindow: true`, the window remains open for its full designated duration (48 hours for Window 1, 5 days for Window 2, or 28 days for Window 3). Once the window closes naturally, Apple applies the designated randomized delay before dispatching the postback to the ad network and, if the advertised app has configured a developer postback endpoint (`NSAdvertisingAttributionReportEndpoint`), sending the developer copy.
Does SKAdNetwork 4.0 require an App Tracking Transparency authorization prompt?
No. Using SKAdNetwork itself does not require ATT authorization because SKAdNetwork provides privacy-preserving attribution without exposing a persistent cross-app advertising identifier.

Summary and Decision Framework

SKAdNetwork 4.0 extends attribution visibility to 35 days from first app launch, introduces coarse-grained conversion values to provide lower-granularity measurement when fine-grained disclosure is unavailable, and allows developers to lock measurement windows to reduce postback latency when a conversion window is finalized early. Successful implementation requires careful conversion schema mapping across all three windows and aligning client-side update calls with genuine business milestones.

Application-level deep-link routing can operate alongside Apple’s privacy-preserving attribution frameworks as a separate measurement and onboarding layer. For implementation-specific deep-link routing and attribution workflows, see the OpoInstall documentation.

Related Materials

  • Concepts: Multi-Window Attribution, Postback Data Tiers, Hierarchical Source Identifiers, Window Locking, Coarse Values

  • Technologies: Apple SKAdNetwork, Apple AdAttributionKit, StoreKit Framework, OpoInstall Mobile SDK

  • Standards: IETF RFC 8259 JSON Specification

  • APIs: StoreKit updatePostbackConversionValue API, SKAdNetwork install-validation postbacks

Official Documentation

Share this article