Skip to main content
GUIDE · SKADNETWORK 411 min read

SKAdNetwork 4 + TrackLayer: getting the most signal Apple allows

A field guide for turning Apple's privacy-constrained app attribution framework into something operational: a schema that captures the earliest useful monetization signals, keeps destination mappings coherent, and does not pretend SKAN is more precise than it really is.

Framework

What SKAdNetwork 4 actually measures

SKAdNetwork 4 is Apple's privacy-preserving install attribution layer for iOS app ads. It does not tell you which exact user clicked which exact ad and then purchased three days later. It reports campaign-level postbacks with tight constraints: delayed delivery, privacy thresholds, source identifiers, and a limited conversion signal that has to be designed in advance. In other words, SKAN is not an event stream. It is a compressed reporting mechanism.

The major change in SKAN 4 is not infinite new visibility. It is structured compromise. Apple now allows up to three postback windows and distinguishes between fine and coarse conversion values, which gives growth teams more room to encode funnel progression. But that extra room is conditional. Fine values are mostly useful in the earliest window and only when the install cohort clears Apple's privacy gates. Later windows are more aggregated and should be treated as directional evidence rather than forensic truth.

For TrackLayer users, the strategic question is simple: which small set of in-app behaviors best predicts durable value soon enough to fit inside Apple's reporting windows? If the answer is vague, the schema becomes decorative. If the answer is disciplined, SKAN can still train paid social bidding systems on meaningful app outcomes even when user-level measurement is unavailable.

Taxonomy

3 conversion value types

TypeValuesPostback windowHow to use it
Fine0–63Postback 0Highest-detail early signal for installs, onboarding, trial starts, purchases, and value tiers when privacy thresholds are met.
Coarselow / medium / highPostback 0 / 1 / 2Fallback summary when Apple withholds fine detail or later windows only qualify for coarse conversion value reporting.
Postback window0 / 1 / 20–2Three staged reporting windows that progressively trade detail for privacy, forcing teams to separate early intent from later monetization or retention clues.
Schema

Schema design

TrackLayer's canonical model is broader than what SKAN can carry, so the schema design job is compression rather than direct one-to-one mapping. A practical pattern is to map the 64 fine conversion values to the platform's 32 canonical high-signal events plus value states. Some events deserve their own dedicated fine value because they materially change bid quality. Others can share a slot and be distinguished internally in TrackLayer while rolling up to the same SKAN tier.

The most useful version of this schema usually looks like `event priority × value bucket`. For example, TrackLayer may keep core canonical events such as `install_verified`, `signup`, `tutorial_completed`, `trial_started`, `purchase_started`, `purchase_completed`, and `subscription_started`, then use the remaining values to express LTV or first-order revenue buckets. That makes value `18` more meaningful than an arbitrary micro-event because it can mean something like `purchase_completed + medium predicted_ltv`.

Rule 1

Reserve the lowest fine values for milestone events with the strongest optimization value: install_verified, account_created, paywall_viewed, trial_started, purchase_started, first_purchase, subscription_started.

Rule 2

Use the remaining fine slots to add revenue or quality buckets, for example first_purchase_$0–9, $10–24, $25–49, $50–99, $100+, or predicted LTV tiers aligned with TrackLayer's canonical value buckets.

Rule 3

Keep each fine value monotonic. SKAN schemas work best when a higher number means a stronger downstream economic outcome, even if the exact path was different.

Rule 4

Treat coarse values as safety rails: `low` for weak intent, `medium` for qualified activation, `high` for monetized or highly predictive behavior once the user is beyond basic onboarding.

Timing

Postback 0/1/2 timing

Apple's three postback windows force a hierarchy of measurement priorities. Postback 0 is the most important because it can carry fine-grain detail and typically lands from the earliest installation period up to roughly the first 24 hours. That is where you should encode onboarding completion, paywall exposure, trial creation, first purchase intent, and any other behavior that is predictive enough to help bidding quickly.

Postback 1 spans the next stretch, roughly 24 to 72 hours. By then, expecting exact monetization fidelity is unrealistic for many apps. This window is better used for coarse progression: retained session, activated account, second-session milestone, or high-value engagement that indicates the install was not hollow. If the product has longer conversion cycles, this window often becomes the bridge between early intent and later revenue probability.

Postback 2 covers the 72-hour-plus range and is best treated as late-stage directional signal. For subscription apps, this is where modeled LTV, renewal propensity, or monetized retention hints can sit in coarse form. The operational implication is that genuine long-window LTV reporting still belongs in TrackLayer and the warehouse. SKAN's late windows help media systems rank cohorts, but they are not a substitute for full customer economics.

Configurator

TrackLayer SKAN schema configurator

The dashboard at /settings/skan-config is where teams define how TrackLayer canonical app events map into SKAN fine and coarse values. In practice, this becomes the control plane for iOS measurement: assigning event priority, deciding which outcomes deserve dedicated fine slots, and selecting how lower-confidence or lower-value actions collapse into coarse buckets.

Map once, publish deliberately

The dashboard at /settings/skan-config lets operators define the TrackLayer event → SKAN value mapping without editing app code for every iteration. The practical recommendation is to avoid weekly schema churn. Publish a version, observe at least one buying cycle, then revise only when event volume or bid performance shows a clear mismatch.

Separate event meaning from ad-network labels

TrackLayer keeps the canonical event vocabulary stable even when Meta, TikTok, or Snap consume a more limited set of optimization events. That makes the SKAN configurator useful as a translation layer rather than a place to invent destination-specific taxonomies.

Version schemas with notes

