flowsk.com
TikTok attribution

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.

Quick answer

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.

Click id parameter

ttclid

Default window

7-day click, 1-day view

Maximum click window

28-day click

Typical over-report

+45%

Where the gap comes from

Four mechanics, each independently defensible, that compound into a number you cannot reconcile against your bank.

01

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.

02

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.

03

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.

04

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.

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.