Skip to main content
Setup guide
TikTok AdsShopify

TikTok Events API on Shopify, step by step

If you advertise on TikTok from a Shopify store, TikTok usually already has a Pixel through Shopify's TikTok app. The SignalBridge app adds a server-side route to the same Pixel: the Shopify Web Pixel captures the ttclid and the checkout, and SignalBridge sends the events to the TikTok Events API with hashed customer data.

There is one Shopify-specific trap, and it is the reason this guide exists. TikTok removes duplicates only when two events share an event name and an event ID, and the TikTok app and SignalBridge cannot share one on Shopify. The sections below show how to run one sender per event, and how to check it.

By Kiril Kostov, Founder of SignalBridge. Checked against the product and the sources below on .

Browser capture
Shopify Web Pixel: ttclid from the landing URL and the _ttp cookie when the TikTok Pixel has set it
Purchase sent as
CompletePayment, with value, currency and the products in the order
Event ID
shopify_order_ plus the order ID for purchases, which the TikTok app does not know about
Page views
Sent as ViewContent, because the Events API has no page view event
Match data
ttclid and ttp as they are; email, phone and external ID hashed with SHA-256; IP address and user agent
Consent
Follows Shopify's Customer Privacy status
Refunds
Not sent to TikTok. The event list has no refund equivalent
Risk
Double counting if the TikTok app also sends the same events

Why TikTok counts twice on Shopify if you do nothing

TikTok's help centre says deduplication is required when you share the same events through both the Pixel and the Events API, and that you must share the event ID through both for it to happen. Events that carry the identical event name and event ID within 48 hours are treated as one, with the first received kept. The Events API documentation adds that a low Server and Browser number points to a deduplication problem.

Shopify's TikTok app has three data sharing levels. Standard uses only the TikTok Pixel in the browser. Enhanced adds the Events API and Advanced Matching. Maximum adds Shopify's APIs on top. So at Enhanced or Maximum the app is a second server-side sender next to SignalBridge, and you would get three copies of a purchase.

Even at Standard there is an overlap. The TikTok Pixel in the browser sends CompletePayment, AddToCart, InitiateCheckout, AddPaymentInfo and ViewContent, and SignalBridge sends the same events by server. SignalBridge's Web Pixel runs in Shopify's sandbox and cannot put an event ID on a call the TikTok app makes, so the two copies have different IDs and nothing links them. TikTok's guidance is that you do not need deduplication when the two channels send different events, for example browser AddToCart and server purchases. That is the setup to aim for.

Who should send which event

SignalBridge sends ViewContent, AddToCart, InitiateCheckout, AddPaymentInfo and CompletePayment, and the TikTok app's Pixel sends the same five. The TikTok app lets you choose the exact events it tracks from its Analytics page, so use that to give each event one owner.

TikTok eventWho should send itReason
CompletePaymentSignalBridge onlyThis is the event campaigns optimise for, and the one most exposed to blockers and to double counting. Turn it off in the TikTok app.
The other event your campaigns optimise for, if it is not a purchaseSignalBridge onlyWhatever TikTok optimises on must not be counted twice. Turn it off in the TikTok app as well.
ViewContent, AddToCart, InitiateCheckout and AddPaymentInfo that you only watchBoth can send, with inflated countsThe two copies cannot be merged, so the counts overstate real activity. Read them as signals, not as exact numbers.

What TikTok receives from SignalBridge on Shopify

Each Shopify event is mapped to a TikTok standard event, with the data TikTok uses for matching attached.

Shopify eventSent to TikTok asWhat is attached
page_viewedViewContentThe page URL and referrer, ttclid and ttp when known. TikTok has no page view event, so every page view arrives as ViewContent.
product_viewedViewContentProduct ID, name, price and currency.
product_added_to_cartAddToCartProduct, quantity, value and currency.
checkout_started and contact info enteredInitiateCheckoutCart contents, total and currency.
payment_info_submittedAddPaymentInfoCheckout contents and total.
checkout_completedCompletePaymentValue, currency, the products with price and quantity, hashed email, phone and external ID, and the event ID shopify_order_ plus the order ID.

Set it up

