TikTok Ads attribution: the widest gap in paid social
TikTok's audience is overwhelmingly mobile, overwhelmingly iOS in high-value markets, and overwhelmingly in-app browser. Every one of those facts makes client-side attribution worse — which is why TikTok's reported numbers drift further from reality than anyone else's.
TikTok gap ≈ view-through credit + in-app browser storage loss + iOS signal loss
TikTok commonly over-reports by 35–60% against a server-side count. The extra driver nobody talks about: the TikTok in-app browser. Storage written there is short-lived and often does not carry over when the user later opens the same site in Safari — so the same human arrives as a brand-new anonymous visitor.
The Events API plus a durable server-set id is not optional on TikTok. It is the only way the channel measures at all.
ttclid
7-day click, 1-day view
28-day click
+45%
Where the gap comes from
Four mechanics, each independently defensible, that compound into a number you cannot reconcile against your bank.
In-app browser storage
Users click from inside the TikTok app. Cookies and localStorage written in that webview frequently do not follow the user to Safari when they return to buy.
What to do A server-set first-party cookie survives the webview better, and email identification bridges the rest.
View-through on a scroll feed
On a feed where users scroll past dozens of videos, a 1-day view-through window credits an enormous number of impressions.
What to do Report on click-only and treat view-through as a brand metric, not a performance one.
Very short consideration + very long tail
TikTok drives both instant impulse buys and 3-week 'I saw this a while ago' purchases. The latter are entirely outside a 7-day cookie.
What to do Durable ids plus email identification recover the tail.
Attribution to the wrong creative
With multiple creatives running, TikTok assigns the conversion to the last one the user saw, not the one that started the journey.
What to do A first-party journey shows first touch and last touch side by side; you decide which one you are paying for.
TikTok's Events API is essential here, not optional. Send purchases server-side with an order id as the dedup key, or you will be double counting against the pixel.
Frequently asked questions
Why is TikTok attribution worse than Meta's?
Traffic composition. TikTok clicks arrive from an in-app webview on mobile, where storage is short-lived and often not shared with the user's default browser. Add a 1-day view-through window on a fast-scrolling feed and the reported number drifts further from banked revenue than any other channel.
Does the TikTok Events API de-duplicate?
Yes, if you send a shared event_id on both the pixel event and the server event. Without it you will count the same purchase twice.
What window should I use for TikTok?
7-day click, no view, for performance decisions. Then check your first-party data for the longer tail — on considered purchases we routinely see TikTok-originated journeys converting 14–21 days later.
Is the ttclid enough to attribute?
Only if you capture it server-side on the landing request and store it against a durable visitor id. Captured in JavaScript and stored in a JS cookie, it is gone in 7 days on Safari.
Related guides
See the receipt for every conversion.
Flowsk Signals stitches the anonymous click to the email to the purchase — first-party, server-side, de-duplicated on a key you choose. One snippet, $29/mo, and a journey you can inspect event by event.
More free tools
Same deal — instant, no signup.