Conversion values are how SKAdNetwork compensates for its lack of user-level attribution. The app defines a schema mapping post-install events to integer values (0-63 on SKAN 1-3; coarse + fine pairs on SKAN 4), fires the appropriate value as users hit defined milestones, and Apple aggregates these values across users before returning them in the postback. The result: advertisers see install volume + a single aggregated signal per campaign, with no user-level breakdown.
SKAN versions
- SKAN 1-3: single postback per install, single 6-bit conversion value (0-63). The app fires conversion values during a 24-48 hour activity window post-install; the highest fired value is the one Apple returns.
- SKAN 4 (current default): three postback windows (0-2d, 3-7d, 8-35d). Each window can return a different conversion value. New "coarse" value (low / medium / high) returned alongside the fine value when the privacy threshold is met. Coarse values are returned even below threshold, providing some signal where fine values would be suppressed.
Schema design is the most consequential UA configuration on iOS. You're choosing what behaviors you can ever measure for that campaign — once set, switching schemas mid-campaign breaks historical comparability. Two common encoding patterns:
- Funnel encoding: values represent funnel-stage progression. CV 0 = no signal, 1-15 = onboarding completed, 16-31 = trial started, 32-47 = first purchase, 48-63 = retention milestone. Easy to read, but gives only one signal per user (the highest-reached stage).
- Revenue-bucket encoding: values encode revenue buckets. CV 0 = $0, 1-9 = $0.01-1, 10-19 = $1-5, 20-29 = $5-15, ... Best for monetization-focused optimization; loses funnel signal.
- Hybrid bit-encoding: split 6 bits into segments (e.g., 2 bits for funnel stage + 4 bits for revenue bucket). Maximizes info, harder to interpret.
Aggregation-threshold suppression: Apple suppresses postbacks for campaigns / conversion-value combinations below a privacy threshold (typically ~25 conversions per CV per day per campaign on SKAN 4). If your schema is too granular (e.g., 64 distinct CVs for narrow funnel states), most CVs won't get enough conversions to clear the threshold, and Apple returns "null" for those — you lose the signal entirely. Mature schemas use 8-16 distinct conversion values to balance granularity vs threshold survival.
Working with MMPs on CV design: every major MMP (AppsFlyer, Adjust, Singular, Branch) provides templates and a builder UI for CV schemas, plus the SDK plumbing to fire values. Use their tooling rather than rolling your own; the schema is part of the MMP contract and they support optimizing it over time. Reconfiguring the schema is supported but breaks historical comparability for the affected campaigns — treat it as a permanent decision in any given quarter.