Allow about fifteen minutes. Make the TikTok app changes before you test.

  1. Install the SignalBridge app

    Install it from the Shopify App Store and approve the permissions. The Web Pixel starts capturing events and storing the ttclid. No theme code is involved.

  2. Find the Pixel the TikTok app uses

    In TikTok Events Manager open the Pixel that the TikTok app on Shopify created. SignalBridge must send to this same Pixel so TikTok attributes server events and browser events to one place.

  3. Connect TikTok in SignalBridge

    Open the pixel's settings, choose TikTok Ads and sign in, then select that Pixel. If the Pixel does not appear, enter its Pixel Code manually together with an access token from Events Manager and your advertiser ID.

  4. Set the TikTok app to Standard

    Open the TikTok app in Shopify admin and choose the Standard data sharing level, as described in TikTok's Shopify help. That removes the app's own Events API connection.

  5. Turn off Complete Payment in the TikTok app

    On the TikTok app's Analytics page switch off the Complete Payment event, and any other event your campaigns optimise for, as described in the table above. This is what stops the double count, so do not skip it.

  6. Add a custom tracking domain

    Create a subdomain such as data.yourstore.com, point a CNAME at the SignalBridge tracking host and select it in the pixel settings, so Web Pixel requests stay first-party.

  7. Send a test event

    Copy the current Test Events code from Events Manager, paste it into the Test field on the TikTok card and run the test. A server event should appear in the Test Events tab.

Test it with a real order

  1. Click a TikTok ad and place an order

    Use a browser that has accepted marketing tracking. Click your ad, so the landing URL carries a ttclid, then buy a low-value product. In the SignalBridge event stream the Purchase should show TikTok as delivered.

  2. Look at the event in Events Manager

    Open the Pixel and find CompletePayment in the event list. With the TikTok app switched off for this event, it should appear as Server only, once per order.

  3. Read the Server and Browser column

    TikTok's documentation says that column counts events received from both channels as one. For events you assigned to a single sender, Browser or Server alone is the expected result. A purchase showing in both Browser and Server means two senders are still active.

  4. Compare with Shopify after a day

    Count CompletePayment for yesterday and compare it with the orders that came from TikTok in Shopify. A figure well above your orders means a second sender. A figure near your orders means one sender is working.

Problems that are specific to Shopify

  • TikTok shows about twice as many purchases as Shopify

    The TikTok app's Pixel or Events API is still sending Complete Payment. Switch the event off on the app's Analytics page and set the app to Standard.

  • ViewContent is much higher than product views

    SignalBridge sends every page view as ViewContent, because the Events API has no page view event, and the TikTok app sends its own ViewContent for product pages. Treat the count as activity, not as product views.

  • Events from the TikTok app and SignalBridge are never marked as Server and Browser

    Expected on Shopify. The two copies have different event IDs, so TikTok cannot merge them. Use one sender for each event instead.

  • No ttp on server events

    The _ttp cookie exists only after the TikTok Pixel has run in that browser, and consent can delay it. Matching continues with the ttclid, email and phone.

  • Purchases appear in a different currency

    Shopify gives the currency with every checkout event. If a value ever arrives without one, SignalBridge sends USD, so set your store's default currency in the pixel settings.

  • Events stop after weeks of working

    TikTok rejected the access token. Delivery pauses and the dashboard asks you to reconnect. Sign in again from the TikTok card.

What to know before you rely on it

  • Without a consent decision saved on the order, the order webhook's purchase is not sent to TikTok, so the browser copy carries the purchase.
  • Refunds, cancellations and fulfilments are not reported to TikTok.
  • TikTok decides attribution. Ads Manager and SignalBridge will not agree exactly.
  • Orders created in the Shopify admin or at the point of sale have no browser session, so they have no ttclid and are not sent.

Questions about this setup

Do I have to uninstall Shopify's TikTok app?

No. Keep it for the catalogue, ads and its browser Pixel. Set its data sharing to Standard and turn off the events your campaigns optimise for, starting with Complete Payment.

Why is deduplication harder on TikTok than on Meta?

TikTok's documentation names only one rule: the same event name and event ID. Meta documents a second fallback on fbp and external ID. Without a shared ID on Shopify, TikTok has no way to link the two copies.

Does this work for stores that only use SignalBridge for TikTok?

Yes. If you remove the TikTok app and its Pixel, SignalBridge is the only sender and nothing overlaps. You lose the browser Pixel and the ttp cookie, so matching leans on the ttclid, email and phone.

Which TikTok event is a Shopify order?

CompletePayment. SignalBridge maps Purchase to it. It does not send a separate PlaceAnOrder unless that event is sent explicitly.

What is the event ID for an order?

shopify_order_ followed by the numeric Shopify order ID. It is the same on the browser copy and the webhook copy, so a retry is safe.

Is hashing applied to the ttclid?

No. TikTok expects the ttclid, ttp, IP address and user agent unhashed. Email, phone and external ID are hashed with SHA-256.

Sources

The vendor documents this guide relies on. Statements about SignalBridge come from the product itself.

Try this setup with SignalBridge

Every plan starts with a 14-day free trial. Connect it, send a test conversion and see the result before you decide.