TikTok ads attribution: pixel, Events API and why numbers differ
How TikTok credits conversions, why TikTok Ads Manager reports more sales than GA4 or your store, and how the pixel and Events API work together.
On this page
TikTok Ads Manager often reports more purchases than your store can find, and GA4 often reports fewer than either. All three can be counting honestly. They answer different questions: TikTok asks "did this person see or tap our ad before buying?", while GA4 asks "what was the last source before this visit?".
This guide explains how TikTok credits a conversion, why the numbers split, and how to send TikTok the sales it misses. The same logic applies to Meta; see Meta ads vs Shopify sales.
How TikTok credits a conversion
TikTok credits a conversion to an ad when the person interacted with the ad inside its attribution window. There are three kinds of interaction:
- Click-through: they tapped the ad.
- Engaged view-through: they watched at least 6 seconds of the ad, or all of a shorter one, and did not tap (TikTok).
- View-through: they saw the ad and did not tap (TikTok).
For web campaigns, the default ad group setting is a 7-day click and 1-day view window. Click windows can be 1, 7, 14 or 28 days, and view windows off, 1 or 7 days. The setting is fixed once the ad group is published (TikTok).
Why TikTok's numbers differ from GA4 and your store
1. View credit. A person who watched an ad yesterday and bought today through Google search is a TikTok conversion in TikTok, and a Google conversion in GA4. Both are reported; neither tool is wrong. See view-through conversions.
2. Different windows and models. GA4 credits the visit's source by its own model and ignores views on TikTok. TikTok counts its own touches within 7 days of a click. A purchase on day 6 can be TikTok's in TikTok and "direct" in GA4.
3. The in-app browser. TikTok opens links in its own browser. A buyer who taps in TikTok, leaves, and later buys in Safari is a different browser to your analytics. TikTok can still credit the ad if it matches the buyer another way, such as a hashed email sent with the purchase. Your site sees a new visitor.
4. Lost click ids and tags. If a redirect drops the ttclid and your UTM tags, the visit arrives as direct traffic, and only TikTok remembers the ad.
5. Missed conversions on TikTok's side. The pixel misses buyers with blockers, closed tabs and checkout pages it does not run on. This pushes TikTok's numbers down, the other way.
The pixel and the Events API
The TikTok pixel runs in the browser. It sees page views, adds to cart and purchases on pages where it loads.
The Events API sends events from your server. TikTok recommends running it alongside the pixel, to catch conversions the pixel misses through connection problems and browser differences (TikTok). This is the same idea as server-side tracking in general.
Deduplication: one purchase, counted once
When both send the same purchase, TikTok needs the same event_id from both, with the same event name. Events with the identical event and event_id that arrive after 5 minutes and within 48 hours of the first one are merged (TikTok).
Use the order id, written the same way in both places. 1042 from the browser and #1042 from the server are two purchases to TikTok.
Match keys
A server event needs something TikTok can tie to a person: the ttclid from the landing page, a hashed email or phone, your own customer id, and the buyer's IP address and browser. The ttclid is the strongest, because it names the click. Save it from the landing page address with the visit, and send it with the order.
Tag TikTok ads with UTM parameters
TikTok fills in macros in your URL parameters. Its own list includes __CAMPAIGN_NAME__, __AID_NAME__ for the ad group and __CID_NAME__ for the creative (TikTok). A template that puts them in your UTM parameters:
utm_source=tiktok&utm_medium=paid-social&utm_campaign=__CAMPAIGN_NAME__&utm_content=__CID_NAME__&utm_term=__AID_NAME__With that, every TikTok visit arrives with its campaign, ad group and creative in your own analytics, independent of TikTok's reporting.
A worked example
Example numbers, made up for illustration. A shop compares one week:
| Tool | Purchases credited to TikTok |
|---|---|
| TikTok Ads Manager (7-day click, 1-day view) | 64 |
| The shop's analytics, last touch | 29 |
| The shop's analytics, first touch | 41 |
Of TikTok's 64, TikTok's view-through column shows 17: a view and no click. Those can never appear in click-based analytics. The rest of the gap is buyers who tapped in TikTok and came back days later through another source. The fair reading: TikTok started more journeys than last touch shows, and fewer than TikTok claims. A holdout test is the only way to know how many sales TikTok caused; see incrementality.
Common questions
What is TikTok's default attribution window?
For web campaigns, 7 days after a click and 1 day after a view, set per ad group. It cannot be changed once the ad group is published.
Why does TikTok show more conversions than GA4?
TikTok counts conversions after a view or a 6-second watch, and within 7 days of a tap. GA4 credits the last source of the visit and never sees TikTok views.
Do I need the TikTok Events API if I have the pixel?
TikTok recommends both. The Events API catches conversions the pixel misses. Send the same event_id from both so each purchase counts once.
What is ttclid?
The click id TikTok adds to the landing page address when someone taps an ad. Sending it back with a conversion tells TikTok exactly which click it was.
Why are my TikTok conversions counted twice?
The pixel and the Events API sent the same purchase with different event ids or event names. Use the same order id as event_id in both.
Sources
- TikTok Ads Manager Help: Attribution settings at the ad group level, About engaged view-through attribution, Attribution Manager, About event deduplication, About Events API, About UTM parameters. Checked October 2026.
Spotted something wrong or out of date? Email hello@sporetag.com and we will fix it.