Back to blog
TikTok AdsSKAN 4.0iOSAttributionMobile UA

TikTok Ads and SKAN 4: Reading iOS ROAS Across Three Postback Windows

TikTok is the furthest along on SKAN 4 of the major networks. That gives you three postback windows, a postback-sequence breakdown, and a new set of ways to misread iOS ROAS. Here's how to read it correctly.

By Berk AydınSeptember 19, 20265 min read

Among the big ad networks, TikTok has moved furthest toward SKAdNetwork 4.0. That is good news — SKAN 4's three postback windows are the only way to see anything about iOS revenue past the first two days without user-level tracking. It also means TikTok's iOS reporting has more moving parts than Meta's or Google's, and more ways to draw the wrong conclusion from a partial picture.

What SKAN 4 gives TikTok that SKAN 3 didn't

SKAN 3 sent one postback, on a rolling 24-hour timer after install, and that was the end of the story. SKAN 4 replaced it with three fixed windows:

PostbackWindowWhat it can carry
1Days 0–2Fine or coarse conversion value, depending on crowd anonymity
2Days 3–7Coarse value only
3Days 8–35Coarse value only

TikTok Ads Manager exposes this as a postback sequence breakdown: you can split campaign performance by which postback the conversion arrived in. For a subscription app with a 7-day trial, that breakdown is the difference between "TikTok iOS shows no revenue" (you looked at postback 1) and "TikTok iOS converts on day 8–10" (you looked at postback 3).

Where it goes wrong

Automated rules default to the first window. When a SKAN 4 app campaign is toggled off for the first time without an attribution window selected, TikTok's automated rules default to the 0–2 day window. Any rule that pauses or scales on ROAS is, by default, evaluating your campaign on two days of data. For a trial-based app that is a rule that pauses everything.

Crowd anonymity strips the detail you wanted. Postbacks 2 and 3 only ever carry coarse values (low / medium / high). Postback 1 carries a fine value only if the campaign clears the anonymity threshold. A small campaign — a geo test, a creative test, a new keyword — receives less than the full picture at every window. The crowd anonymity mechanism is not a TikTok choice, but TikTok is where you will feel it first because TikTok is where SKAN 4 is actually on.

Postbacks are delayed and aggregated. Postback 3 arrives up to 35 days after install, plus Apple's randomized delay. The iOS ROAS you see for a cohort is not final for over a month, and it is never user-level. Any "TikTok iOS ROAS" figure under 35 days old is an interim reading.

Coarse values are your own schema. What "medium" means is what you configured it to mean when you set up the conversion value mapping. If the schema maps "medium" to a revenue bucket of $5–$20, the reported revenue is a bucket midpoint, not a purchase. Two accounts with the same real revenue and different schemas will report different ROAS.

Reading it correctly

  1. Judge by the window that matches your funnel. Trial app: postback 3. No-trial IAP: postback 1 and 2 together. Set automated rules to that window explicitly — never leave the default.
  2. Treat postback 1 as a leading indicator, not ROAS. Trial starts and early purchases predict later revenue; they are not it.
  3. Consolidate campaigns to clear crowd anonymity. Fewer, larger campaigns get fine values and full postbacks. This trades testing granularity for measurement granularity, and on iOS the trade is usually worth it.
  4. Don't compare SKAN ROAS across networks. TikTok on SKAN 4 and Meta on SKAN 3 report from different windows with different anonymity behavior. The comparison that works is realized cohort revenue from your subscription platform, by install date, at a fixed day — where TikTok-acquired users and Meta-acquired users are measured by the same ledger.

The reconciliation

The pattern is the same as for Meta and Google, with one TikTok-specific twist: the SKAN revenue is a bucketed estimate, so the gap between it and realized proceeds can run in either direction depending on your schema.

  • Spend by install date, from TikTok Ads Manager.
  • Realized proceeds by days since install, from your subscription platform, attributed to TikTok via your MMP.
  • Same day-count for every network.
  • Keep the SKAN postback breakdown as TikTok's own view, useful for in-platform decisions, and never as the cross-network scoreboard.
35 days

Latest day a SKAN 4 postback can report a conversion — iOS ROAS on TikTok isn't final before then

Apple SKAdNetwork 4 documentation

What to change on Monday

  • Open every SKAN 4 automated rule and set the attribution window explicitly.
  • Add the postback sequence breakdown to your TikTok iOS reports.
  • Review your conversion value schema: are the coarse buckets aligned to the revenue steps that actually matter?
  • Move the cross-network ROAS comparison off SKAN entirely, onto realized cohorts.
Key takeaway
  • SKAN 4 gives TikTok three postback windows (0–2, 3–7, 8–35 days) and a breakdown by postback in Ads Manager.
  • Automated rules default to the 0–2 day window if you don't set one — fatal for trial-based apps.
  • Postbacks 2 and 3 carry coarse values only; crowd anonymity limits small campaigns at every window.
  • iOS ROAS on TikTok isn't final until day 35+; treat anything earlier as interim.
  • Compare networks on realized cohort revenue, not on SKAN postbacks from different versions.

Roasy shows TikTok's spend against realized RevenueCat cohorts at the same day-count as every other network, so the SKAN version a network happens to run stops deciding how good it looks. Next in the series: AppLovin's D7 ROAS campaigns.

Berk Aydın

Performance Marketing Lead at Roasy. Writes about ROAS, retention, and the messy economics of mobile UA.

Keep reading

All posts →