MVP Factory
ai startup development

SKAdNetwork 4.0 and the ROAS math that matters

KW
Krystian Wiewiór · · 5 min read

Meta description: A technical guide to SKAdNetwork 4.0 coarse conversion values, Advantage+ campaign structure, MMP attribution alignment, and the unit economics of profitable mobile UA.

Tags: mobile android ios productengineering architecture


TL;DR

SKAdNetwork 4.0 gives you three postback windows and a coarse/fine conversion value hierarchy — but most mobile teams misconfigure the mapping and blind themselves in windows 2 and 3. Pair proper LTV-tier bucketing with Advantage+ App Campaigns, anchor your MMP as source of truth, and build a payback period model before you scale. If your D7 ROAS doesn’t clear 40% of your target D365 ROAS, you are funding growth on borrowed time.


Most iOS UA teams are reading postbacks wrong

Misconfigured coarse value mappings are the single most common cause of MMP-to-Meta reporting discrepancies north of 20%. That gap is not a platform disagreement. It is a measurement architecture failure, and it compounds every time you scale spend on top of it.

The specific mistake: teams treat all three postback windows identically, then wonder why their MMP disagrees with Meta’s dashboard by the time window 3 closes.


SKAdNetwork 4.0 postback windows: the architecture

SKAdNetwork 4.0 introduced three distinct measurement windows:

WindowLookbackConversion Value TypeTypical Signal
1Day 0–2Fine (0–63) + CoarseEarly engagement, tutorial completion
2Day 3–7Coarse only (low/medium/high)First purchase, subscription trial
3Day 8–35Coarse only (low/medium/high)Repeat purchase, D30 LTV proxy

Fine-grained values (0–63) in window 1 are only returned when the campaign clears Apple’s crowd anonymity threshold. Below that threshold, you drop to coarse values. Plan for coarse values as your baseline, not your fallback.


Mapping coarse conversion values to LTV tiers

Coarse values are not arbitrary. They are LTV bucketing tools, if you configure them intentionally.

A production-ready mapping for a subscription app:

Window 1 (Fine Values — example mapping):
  0–15  → No meaningful event (install / session only)
  16–31 → Soft conversion (tutorial, onboarding complete)
  32–47 → Trial started or first content interaction
  48–63 → Paid conversion or strong engagement signal

Window 1/2/3 (Coarse Value Tiers):
  low    → LTV < $5 (30-day proxy)
  medium → LTV $5–$20
  high   → LTV > $20

Calibrate these thresholds against your actual cohort LTV data, not industry benchmarks. Run a 60-day cohort analysis, identify the natural breakpoints in your revenue distribution, and set bucket edges accordingly. Revisit every quarter — LTV curves shift with product changes.


Structuring Advantage+ App Campaigns against MMP attribution

One clarification worth making explicit: Advantage+ Shopping Campaigns (ASC) are an e-commerce product — they optimize for purchase events in retail and DTC contexts. For app install campaigns, the right product is Advantage+ App Campaigns, which are purpose-built for mobile UA and optimized against SKAdNetwork signals and app event conversions.

Advantage+ App Campaigns operate on Meta’s aggregated signal layer — they do not consume raw SKAdNetwork postbacks directly. Your MMP (Adjust, AppsFlyer, or equivalent) sits in between, normalizing postback data and feeding modeled conversions back to Meta via the Conversions API.

The practical implication: your MMP is your source of truth, not Meta’s dashboard.

A conflict-minimizing campaign structure:

Account Level
└── Advantage+ App Campaign (iOS — SKAd optimized)
    ├── Ad Set: Broad (no audience targeting — let Meta optimize)
    │   └── Creative A / B / C
    └── Ad Set: Retargeting (LAL from MMP cohort export)
        └── Creative D / E

Avoid fragmented campaign structures with overlapping audiences. Consolidation gives Meta’s algorithm more signal per campaign, which matters when SKAdNetwork postbacks are delayed by up to 35 days.


The ROAS math that justifies your UA budget

Most growth teams have a spreadsheet that looks rigorous but is structurally broken.

The framework that holds up in production:

MetricFormulaTarget (Example)
CPISpend ÷ InstallsBenchmark against category
D7 ROASD7 Revenue ÷ Spend≥40% of D365 ROAS target
Payback PeriodCAC ÷ (ARPU × Margin)<180 days for venture-backed
Blended CACTotal Spend ÷ Paid InstallsMust clear LTV:CAC ≥ 3:1

The D7/D365 ROAS ratio is your early warning system. A healthy subscription app sees D7 ROAS at roughly 35–45% of its eventual D365 ROAS. If you are scaling before this ratio is established from real cohort data, you are extrapolating on noise.


Before you press scale

  1. Audit your coarse value mapping. If your window 2 and 3 coarse tiers are not calibrated to real LTV cohort breakpoints, you are flying blind on your highest-value users.

  2. Designate your MMP as the single source of attribution truth and pipe it into Meta via Conversions API. Reconcile discrepancies weekly — a gap above 15% signals a configuration problem, not a platform disagreement.

  3. Build a payback period model first. D7 ROAS ÷ your historical D7/D365 ratio gives you a projected D365 ROAS on current cohorts. If that number does not clear your LTV:CAC target at current CPI, optimize creatives and conversion flow before increasing budget.


Share: Twitter LinkedIn