iOS tracking after ATT and SKAdNetwork
Apple changed the rules for tracking on iOS in 2021. Most marketers still don't understand what actually broke and how to live with it. Here it is in plain language, with diagrams.
What changed
Before 2021, every iPhone had a unique identifier called IDFA. Ad networks saw it in every request and could connect "saw an ad → installed → made a purchase" at the user level. In April 2021 Apple introduced App Tracking Transparency (ATT): apps now have to explicitly ask permission. Most users say no.
The famous prompt
Here is how the ATT prompt looks. Apple forbids changing the wording or hiding buttons. Adjust and Branch report industry-wide opt-in around 25–35%. Fintech is usually lower (18–25%), gaming is higher (40%+).
What you had vs what you have now
- Level: individual user
- Speed: real-time
- Coverage: ~100% of iOS devices
- Attribution: exact ad → click → install → conversion chain
- Optimization: ML algorithms can learn from every user
- Level: aggregated (cohort)
- Speed: 0–35 day delay
- Coverage: only above Apple's privacy threshold
- Attribution: postback with coarse parameters
- Optimization: ML learns from aggregates, slower
What SKAdNetwork actually is
SKAdNetwork (or SKAN) is Apple's API that replaces IDFA-based tracking. The principle: ad network and app don't talk to each other. When an install happens and the user does a target action, Apple itself sends a "postback" to the ad network with a very limited data payload, on a delay.
SKAN 4.0 (since 2023) added three postback windows instead of one. That gives more detail, but it's still nowhere near IDFA-level precision.
Conversion values: telling a story in 6 bits
Apple lets you ship only 6 bits of data in a postback (64 possible values). You decide what those values mean. Common approaches: revenue buckets ($0–5, $5–20, $20+), funnel step (saw onboarding / completed onboarding / purchased), or a combination.
If you map values poorly there is no quick fix. Conversion value config lives in your MMP (AppsFlyer, Adjust) or in the Xcode project. Change rarely and on purpose.
What to actually do as a marketer
1. Wire up Meta CAPI for Apps
Sending events server-side from your backend straight to Meta recovers some of the lost signal. Especially critical for fintech where the conversion (loan approval, account opened) happens days after install and SKAN won't catch it.
2. Configure conversion values by revenue bucket
The most universal mapping: bucket 1 = low value, bucket 2 = mid, bucket 3 = high. This lets the ad network ML find high-value users even without user-level data.
3. Accept the 0–35-day delay as normal
You will never see iOS campaign performance in real time. Don't panic if CPA looks terrible the first two days after launch — the final number lands two weeks later. Android (where the GAID still works) is faster.
4. Don't trust the Meta dashboard blindly
A 30–50% discrepancy between Meta's reported iOS conversions and your own data is normal after ATT. Cross-check against your MMP (AppsFlyer/Adjust) and your own backend — that's the source of truth.
5. Pre-prompt your ATT request
Show your own pre-prompt before the system one: "We would like to show you relevant ads — please tap Allow on the next screen." That typically adds 10–15 points to the 25–35% baseline. Apple allows it.
KZ context
iOS share in KZ is around 25–30% (higher among fintech audiences and premium-tier consumers). If you run fintech or premium e-commerce, the iOS signal loss hits harder than industry average. The fix is the same: CAPI for Apps + thoughtful conversion value mapping + patience with the delay.
FAQ
What is a normal ATT opt-in rate?
Adjust and Branch report industry-wide opt-in around 25–35%. Fintech is usually lower at 18–25%; gaming is higher at 40%+. A pre-prompt shown before the system dialog typically adds 10–15 points on top of that, and Apple allows it.
Why does my iOS campaign data arrive so late?
SKAdNetwork postbacks are delayed by 0 to 35 days by design, so iOS campaign performance is never visible in real time. Do not react to the first two days after launch — the final number lands about two weeks later.
Meta reports different iOS conversions than my backend. Is that a bug?
No. A 30–50% discrepancy between Meta's reported iOS conversions and your own data is normal after ATT. Cross-check against your MMP (AppsFlyer, Adjust) and your own backend and treat those as the source of truth.
How much does this matter in Kazakhstan?
iOS share in KZ is around 25–30%, and higher among fintech audiences and premium-tier consumers. If you run fintech or premium e-commerce, the iOS signal loss hits harder than the industry average.
Knowing how SKAN works doesn't make the numbers agree
Conversion values, CAPI for Apps and a 35-day delay are the theory. In practice three sources disagree by 30–50% — the MMP, the ad platform, and your own backend — and someone still has to decide which one the budget follows, then build a value model the campaign can actually optimise against.
Field notes: A SuperApp cannot be grown on KYC alone: Firebase events, a value model, and tROAS for product growth
Start with a two-week audit