Skip to main content
Square → TikTokIntegration guide

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

  1. 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.

  2. 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.

  3. 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.

  4. 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. 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. 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. 3

    The identifier is the bridge

    The ttclid, captured at the visit and carried into the Square payment or order.

  4. 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. 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

  1. 01

    Count transactions carrying the ttclid

  2. 02

    Follow one real conversion end to end

  3. 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.

  4. 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.

  5. 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.

Get my free conversion tracking audit

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.

Get my free conversion tracking audit

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.

Free · 30 min

Get Square and TikTok joined properly

Free30 minutesNo obligation