Paid UA can still measure iOS installs after App Tracking Transparency (ATT), but only in aggregate and days late. ATT removes the advertising identifier (IDFA) for users who decline tracking, and it does not remove attribution. SKAdNetwork (SKAN) 4 and AdAttributionKit still attribute installs without consent, as signed postbacks with no user ID. Apple sends a fine conversion value in the first postback only, and only when enough people installed alongside. The last postback can arrive about 41 days after first launch.
Take a campaign that wins 1,000 iOS installs a week. 100 of those users start a trial on day 0, and 40 pay on day 7. The user counts and the days they act on in this example are illustrations. The windows and delays are Apple’s, set out in the table below. SKAN can describe the 100 trial starts as a fine value, in a postback that arrives a day or two after the first window closes. The 40 payments reach the ad network, if they reach it at all, as a coarse low, medium or high, up to six days after their window closes, and only when enough people installed alongside them. That gap is built in, and on a dashboard it looks like a bug.
When a client tells me iOS attribution looks broken, I first check whether blended iOS installs and billing revenue held while the attributed numbers fell. If they held, demand did not change and the measurement did. This article covers what to check next, and what Apple, Meta, Google and TikTok document about what you can still know on iOS. I had each page checked on 10 October 2026. Apple’s help pages show no date of their own, so that date is the only one.
What changed after ATT?
App Tracking Transparency (ATT) governs one thing, permission to track, and with it access to the advertising identifier. Apple’s announcement says that from the public release of iOS 14.5, the identifier reads as all zeros without permission and apps may not track the user. It does not switch attribution off. Apple’s Ad Attribution page says AdAttributionKit needs no ATT prompt, though an app that tracks for other reasons still needs one.
So iOS measurement split into two paths. Users who allow tracking can be attributed deterministically. For everyone else, attribution is aggregated, delayed and tiered by design. Platform dashboards blend both with their own modeling, which is why no single number is ground truth.
How many users consent is an input, not a constant. Adjust puts the industry average opt in rate at 35% in Q2 2025, counted among users who were shown the prompt, from its own data with no sample size given. In one working paper, the share of trackable US Apple traffic fell from 73% to 18% after ATT, measured over billions of ad impressions. That paper has not appeared in a journal, and its data came from a demand side platform whose CEO is a coauthor. Treat both figures as the order of magnitude and not as your rate.
Are ATT, SKAdNetwork and AdAttributionKit the same thing?
No. They answer different questions.
| Term | What it is | Needs ATT consent | Level |
|---|---|---|---|
| ATT | Permission to track and to read the advertising identifier | It is the consent | The identifier is user level, with permission only |
| SKAdNetwork 4, or SKAN 4 (iOS 16.1 and later) | Apple’s aggregated install attribution | No | Signed postbacks with no user or device ID |
| AdAttributionKit (iOS 17.4 and later) | SKAdNetwork’s successor, same model | No | Same as SKAdNetwork |
Meta’s Aggregated Event Measurement (AEM), Google’s modeled conversions and TikTok’s modeled SKAN conversions are aggregated or statistical estimates. Do not read them as user level attribution of people who declined tracking. Your own billing data in RevenueCat is user level for you, but joining it to a specific ad impression for a non consented user is exactly what ATT restricts.
What does SKAN 4 report, and what does it leave out?
A winning install can produce up to three postbacks. Apple’s documentation sets the windows and the random delays, and Adjust’s explainer repeats them.
| Postback | Window after first launch | Random delay after the window | Conversion value |
|---|---|---|---|
| 1 | Days 0 to 2 | 24 to 48 hours | Fine (0 to 63) when the crowd is large enough, otherwise coarse or none |
| 2 | Days 3 to 7 | 24 to 144 hours | Coarse (low, medium, high) at most |
| 3 | Days 8 to 35 | 24 to 144 hours | Coarse at most |
So the first postback arrives about three to four days after launch, and the last can arrive up to six days after day 35, which is about 41 days in total. Locking a window ends it early, but the postback still waits for the random delay. Apple’s WWDC22 session puts the rule in one line, “Only the first postback will get the fine conversion value.” Later postbacks go to the winning network and to you.
What a postback contains depends on the crowd anonymity tier Apple assigns to that install. Apple’s page gives the tiers.
| Tier | Postback 1 | Postbacks 2 and 3 |
|---|---|---|
| 0 | 2 digit source identifier only | Not sent |
| 1 | 2 digit source identifier and a coarse value | 2 digit source identifier and a coarse value |
| 2 | 2 to 4 digit source identifier and a fine value | 2 digit source identifier and a coarse value |
| 3 | As tier 2, plus the source app ID (or source domain for web ads) | As tier 2 |
Apple checks the tier per download in real time, and the pages checked do not publish the numeric thresholds. The practical effect is that you can lose the fine value without anything breaking. Split the same installs across more campaigns and source identifiers, and each crowd shrinks. SKAN also does not measure organic installs, as AppsFlyer’s guide notes.
What does AdAttributionKit change?
AdAttributionKit keeps SKAN 4’s model and adds re-engagement, per network attribution windows, cooldowns and a country code in postbacks. The three windows, the fine and coarse values, the tiers and the signed postbacks carry over, as do the default windows of 30 days after a click and 24 hours after a view. The ad most recently tapped wins, and if none was tapped, the ad most recently viewed does.
What is new arrived in steps:
- iOS 17.4. Install attribution, as the WWDC25 session recaps.
- iOS 18. Re-engagement, from clicks only. WWDC24 says view through re-engagement is not supported, and the impression has to opt in. Apple says limits exist per app per month and per device per year but gives no numbers, so do not plan around a cap.
- iOS 18.4. Overlapping re-engagement conversions with conversion tags, and development postbacks you can test with.
- iOS 26. Attribution windows you can set per ad network and interaction type, attribution cooldowns, and a country code in postbacks that sits behind a bonus crowd anonymity tier. These are in Apple’s iOS 26 release notes. The WWDC25 session introduced them, so some summaries tie them to 18.4.
The two frameworks run side by side. Apple’s interoperability article says impressions from both are sorted together and only one wins a conversion, with click throughs ranked before view throughs and then by time. The ad network IDs for both are compatible, and SKAdNetwork conversion value calls are mirrored into AdAttributionKit. If your app integrates both, call both. The WWDC25 session closes by saying that if you use SKAdNetwork, now is a good time to migrate.
Your ad platforms matter more than the framework version here. Google says it does not currently support AdAttributionKit for attribution, and the Meta and TikTok pages checked do not document it at all.
What can Meta, Google and TikTok still measure on iOS?
Meta, Google and TikTok each combine Apple’s postbacks with their own modeling, and each documents its own limits, such as delays, attribution windows, campaign counts and install volumes. This is platform guidance as of 10 October 2026, not Apple rules.
| Platform | What it reports | Limits it documents |
|---|---|---|
| Meta | SKAN based results for app promotion campaigns that use SKAN reporting | Results count when they reach Meta, with SKAN delays of at least 24 hours and no 1, 7 or 28 day windows. Its AEM page covers app promotion campaigns too |
| Three views: modeled conversions (delayed up to 5 days), integrated conversion measurement (ICM) in your mobile measurement partner (MMP), and SKAdNetwork with 64 possible values | ICM data is not in Google Ads reporting today. Conversion modeling uses fine values only. Google’s guide says to run 8 or fewer iOS install campaigns, and its schema page says to aim for around 50 installs a day and to set up the schema in one place | |
| TikTok | Dedicated iOS 14 or later campaigns report on SKAN data only, with modeled conversions at ad group level | Up to 15 campaigns with 5 ad groups each per app, SKAN 4 postbacks about 4 days late, more than 90 installs a day for the privacy threshold, and a “SKAN privacy withheld” metric for null values. No breakdowns by geo, gender, OS or age |
Google’s May 2026 announcement lists on device conversion data in Google Ads reporting as new for 2026. Google’s own measurement page still said on 10 October that ICM data is not in Google Ads reporting, so treat the on device item as announced, not confirmed. My posts on why Google Ads, the MMP and SKAN disagree and on setting up ICM and on device measurement cover Google in more depth, and why trial and purchase events are ineligible for Meta AEM covers Meta’s eligibility rules.
What does an MMP still do?
Apple sends signed postbacks to the ad networks, with an optional copy to the developer. An MMP does the rest:
- Consented attribution. It attributes users who allow tracking deterministically and keeps that apart from SKAN and AdAttributionKit reporting.
- Decoding. AppsFlyer’s SDK writes the conversion value from a schema built in its Conversion Studio, and AppsFlyer says only one SDK should write conversion values.
- Postback copies. Add the copy endpoints for both frameworks to your Info.plist. The networks’ own postbacks are still needed, because they carry the campaign name, and AppsFlyer’s developer docs name both keys.
- Windows. Adjust recommends the same attribution windows across platforms and networks to avoid discrepancies.
One change to watch is Apple Ads. AppsFlyer’s bulletin says that from iOS 26.2 Apple Ads postbacks are signed and sent with AdAttributionKit instead of SKAdNetwork. Apple’s Apple Ads page says only that integration with the AdAttributionKit API comes at a later date, and no Apple release note mentions it, so treat this as a vendor statement for now.
What can the Conversions API and server events fix?
They improve completeness and value. RevenueCat’s Meta Ads documentation says the Conversions API can send trial conversions and renewals even when the app is not open. Meta deduplicates on the event ID and event name, and keeps only the first install over a 90 day window.
They do not restore what ATT removed:
- Attribution for users who declined tracking. Meta requires
advertiser_tracking_enabled, which records the ATT answer, on every app event. RevenueCat has a separate setting for sending events to Meta when consent is not authorized. - Conversion values. A RevenueCat support engineer answers in its community that a server cannot update the values directly, because the update happens on the device. Can SKAN measure a subscription payment after the free trial ends? walks through that case.
- Clean revenue. Sending purchases from both the app and the server can double count them. RevenueCat tells you to remove client side purchase tracking from the Meta SDK when the Conversions API carries revenue.
Meta no longer recommends its older App Events API for new integrations, and TikTok’s Events API accepts app events only for allowlisted accounts.
What should the measurement stack look like for a subscription app on iOS?
For a subscription app, the trial start usually happens in the first session, so it can carry a fine value in window 1. In the example above that is the 100 users. The payment on day 7 can only arrive as a coarse value in window 2 or 3, and only when the crowd is large enough. Since the thresholds are undisclosed, you cannot calculate in advance whether it will arrive. You can watch the null, withheld and coarse only shares of your installs.
What can a mobile game still measure on iOS after ATT?
A mobile game can still encode revenue buckets in the fine value of the first postback and a coarse payer state in the later ones, though the signal is thin because revenue is sparse and heavy tailed. The fine value in window 1 can also combine engagement with revenue, and windows 2 and 3 can carry three coarse states such as payer, retained and big spender. Re-engagement through AdAttributionKit, from clicks only, is the part that suits live ops games that run campaigns to win players back. On Horse Racing Solitaire, SKAN and AEM went in before spend went up, so iOS conversions carried value instead of counts. Mobile game user acquisition covers the wider game setup, SKAN and attribution included.
Which three numbers should you compare side by side?
For a subscription app or a game, I read three numbers side by side and look at the gaps between them. They are the platform’s report, the MMP’s decoded SKAN or AdAttributionKit numbers, and billing cohorts from RevenueCat or the store. A stable gap is a calibration factor, and a gap that moves on a specific date points to a change made around that date, such as a setting, a schema edit or an SDK release. Which number do you trust covers how to match them up, and how much of your iOS organic is actually paid Meta traffic covers the part SKAN cannot see.
Which claims about iOS measurement are wrong?
| Claim | Verdict | Why |
|---|---|---|
| SKAN or AdAttributionKit replaces an MMP | Partly false | Apple supplies signed postbacks. Decoding schemas, comparing networks, cost data, consented attribution and deep links stay with the MMP |
| The Conversions API fixes ATT | False | It adds completeness and value. Meta requires the ATT status on each app event, and conversion values are written on the device |
| All iOS is unattributed | False | SKAN and AdAttributionKit attribute installs without consent, and users who allow tracking can be attributed deterministically |
| Platform ROAS is the truth | False | Google lists three methods with different delays and windows, TikTok warns about MMP discrepancies, and Meta counts SKAN results when they reach Meta |
| SKAN 5 is coming | Superseded | Apple’s SKAdNetwork page tells developers to use AdAttributionKit for app ad campaigns |
| AdAttributionKit supports view through re-engagement | False | Re-engagement is click only |
| Locking a window sends the postback at once | False | The random delay still applies |
| You need ATT consent to use SKAN or AdAttributionKit | False | Apple says AdAttributionKit needs no prompt, and SKAdNetwork works the same way. An app that tracks for other reasons still needs one |
What can and cannot be known about an iOS install after ATT?
For installs from users who declined tracking, you can know the winning network, a source identifier and, when the crowd is large enough, one fine value or a coarse bucket. You cannot know the user, the path or the exact install time.
| Question | What can be known | What cannot be known |
|---|---|---|
| Which ad drove an install by a user who declined tracking? | The winning network, a source identifier and, at tier 3, the publisher app | The user or device, the path, or the losing touches |
| What did that user do in days 0 to 2? | One fine value (0 to 63) at tiers 2 and 3, otherwise coarse or nothing | Event sequences, or revenue finer than your schema |
| Did the trial convert to paid on day 7? | A coarse bucket in postback 2 or 3, if the crowd is large enough and the app wrote it | Fine detail, or a user level link to the ad |
| When did the install happen? | Roughly, from the postback window plus a random delay | The exact timestamp |
| Which country did the install come from? | The storefront country in AdAttributionKit, at the bonus tier | Country for small crowds, or anything finer |
| What did the spend cause? | Estimates from tests and models | A ground truth from any single attribution report |
What changed in iOS measurement between 2021 and 2026?
| When | What changed | Source |
|---|---|---|
| April 2021 | ATT enforced from iOS 14.5 | Apple Developer News |
| 24 October 2022 | SKAdNetwork 4.0 in iOS 16.1: three postbacks, coarse values, hierarchical source IDs, web ads | Apple Developer News |
| iOS 17.4 to iOS 26 | AdAttributionKit launches, then adds re-engagement, overlapping conversions, per network windows, cooldowns and the country code | WWDC24, WWDC25 and the iOS 26 release notes above |
| 8 June 2026 | WWDC26 has no AdAttributionKit or SKAdNetwork session, and Apple’s AdAttributionKit updates page lists nothing after June 2025. Adjust reads it as no significant updates | Apple and Adjust |
| 16 September 2026 | From iOS 27.2, an alternative ATT prompt in the EU. Only the alternative prompt is available for apps distributed in Germany, France, Italy, Poland and Romania. The rules for when you must ask are unchanged | Apple Developer News |
What should you check when iOS looks broken?
- Blended against attributed. I start here. Did blended iOS installs in App Store Connect and revenue in RevenueCat hold while the attributed numbers fell? If they did, the problem is measurement, not demand.
- Delay. Compare like with like, SKAN installs against SKAN installs and AdAttributionKit installs against AdAttributionKit installs, by the date the postback arrived as well as the install date. A drop in the last 3 to 6 days is often latency, and TikTok and Google document delays of about 4 and up to 5 days.
- Implementation. Every ad network ID is in Info.plist, exactly one SDK writes conversion values, the update call runs on first launch, and the postback copy endpoints cover both frameworks. Test with AdAttributionKit’s development postbacks.
- Consent rate. A change in where the ATT prompt appears shifts the split between deterministic and SKAN only reporting without changing real performance.
- Eligibility. SKAN 4 needs iOS 16.1 or later, AdAttributionKit iOS 17.4, and re-engagement iOS 18. The network has to sign ads with version 4 or AdAttributionKit.
- Crowd size. Look at the null, withheld and coarse only shares, and consolidate campaigns toward the platform limits above. Fewer campaigns and fewer distinct source identifiers mean bigger crowds and higher tiers.
- Event mapping and schema. The schema events exist as optimization events in each platform, fine values sit in window 1, and coarse mappings exist for all three postbacks, which TikTok tells you to confirm. Google uses fine values only. Check that no lock ends a window before later revenue is written and that client and server revenue are not both sent.
- Attribution windows. AdAttributionKit’s per network windows and the
ignoreInteractionTypekey can silently drop a network’s views, and cooldowns can suppress re-engagement. Align the MMP and platform windows, and log every change. - MMP and platform diagnostics. The SKAN measurement setting is on for each partner, the schema is shared with the networks, and the platform’s own views agree. Meta has Events Manager and its Test Events tool, Google has its SKAdNetwork report, and TikTok has the “SKAN privacy withheld” metric.
If your blended numbers held, work down the list in order from step 2. Why is my app CPI rising or ROAS stalling? covers the cases where something else moved.
If you cannot tell which of these gaps is normal on your account, the growth audit is where I check it, and you can book it on its own at any spend level. Fixing the event design, the conversion value schema and the reconciliation is signal engineering.
Sources and scope
I had each page checked on 10 October 2026, including the Apple documentation pages that need a browser to render. Platform limits change often, so check the date before you quote a number. The worked example is arithmetic on labeled assumptions, not an account. The Horse Racing Solitaire line comes from the published case study and the mobile game user acquisition page. The statistics on consent rates come from one vendor and a working paper, as noted where they appear.
- Apple, Ad Attribution and Receiving postbacks in multiple conversion windows, StoreKit and App Store documentation
- Apple, SKAdNetwork, SKAdNetwork 4 release notes, AdAttributionKit and SKAdNetwork interoperability and Receiving ad attributions and postbacks
- Apple, AdAttributionKit updates and iOS and iPadOS 26 release notes
- Apple, WWDC videos What’s new with SKAdNetwork (2022), Meet AdAttributionKit (2024) and What’s new in AdAttributionKit (2025)
- Apple Developer News, Get ready for AppTrackingTransparency (5 April 2021), SKAdNetwork 4.0 now available (24 October 2022) and Updates to App Tracking Transparency in the European Union (16 September 2026)
- Apple, App ad attribution overview, Apple Ads Help
- Meta, About Meta Ads Manager reporting for Apple’s SKAdNetwork and About Meta’s Aggregated Event Measurement, Meta Business Help Center, read in a browser because Meta blocks automated retrieval
- Meta, Conversions API for app events (updated 25 August 2025) and App Events API (updated 22 December 2025), Meta for Developers
- Google, Understanding iOS app campaign measurement and reporting, Best practices guide for iOS App campaigns (updated 19 August 2026) and Set up your SKAdNetwork conversion value schema, Google Ads Help
- Google, iOS app campaign advancements, announcement of 13 May 2026
- TikTok, Bidding and optimization considerations for iOS 14 and later and Performance and reporting considerations for dedicated campaigns, updated August 2026, TikTok Business Help Center
- TikTok, Transition to SKAN 4.0, updated April 2025, and the Events API app events reference, TikTok for Business
- Adjust, How SKAdNetwork 4 works, Choose attribution settings for your app, ATT opt in rates 2025 (15 July 2025, vendor data) and WWDC26 (9 June 2026, vendor reading)
- AppsFlyer, SKAdNetwork solution guide, Send SKAN and AdAttributionKit postback copies, Integrate SDK and the Apple Ads bulletin
- RevenueCat, Meta Ads integration and a community answer from its support team
- Kraft, Skiera and Koschella, Economic Impact of Opt-in versus Opt-out Requirements for Personal Data Usage, working paper, 2023, funded by the European Research Council, not published in a journal
Questions people ask
Is iOS attribution broken after ATT?
No, it is aggregated and late. ATT controls permission to track and the advertising identifier. SKAdNetwork and AdAttributionKit still attribute installs without consent, as signed postbacks with no user identifier. A fine conversion value comes only in the first postback and only when enough people installed alongside. A drop in the last few days is often postback delay, so compare blended installs and billing revenue first.
What is the difference between ATT, SKAdNetwork and AdAttributionKit?
ATT is the permission to track and to read the advertising identifier. SKAdNetwork 4 and AdAttributionKit are Apple's attribution frameworks that work without that permission, and both send aggregated, signed postbacks with no user ID. AdAttributionKit, from iOS 17.4, is the successor. It keeps the tiers and fine and coarse values, adds re-engagement, and competes with SKAdNetwork impressions in one attribution decision.
Does the Conversions API fix attribution after ATT?
No. It improves event completeness, revenue values and deduplication, including trial conversions and renewals that happen while the app is closed. Meta still requires the ATT status on every app event, so it does not recover users who denied tracking. A server also cannot write SKAN or AdAttributionKit conversion values, which the app has to update on the device.
Do I still need an MMP if I use SKAdNetwork or AdAttributionKit?
Yes. Apple sends signed postbacks to the ad networks, with an optional copy to you. Decoding your conversion value schema, comparing networks, ingesting cost, attributing consented users and handling deep links are the MMP's job. Add the postback copy endpoints for both frameworks to your Info.plist, and let only one SDK write conversion values.
What should I check first when iOS conversions drop?
Check whether blended iOS installs in App Store Connect and revenue in RevenueCat held while the attributed numbers fell. If they held, demand did not change and the measurement did. Then rule out postback delay (the last SKAN postback can arrive about 41 days after first launch), implementation, consent rate, crowd size, event mapping and attribution windows.