Attribution & Measurement

Conversion Value

Also known asCVPostback ValueSKAN Conversion Value

A small integer (0-63 on SKAN 1-3, coarse/fine pairs on SKAN 4) that apps encode post-install user behavior into, returned by Apple in SKAdNetwork attribution postbacks.

Key takeaways

  1. 01CV is the single bit of post-install signal Apple exposes through SKAN — designed by you, returned by Apple.
  2. 02SKAN 1-3: 6-bit integer (values 0-63). SKAN 4: coarse (high/medium/low) + fine (6-bit) across three windows.
  3. 03Schema design is the most important UA configuration on iOS — permanently determines what behaviors you can measure.
  4. 04Too broad: lose signal. Too granular: aggregation-threshold suppression zeros out rare cohorts.

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:

  1. 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).
  2. 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.
  3. 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.

Quick answers

What is a SKAN conversion value?

A conversion value is a small integer (0-63 on SKAN 1-3, coarse + fine pairs on SKAN 4) that an app encodes post-install user behavior into. The app defines a schema mapping events to values, fires the appropriate value as users hit milestones, and Apple returns the value in the SKAN postback. CV is the single bit of post-install signal SKAN exposes — schema design determines what behaviors you can ever measure.

How should I design my SKAN conversion-value schema?

Three common patterns. (1) **Funnel encoding** — values represent funnel-stage progression (onboarding → trial → purchase → retention). Easy to read, one signal per user. (2) **Revenue-bucket encoding** — values encode revenue ranges. Best for monetization-focused optimization. (3) **Hybrid bit-encoding** — split 6 bits into stage + revenue segments. Maximizes info, harder to interpret. Most apps choose option 1 or 2 with 8-16 distinct values to balance granularity vs aggregation-threshold survival.

What is the difference between SKAN coarse and fine conversion values?

**Fine conversion value**: the standard 6-bit (0-63) value, returned only when the campaign clears Apple's privacy threshold (~25 conversions per CV per day per campaign on SKAN 4). **Coarse conversion value**: a 3-level (low / medium / high) value, returned even below the threshold. Coarse provides some signal where fine would be null. Map your fine values to coarse buckets thoughtfully — coarse is what you'll see for smaller campaigns.

Can I change my SKAN conversion-value schema?

Technically yes — MMPs let you reconfigure at any time. But changing breaks historical comparability for the affected campaigns: postbacks fired before the change carry the old schema's meaning, while later postbacks carry the new schema. Treat schema changes as quarterly or longer cadence decisions, document the change point, and reset benchmarks afterward.

Back to glossary