TikTok's measurement problem is not that conversions are hard to send. It is that the platform's whole model assumes the conversion happens quickly, on a phone, close to the ad, and a lot of businesses advertising there do not work that way.
If yours involves a phone call, a showroom, a quote, or a sales team, the conversion TikTok can see is not the one you care about. Sending the real one back is what closes that gap.
What does TikTok offer?
The Events API, which accepts conversions server to server, and which is where offline conversions belong.
The model is the familiar one. TikTok appends a click identifier, ttclid, to your landing page URL. You capture it, keep it attached to the person through your systems, and send it back with the conversion when the real outcome happens. TikTok also matches on hashed customer data, email and phone, which carries the match when the click identifier is missing.
It is missing more often than on other platforms, which is the practical wrinkle worth planning for. A great deal of TikTok traffic arrives through an in-app browser, moves between apps, and does not behave like a tidy desktop session. Treat the hashed identifiers as the primary match key and the click identifier as the bonus, rather than the other way round.
What counts as offline here?
Anything that happens away from the page the ad pointed at.
A phone call from a lead form. A booking confirmed by a human. A sale in a physical location. A subscription that starts after a trial. A deal your sales team closes weeks later. All of them are events your website never sees, and all of them can be reported through the same API with the time they actually happened.
The important field is that time. An event sent without an accurate timestamp, or stamped at the moment your batch job ran, tells TikTok a story about when your business converts that is simply untrue, and any report built on it inherits the error.
How does this change what the algorithm chases?
It gives it a better target, provided you give it enough of them.
TikTok's delivery optimisation is aggressive and it needs volume. Feeding back thirty closed deals a month is unlikely to change how it buys; feeding back several hundred qualified leads probably will. The realistic structure for most businesses is the same one that works on every other platform: optimise toward a frequent mid-funnel event, report on the valuable one.
Where TikTok differs is the speed of the feedback loop. The platform's attribution windows tend to be shorter than Google's or Meta's, which suits impulse ecommerce and suits a considered B2B purchase much less. A conversion that lands outside the window is not credited, and no amount of integration work changes that.
What has to be built
Four steps, and only the last one is TikTok-specific.
Capture ttclid on arrival and store it where it survives a navigation. Write it into a hidden field on your forms. Store it on the CRM record alongside the lead. Send the conversion through the Events API when the outcome happens, with hashed email and phone, the real event time, and the value.
The first three are the same chain every platform needs, and they fail the same way: captured, never read back, expired unused. Our piece on missing GCLID capture covers that failure in detail on Google, and it is worth reading whichever platform you are wiring, because the broken link is always in the same place.
If you are already sending server-side events for your website conversions, most of this exists. An offline conversion is the same call from a different system at a later time.
Deduplication, if the pixel is also running
Where the browser and the server can both report the same conversion, they need a shared event id so TikTok counts one.
Genuinely offline events do not have this problem, since a deal closed by phone never fired a pixel. Website purchases do, and if you are running the pixel and the Events API in parallel without a shared identifier, your reported conversions are inflated and your cost per acquisition is flattering you.
What to confirm before you build
The attribution windows on your account, and whether your typical time to conversion fits inside them. For a considered purchase this is the number that decides whether the exercise is worth doing at all.
How far back an event can be dated and still be accepted and attributed. It governs how long your reporting pipeline can lag.
Read both from TikTok's current documentation. They change, and they are the two figures a measurement plan is built on.
Is TikTok the right place to spend the effort?
Sometimes the honest answer is no, and it is worth saying that before someone spends a fortnight on an integration.
If TikTok is a small share of your budget, if your sales cycle is months long, and if your volume is too low for the algorithm to learn from, the integration will tell you what the channel produced and will not improve how it buys. That is still worth having, and it is a smaller prize than the same work on your largest channel.
Build it where the money is first. Then bring the same pipeline here, because by then most of the work is done: the capture, the storage and the CRM fields are shared, and only the sending differs.
FAQ
Can TikTok track offline conversions?
Yes, through the Events API. Conversions that happen away from your website, including phone sales, in-person purchases and CRM closes, can be sent server to server with the click identifier, hashed customer data, the real event time and the value.
What is ttclid?
TikTok's click identifier, appended to your landing page URL when someone clicks an ad. It plays the role GCLID plays for Google. Capture and store it, but treat hashed email and phone as the primary match keys on TikTok, because a large share of its traffic arrives through in-app browsers where the click identifier is more likely to be lost.
Why are my offline conversions not attributing?
Check the attribution window first. TikTok's windows tend to be shorter than other platforms', so a conversion that happens weeks after the click may fall outside it and never be credited regardless of how the event was sent. After that, check the event timestamp is the real conversion time rather than the time your batch job ran.
Do I need this if I only sell online?
If every purchase completes on your website and the pixel and Events API are both firing with a shared event id, you have what you need. Offline conversion work matters when the outcome happens somewhere your website cannot see it, which for a pure ecommerce store is mostly refunds and repeat purchases rather than the initial sale.
Should I build this for TikTok before my other channels?
Usually not. The capture, storage and CRM work is shared across every platform, so build it once on the channel carrying the most budget, then extend it here, where only the sending differs. Doing it in that order means the smaller channel costs you a day rather than a fortnight.