Connecting Square to TikTok Events API
Square holds the transaction, and for most Square businesses the majority of those transactions are a card tapped at a counter with no browser anywhere near them. TikTok's audience skews to exactly the browsers and app contexts where browser-side tracking performs worst. The join between them succeeds or fails on one thing: whether the ttclid reaches the Square payment or order before the conversion happens, because TikTok can only match a conversion it can tie back to a click it recognizes.
Free30 minutesNo obligation
Specific to this pair
Square to TikTok: Square Online orders only, matched by contact data
Send only Square Online orders to TikTok: send CompletePayment through the Events API from the Square payment webhook, with value, currency, the order ID as event_id shared with any pixel event, and hashed email and phone. Square's hosted checkout won't carry the ttclid, so capture it on your landing page and expect lower match rates. Leave walk-in sales out.
TikTok is the hardest destination for Square revenue. Most of it is counter payments, and TikTok's attribution is built around a click in the app followed by a web conversion. Start with Square Online orders, and leave walk-in sales out of TikTok entirely unless your account supports offline events; check whether it does and what matching that requires.
Square Online's hosted checkout will not carry a ttclid on its own. Capture it on your landing page into a first-party cookie, and if Square Online's integrations support the TikTok pixel, let it fire on the storefront. For the server side, send CompletePayment through the Events API from the Square payment webhook for completed online payments, with value, currency, the order ID as event_id shared with any browser event, and hashed email and phone from the order. Unless your setup can write the ttclid into the order, contact data is the join, so expect match rates below a store where you own checkout.
The local pattern that does work: a restaurant, bakery or salon using TikTok to drive online pre-orders or bookings. Orders placed through Square Online from TikTok's in-app browser can be joined; the meal paid at the table cannot. Report TikTok's online share next to total Square revenue by channel, and treat any lift in walk-ins after a TikTok push as a dated observation, not a conversion.
Square → TikTok · what breaks
Why this join usually fails — Square → TikTok
- 01
The ttclid never reaches Square
Square Online checkout is hosted, so the identifier must be carried deliberately rather than by cookie. For in-person payments there is no identifier at all unless the customer booked an appointment or is in the customer directory — a walk-in who taps a card cannot be joined to an ad click by anyone.
- 02
Most of the revenue has no browser
A card at a terminal has no click, no session and no identifier. That is a boundary to measure rather than a bug to fix, and the honest deliverable includes how much of your revenue sits outside it.
- 03
The ttclid is lost in the in-app browser
TikTok traffic arrives through an in-app webview whose storage behavior is inconsistent. An identifier captured but not immediately persisted server-side often is not there by the time the conversion happens.
- 04
Nothing reconciles afterwards
TikTok Events Manager shows received events and their match status. As with Meta, arriving is not the test — deduplicated and matched is. Reconcile TikTok's reported conversions against the source system for the same window.
Square → TikTok · the fix
What working looks like — Square → TikTok
The ttclid on every transaction
Conversions arriving in TikTok
Events appear in TikTok Events Manager, deduplicated against the pixel, and become usable for optimization.
Reconciled against the source
Square → TikTok · architecture
How Square and TikTok actually connect
- 1
Square holds the truth
Square records every payment with its amount, channel and, where the customer is identified, a link to the customer directory. That directory is the only bridge between a counter payment and anything that happened online.
- 2
TikTok Events API needs a click to match
TikTok matches server events using ttclid where available, falling back to hashed contact information. Both should be sent — the fallback is what carries the events where the click ID did not survive.
- 3
The identifier is the bridge
The ttclid, captured at the visit and carried into the Square payment or order.
- 4
The event source decides reliability
Subscribe to payment and order events and send from your server. This covers online orders cleanly, and covers in-person payments only for the share you can join to an identity.
- 5
Deduplication at the destination
TikTok deduplicates on event_id, the same pattern as Meta: the pixel and the Events API must send the same event_id for the same conversion. Mismatched IDs mean double counting.
Square → TikTok · normal or broken
Working vs. broken, side by side — Square → TikTok
Normal, not a fault
The ttclid present on the transaction
Sent from the Square payment webhook
Deduplicated correctly
TikTok deduplicates on event_id, the same pattern as Meta: the pixel and the Events API must send the same event_id for the same conversion. Mismatched IDs mean double counting.
Reconciles with the source
Actually broken
The ttclid missing on most records
Square Online checkout is hosted, so the identifier must be carried deliberately rather than by cookie. For in-person payments there is no identifier at all unless the customer booked an appointment or is in the customer directory — a walk-in who taps a card cannot be joined to an ad click by anyone.
Sent from the browser
A card at a terminal has no click, no session and no identifier. That is a boundary to measure rather than a bug to fix, and the honest deliverable includes how much of your revenue sits outside it.
Counted twice, or not at all
TikTok traffic arrives through an in-app webview whose storage behavior is inconsistent. An identifier captured but not immediately persisted server-side often is not there by the time the conversion happens.
Nobody has reconciled it
Square → TikTok · diagnose
Diagnostic order — Square → TikTok
- 01
Count transactions carrying the ttclid
- 02
Follow one real conversion end to end
- 03
Split Square revenue by channel before anything else
Online versus in-person. Every subsequent number depends on that split, and blending them makes both unreadable.
- 04
Measure ttclid capture rate on TikTok traffic specifically
Not on all traffic. TikTok's in-app browser is the failure case, so a healthy overall capture rate can hide a poor one on exactly the traffic that matters.
- 05
Read the match rate, not the success message
TikTok Events Manager shows received events and their match status. As with Meta, arriving is not the test — deduplicated and matched is. Reconcile TikTok's reported conversions against the source system for the same window.
Square → TikTok · prove
How it gets proven — Square → TikTok
Source of truth
Square's transaction list, split by channel — online and in-person are different questions.
- The ttclid confirmed present on a live transaction.
- Deduplication confirmed in Events Manager, and ttclid capture rate measured on TikTok traffic specifically.
- The in-person join rate measured and stated as a number before any coverage claim is made.
Square → TikTok · free audit
What we check in the free audit
- Count transactions carrying the ttclid
- Follow one real conversion end to end
- Split Square revenue by channel before anything else
- Measure ttclid capture rate on TikTok traffic specifically
- Read the match rate, not the success message
Checked against
Square's transaction list, split by channel — online and in-person are different questions.
Free30 minutesNo obligation
Square → TikTok · when not to buy
When you don't need this — Square → TikTok
- Measure identifier coverage yourself first — pull your last hundred transactions and count how many carry the ttclid.
- If nearly all your revenue is in person with no appointments and no identified customers, there is very little here to attribute and we will say so rather than build a bridge to nothing.
- If TikTok is a small share of spend, the effort is hard to justify. It pays when TikTok is a channel you are actively scaling.
Square → TikTok · what we deliver
What gets built — Square → TikTok
Identifier capture into Square
Capture the click identifier and carry it into Square Online checkout, and for in-person work use an appointment booking as the bridge so the eventual payment can be joined through the customer record.
Event source: the Square payment webhook
Subscribe to payment and order events and send from your server. This covers online orders cleanly, and covers in-person payments only for the share you can join to an identity.
Dispatch to TikTok
Server events to the TikTok Events API with the ttclid, hashed contact information and a matching event_id.
Reversals where they exist
Square exposes refunds clearly, and in hospitality and services voids and comps are frequent enough that wiring the reversal matters.
Written guarantee
95%+ tracking accuracy
Measured against Square's transaction list, split by channel — online and in-person are different questions.. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Square → TikTok questions, answered
Square Online orders can, through the pixel and the Events API with hashed contact data. Counter sales cannot be tied to a TikTok click unless the customer booked or ordered online first.
Check Square Online's integrations settings for your plan. If it is not listed, track the landing page on your own domain and send online orders from the payment webhook.
Almost always because the ttclid never reached the Square payment or order. Square Online checkout is hosted, so the identifier must be carried deliberately rather than by cookie. For in-person payments there is no identifier at all unless the customer booked an appointment or is in the customer directory — a walk-in who taps a card cannot be joined to an ad click by anyone. Measure coverage before debugging the dispatch.
The ttclid — TikTok's click identifier, appended to your landing page URL and also stored in the _ttp cookie. TikTok additionally matches on hashed email and phone. In-app browser behavior makes ttclid capture more fragile than the equivalents on other platforms, so persisting it server-side as soon as it is seen matters more here than elsewhere.
The Square payment webhook. Subscribe to payment and order events and send from your server. This covers online orders cleanly, and covers in-person payments only for the share you can join to an identity.
TikTok Events Manager shows received events and their match status. As with Meta, arriving is not the test — deduplicated and matched is. Reconcile TikTok's reported conversions against the source system for the same window.
More on Square → TikTok
- Square Online → TikTokConnecting Square Online to TikTok Events API
- Square Appointments → TikTokConnecting Square Appointments to TikTok Events API
- TikTok · Lead → booked callHow to track lead to booked call for TikTok Ads
RELATED GUIDES
Where Square → TikTok fits in the rest of your tracking
- TikTok · Financial servicesTikTok Ads conversion tracking for financial services firms
- TikTok · SubscriptionsTikTok Ads conversion tracking for subscription businesses
- TikTok × SubscriptionsHow to reconcile TikTok Ads against your billing system
- TikTok · Free trial → paidHow to track free trial to paid for TikTok Ads
- Sezzle → TikTokConnecting Sezzle to TikTok Events API
- Square → SnapchatConnecting Square to Snapchat
- SubscriptionsConversion tracking for subscription businesses, across the whole lifecycle
- GoCardless → TikTokConnecting GoCardless to TikTok Events API
Free · 30 min
Get Square and TikTok joined properly
Free30 minutesNo obligation
