TikTok is now a real acquisition channel for DTC — which means the same tracking problems you fought on Meta show up again on TikTok. The TikTok Pixel alone under-reports (ad blockers, browser limits, iOS), and the fix is the same shape as Meta’s CAPI: add the server-side Events API and deduplicate.
Pixel + Events API — why both
TikTok is explicit: for web, run the Events API alongside the Pixel. Its reasoning — “connectivity issues and browser inconsistency can impact conversions reported via Pixel; with Events API, more conversions are reported.” The Events API is a server-side connection spanning web, app and offline.
So the model mirrors Meta: browser Pixel + server Events API, deduplicated. Run them together, not one instead of the other.
Deduplication — the part that breaks
If you send an event from both the Pixel and the Events API without deduplication, TikTok can’t tell they’re the same sale. The rules:
- Send the same
event_idand the same event name on both sides. - TikTok deduplicates overlapping events that arrive after 5 minutes and within a 48-hour window, keeping the first event received.
- The usual failure: mismatched
event_id(or each side generating its own) → no dedup → double-counting.
Generate one event_id per event and reuse it on both the Pixel and the Events API — exactly like Meta’s event_id dedup.
Match quality: pass rich, hashed data
TikTok matches events to users with match keys — hashed email, phone, name and location. The more (privacy-safe, hashed) match keys you send, the better the match rate and measurement — TikTok’s equivalent of Meta’s Event Match Quality. (TikTok references match keys/match rate but doesn’t publish a single numeric EMQ scale.)
Setting it up on Shopify
1. Native TikTok sales channel (baseline, no code). The channel installs the TikTok Pixel with no theme edits, offers full-funnel events, and can send Advanced Matching — privacy-safe hashed customer info (email, phone, name, location).
2. Server-side Events API (full control). For a robust server-side connection, route TikTok through a server-side GTM container (e.g. Stape or TAGGRS), where you control the event_id and the data sent.
Verify what’s actually being sent. Whether the native channel sends the server-side Events API automatically — and under which data-sharing setting — is easy to get wrong and the option names differ across guides. Check your channel’s data-sharing settings directly rather than assuming.
3. Post-checkout.liquid: tracking now runs through Shopify’s Customer Events / Web Pixels sandbox after the checkout-extensibility migration — old script-tag pixels don’t fire there. Make sure your TikTok setup uses the supported path.
Verify it (don’t trust a green checkmark)
- TikTok Events Manager → run a test order: does the purchase arrive from both the Pixel and the Events API, and collapse into one via a matching
event_id? - If you see only browser events, the server (Events API) leg isn’t landing — check the connection and the
event_idmatch. - Reconcile TikTok-reported purchases against Shopify to sanity-check volume.
Quick reference
| Symptom | Likely cause | Fix |
|---|---|---|
| Only browser events | Events API not connected/matching | Connect Events API; share event_id |
| Double-counted purchases | Mismatched/ missing event_id | One event_id, reused on both sides |
| Low match rate | Few match keys | Send hashed email/phone/name/location |
| Nothing on checkout | Old script pixel post-migration | Use Customer Events / channel / sGTM |
Running TikTok, Meta and GA4 and unsure they’re all clean? The free Tracking-Health Mini-Audit checks your setup in ~10 minutes.
FAQ
What is the Events API and do I need it? TikTok’s server-side event connection, run alongside the Pixel. TikTok recommends both because the Pixel alone under-reports. Yes if you spend on TikTok ads.
How does dedup work?
Same event_id + event name on Pixel and Events API; TikTok dedups overlapping events after 5 min within 48h, keeping the first. Mismatched event_id = double-counting.
How do I set it up on Shopify? Native TikTok channel installs the Pixel (+ Advanced Matching); route the Events API through server-side GTM (Stape/TAGGRS) for control. Verify data-sharing settings.
Why only browser events?
The server leg isn’t landing — check the Events API connection and event_id match in Events Manager.
Related
Sources
- TikTok — About Events API
- TikTok — About event deduplication
- TikTok — TikTok Pixel for Shopify
- Stape — How to set up TikTok Events API