What TikTok traffic looks like
TikTok's pixel is POST-and-JSON: everything interesting lives in the request body, often with several logical events batched into one network row.
- Endpoint pattern
- Loader from
analytics.tiktok.com/i18n/pixel/events.js?sdkid=<pixelCode>(sdkidis the pixel code, an alphanumeric string likeC4A7..., not a plain number); event traffic goes to endpoints underanalytics.tiktok.com, with regional variants such asanalytics-sg.tiktok.comand the US-hostedtiktokw.ushosts - Transport
- POST with a JSON body (unlike Meta's GET beacons); multiple events are often batched into a single request
- Key parameters
event/actionevent name (Pageview,ViewContent,CompletePayment, or custom) ·context.pixel.codewhich pixel the hit belongs to ·event_id/message_iddeduplication keys against TikTok Events API server events- Payload
propertiesbusiness payload (currency,value,contents,content_type) ·context.userAdvanced Matching: SHA-256 hashedemailandphone_number, plusexternal_id·context.ad.callbackthettclidclick ID captured from the ad landing URL
A typical event POST, as Event Watcher captures it:
{
"event": "CompletePayment",
"event_id": "ev-8842",
"context": {
"pixel": { "code": "C4A1B2…" },
"user": { "email": "f0e1d2…hash", "external_id": "u-4821" },
"ad": { "callback": "EAB-ttclid…" }
},
"properties": { "currency": "DKK", "value": 499, "contents": [{ "content_id": "SKU-123" }] }
}
Debugging TikTok with Event Watcher
- The dedicated TikTok parser decodes the POST body. Each hit appears under its event name with the pixel code and event ID in the overview.
propertiesrender as an Event Properties table; hashed email/phone andexternal_idgroup under Identity; thettclidcallback sits under Device data.- Page URL, referrer, and title land under Page Context; SDK library and version, message IDs, and batch flags in the Request group.
- Batched payloads are visible per event: no unpicking JSON by hand.
TikTok and consent
Marketing consentThe extension checks TikTok hits against marketing consent. TikTok has no cookieless consent-mode variant in the browser pixel: a request to analytics.tiktok.com before the CMP grants marketing means data already left the browser, marked pre-consent or denied.
The nuance to watch: sites gate the events.js load correctly but call ttq.identify() with hashed PII as soon as the script arrives. Hits with populated context.user before consent are the highest-severity finding.
Common debugging scenarios
- CompletePayment shows no revenue in TikTok Ads Manager. Open the event and check
propertiesforvalueandcurrency. A missingcurrencyinvalidates the value. - Events API deduplication fails. Compare the browser hit's
event_idin the Request group against the server event; mismatched or absent IDs mean double counting. - Which pixel code fired? Agencies frequently add a second pixel. Pivot the Grouped view by Tool, then inspect each hit's
context.pixel.codeto separate them. - Pixel fires before consent. The consent check flags it directly; the pattern and fix mirror GA4 fires before consent.
- Traffic goes to
tiktokw.usinstead ofanalytics.tiktok.com. US data-residency routing. Event Watcher recognizes both hosts as the same platform, so a hit is a hit either way.