TikTok Pixel
13 min
the tiktok pixel destination loads the tiktok pixel javascript sdk in the browser and forwards ecommerce and engagement events client side to tiktok ads unlike the server side tiktok conversions api destination , device mode events originate from the browser and can leverage the full tiktok pixel feature set use this destination alongside the tiktok conversions api destination for maximum signal coverage getting started this is a device mode destination the tiktok pixel sdk is loaded automatically — no manual script installation is required you will need pixel code — your tiktok pixel id, found in your tiktok ads manager under assets > events > web events optionally limited data use (ldu) — enable limited data use mode for ccpa compliance defaults to false auto page view — automatically fire a page view on pixel initialization defaults to true product content id field — which product field to use as the content id product id , sku , variant id , or id defaults to sku > product id > id fallback chain connecting to the tiktok pixel cdp destination warning before connecting destinations in the chord cdp, please verify with all destination owners that all non chord cdp configured destinations are disabled running external destinations alongside configured chord cdp destinations can result in duplicate events downstream log into the chord data platform navigate to the cdp click the "add" button next to destinations select tiktok pixel from the destination catalog enter the destination name and your pixel code configure optional settings as needed click "create" to connect events every event first calls ttq identify() with available user data before sending the conversion event event mapping chord event tiktok event notes page (auto page view on init) fires during initialization when auto page view is true ; subsequent page events send user identification only identify ttq identify() sets user data; no conversion event fired order completed completepayment multi product checkout started initiatecheckout multi product payment info entered addpaymentinfo multi product product added addtocart single product product viewed viewcontent single product product clicked clickbutton single product product added to wishlist addtowishlist single product products searched search single product signed up completeregistration no product data subscription created subscribe no product data (any other track event) chord event name passed as is see custom events identify sets user identity on the tiktok pixel for enhanced matching no conversion event is fired tiktok sdk call ttq identify(userdata) tiktok attribute chord source (priority order) notes email or sha256 email properties email > context traits email > traits email routed to sha256 email if value is a sha 256 digest; otherwise sent to email and tiktok hashes automatically phone number or sha256 phone number properties phone > context traits phone > traits phone routed to sha256 phone number if value is a sha 256 digest; otherwise sent to phone number in e 164 format external id userid > anonymousid first name properties first name > context traits first name > traits first name lowercased, whitespace removed last name properties last name > context traits last name > traits last name lowercased, whitespace removed city properties address city > context traits address city lowercased, non alphanumeric chars removed state properties address state > context traits address state lowercased, non alphanumeric chars removed country properties address country > context traits address country lowercased, non alphanumeric chars removed zip code properties address zipcode > context traits address zipcode > traits address zipcode lowercased, whitespace removed identify is automatically called before every track event if any user data is available pii handling tiktok's track() event schema does not include pii fields email, phone, and name belong exclusively in ttq identify() , where tiktok automatically hashes them client side using sha 256 before transmission to prevent accidental pii exposure, the following fields are always stripped from track event payloads even if they appear in event properties or are written there by a property mapping field why stripped email handled by ttq identify() phone handled by ttq identify() phone number handled by ttq identify() first name handled by ttq identify() last name handled by ttq identify() if you have a property mapping that writes to one of these fields (e g properties email → properties email ), the value will still flow to ttq identify() through the normal user data extraction path — it will not appear in the track() payload multi product events (order completed, checkout started, payment info entered) tiktok sdk call ttq instance(pixelcode) track(eventname, eventproperties, { event id messageid }) tiktok attribute chord source (priority order) notes content type (hardcoded) "product" currency properties currency defaults to "usd" value properties value > properties total falls back to sum of price × quantity across products order id properties order id shop id properties shop id description properties products\[0] description from first product contents properties products\[] mapped as below product contents — each item in properties products\[] tiktok attribute chord source content id configured field from properties products\[] > sku > product id content name properties products\[] name content category properties products\[] category price properties products\[] price quantity properties products\[] quantity brand properties products\[] brand single product events (product added, product viewed, product clicked, product added to wishlist, products searched) product data is extracted from top level properties (not properties products\[] ) tiktok sdk call ttq instance(pixelcode) track(eventname, eventproperties, { event id messageid }) tiktok attribute chord source (priority order) notes content type (hardcoded) "product" currency properties currency defaults to "usd" value properties value > properties total > properties price order id properties cart id / properties order id omitted if not present shop id properties shop id omitted if not present description properties description query properties query products searched only contents single element array from top level properties single product content tiktok attribute chord source (priority order) content id configured field from properties > properties sku > properties product id content name properties name content category properties category price properties price quantity properties quantity — defaults to 1 brand properties brand no product events (signed up, subscription created) same event level attributes as multi product events above, but contents is an empty array custom events any track event that does not match a chord tracking plan event name is forwarded to tiktok using the chord event name as is this includes events like form submitted , callback started , download link clicked , and any other custom event names your storefront fires tiktok sdk call ttq instance(pixelcode) track(eventname, eventproperties, { event id messageid }) the payload uses the same structure as multi product events — if the event carries products , currency , value , or order data in its properties, those are extracted and forwarded custom properties from property mappings are also included tiktok attribute chord source notes content type (hardcoded) "product" currency properties currency defaults to "usd" value properties value > properties total falls back to sum of price × quantity if products present order id properties order id omitted if not present contents properties products\[] if present, otherwise empty array if the tiktok event name you want to fire does not match your chord event name, use a property mapping in the hub to rename the event before it reaches this destination custom property forwarding configure destination mappings in hub with properties destination paths to forward additional event properties alongside the computed schema fields in the ttq instance( ) track( ) payload only explicitly configured non schema fields are forwarded — nothing flows through automatically how to configure open the destination's mappings tab in hub add a mapping with source path properties loyalty tier and destination path properties loyalty tier on the next event, loyalty tier will appear in the event properties payload sent to tiktok what is excluded schema fields already handled by the destination transform (e g currency , value , order id , contents ) — these flow through the structured transform pii fields ( email , phone , first name , last name ) — see pii handling ; these are always stripped from track event payloads and handled by ttq identify() instead when a custom mapping targets a schema field (e g properties value → properties value ), the customer configured value overrides the destination's computed default this allows schema fields to be sourced from a different event property — for example, mapping properties total → properties value to use your order total as the conversion value initialization the plugin sets up the ttq function queue, then loads https //analytics tiktok com/i18n/pixel/events js the partner name is set to "chord" if auto page view is true (default), an initial page view is fired immediately after initialization the plugin manages sdk loading state ( fresh → loading → loaded / failed ) to prevent duplicate script loads if the script fails to load, subsequent events are silently dropped csp requirements if your site uses a content security policy, allow the following domains directive domain script src https //analytics tiktok com connect src https //analytics tiktok com updated 27 may 2026