Use explicit version names, rollout dates, and change notes. When CPA shifts two weeks later, you need to know whether the cause was creative, bidding, ATT mix, or a new SKAN schema that promoted the wrong behavior.

Hierarchy

Hierarchy setup

High-value events should win the fine-grain slots. That means the schema should not spend rare early detail on cosmetic actions such as opening a settings screen or viewing a generic content tab. Fine values should represent milestones that change acquisition economics: completing onboarding, entering payment, starting a trial, submitting a first order, or landing in a top predicted LTV cohort.

Coarse values then absorb the lower layers. `low` can stand for weak activation or bounce-like installs that only reached minimal onboarding. `medium` can represent qualified but non-monetized users, such as people who finished setup and revisited the app. `high` can stand for monetized or strongly predictive installs when fine detail is unavailable. The point is not elegance for its own sake. The point is making each fallback bucket useful to media bidding when Apple suppresses detail.

Privacy

iOS 17 + App Tracking Transparency implications

ATT did not disappear with iOS 17, and it still matters. SKAN is the default aggregate measurement lane for users who do not grant tracking permission. ATT opt-ins, however, still unlock richer destination-side measurement, user-level identifiers where policy allows, and more complete optimization workflows in networks that can use consented app data.

The practical takeaway is not to choose SKAN or ATT. You run both lanes together. TrackLayer should preserve canonical app events and values for all eligible installs, then route ATT-consented users into richer platform measurement while maintaining SKAN as the aggregate fallback layer for the rest. Teams that ignore ATT opt-ins end up leaving useful signal on the table even if their SKAN schema is well designed.

Destinations

Meta App Events + SKAN interaction

Meta App Events and SKAN are not mutually exclusive. You should run both. ATT-consented users can contribute richer app event signals through Meta's standard app measurement path, while non-consented users still contribute through SKAN postbacks. Meta then aggregates those lanes separately and reconciles them inside its reporting model rather than pretending they are one identical event source.

This is why teams often see different counts for the same campaign across Meta app events, SKAN dashboards, and TrackLayer's own canonical event logs. Those discrepancies are normal as long as the mapping logic is coherent. The important discipline is to keep event meaning aligned across both lanes so `trial_started` means the same business moment whether it was observed through an ATT user-level event or compressed into a SKAN conversion value.

Validation

Testing + debugging

Start with Apple's StoreKit Test environment to validate schema logic before arguing about campaign performance. StoreKit lets you simulate installs, postbacks, conversion updates, and window behavior in a controlled way, which is exactly what you need to confirm that a trial start maps to the right fine value or that a late retention event lands in the intended coarse bucket.

After that, verify destination behavior. In Meta Events Manager, confirm that ATT-measured app events arrive with the expected naming and values, then compare that with the SKAN reporting view rather than expecting exact row-level parity. The useful debugging flow is StoreKit Test for schema correctness → TrackLayer event logs for canonical truth → network dashboards for postback interpretation and optimization readiness.

Diagnostics

Troubleshooting

Fine conversion values rarely appear

This usually means privacy thresholds are not met or the schema is trying to encode too much detail for low-volume campaigns. Reduce fragmentation and concentrate early values around the highest-volume, highest-signal milestones.

Postback 1 and 2 look empty or unhelpful

Late windows often need simpler logic. Use coarse values for retention, subscription renewal hints, or high-value engagement instead of expecting precise later revenue detail from SKAN.

Campaigns optimize toward cheap installs but weak payers

The schema is likely overweighting install or onboarding completion. Promote stronger milestones such as paywall_viewed, trial_started, qualified_purchase_started, or first_purchase value tiers.

Meta totals do not match raw TrackLayer app events

They should not match exactly. Meta aggregates SKAN and ATT-measured users through different reporting paths with different delays, privacy filters, and attribution scopes.

StoreKit tests pass but production reporting is noisy

StoreKit validates logic, not real-world privacy thresholds or media mix. Keep using StoreKit for schema correctness, then calibrate expectations with live postback delays and campaign volume.

FAQ

Common questions

Does this support Apple Search Ads too?

Yes, but not in the same way. Apple Search Ads has its own attribution interfaces and deterministic install measurement inside Apple's ecosystem. TrackLayer can normalize ASA alongside SKAN reporting, but ASA is not dependent on the same delayed postback model.

Do Snap and TikTok have SKAN parity with Meta?

They all consume SKAN, but parity is not exact. Meta generally exposes the most mature workflow around SKAN reporting and optimization controls, while Snap and TikTok can support SKAN campaigns with different tooling depth, diagnostics, and aggregation behavior.

Can I bid directly on SKAN conversions?

Yes, but only on the conversions the network can actually observe from the postbacks it receives. That means bidding quality depends heavily on how well your schema compresses real business value into early and coarse SKAN signals.

Can SKAN be revenue-weighted?

Yes, indirectly. You cannot send unlimited revenue fields, but you can encode revenue or predicted LTV into fine value tiers and coarse value bands. The trick is to use ranges that matter to bidding rather than trying to reproduce exact finance reporting.

How does this fit cross-platform attribution for iOS and Android?

Treat iOS SKAN as one measurement lane and Android MMP or platform-native attribution as another. TrackLayer's job is to normalize canonical events and values across both so reporting, modeling, and destination delivery stay comparable even when attribution mechanics differ.

Next reads

Related implementation guides

We use essential cookies to keep the site secure and functional. Analytics and third-party tags run only with your consent. See our Cookie Policy.

We use essential cookies to keep the site secure and functional. Analytics and third-party tags run only with your consent. See our Cookie Policy.