Two very different problems wearing the same costume
When TikTok Ads Manager shows fewer purchases than Shopify shows orders, merchants assume "the pixel is broken." Sometimes it is. But the mismatch is really two problems stacked on top of each other, and they need opposite responses.
Tracking gaps are genuine data loss — an event that should have fired never reached TikTok. Better plumbing narrows these. Methodology gaps are two systems measuring different things on purpose — TikTok answers "did my ad influence this sale?" while Shopify answers "did a sale happen?" No amount of plumbing closes those.
If you treat a methodology gap like a broken pixel, you will keep "fixing" tracking that was never broken. This is the single most expensive mistake in TikTok measurement, and it is why reconciling your ecommerce data across tools — the discipline of knowing which number is true for which question — matters more than any one dashboard.
Tracking gaps: the data TikTok actually loses
These are the ones worth fixing. TikTok's Pixel is browser-side JavaScript, and TikTok traffic is almost entirely mobile and in-app — the worst possible environment for client-side tracking.
Ad blockers, ITP, and in-app browsers. Safari's tracking prevention, content blockers, and privacy-first browsers stop the Pixel from firing while the sale still completes server-side in Shopify. Field estimates put affected traffic at roughly ten to twenty-five percent of users, and one Shopify-focused analysis notes TikTok purchases "often go completely unrecorded" on mobile browsers specifically because it is so mobile-heavy.
Lost tail events. The buyer closes the tab before the thank-you page loads, or the script fails on a slow connection, so the Purchase event never sends. Shopify's order record is complete because it lives on the server; TikTok simply never sees the conversion — and as the diagnostic guides put it, if TikTok cannot see the conversion, it cannot learn from it, so your optimization degrades too.
A genuinely broken Purchase event. If the Pixel is misfired, mapped to the wrong event, or missing from checkout, you will see clicks and add-to-carts but zero purchases. Check TikTok Events Manager: if AddToCart fires but Purchase does not, the event is broken, not the attribution.
The fix: server-side. TikTok's Events API sends the Purchase from your server, so a blocked browser no longer means a lost sale. Both the browser Pixel and the server-side Events API in a hybrid setup recover most of the tracking loss. But note the ceiling: server-side recovers lost events. It does nothing about the methodology gaps below.
Methodology gaps: the numbers that will never match
Here is what most guides skip. Even with flawless server-side tracking, TikTok and Shopify will still disagree — by design.
Attribution window
TikTok's default is a seven-day click plus one-day view window. That means TikTok claims a sale if the customer clicked an ad any time in the previous seven days — or merely saw one in the last day without clicking. Shopify has no concept of a view. It records a checkout and attributes it to the last non-direct click, which is often "direct" or "organic," not TikTok.
So a single sale can be one order in Shopify (credited to search) and simultaneously one purchase in TikTok (credited to the view). Both are internally correct. They are answering different questions.
View-through and the click-date shift
View-through conversions — sales credited to an ad that was seen but not clicked — are the biggest single source of TikTok-over-Shopify inflation. And TikTok reports a conversion on the date of the click or view that earned credit, not the date of the purchase. A view on Monday that converts Thursday lands in TikTok on Monday and in Shopify on Thursday. Compare single days and you will chase ghosts; always compare on trailing seven- or fourteen-day windows. This click-date-versus-order-date problem is the same one that scrambles payout reconciliation, and it is worth understanding why the reporting date you pick changes the whole picture.
Refunds never come back out
When a customer refunds, Shopify reduces net and total sales — and your bank deposit shrinks. TikTok (like other ad platforms) generally keeps the original conversion on the books. So after a refund wave, TikTok's totals stay high while Shopify's drop. If you score campaigns on TikTok's revenue, your winners look better than they are, which is exactly why refunds have to be pulled out of any ROAS calculation before you trust it.
A worked example: "TikTok says 60, Shopify says 80"
Say you sell enamel mugs. In one week Shopify records 80 real orders at a $45 subtotal, plus $6 shipping and $4 tax, for $55 collected per order. Here is how the week actually breaks down:
- 44 buyers clicked a TikTok ad within seven days before buying.
- 10 only saw a TikTok ad within a day before buying.
- 12 came from Google or email as their last click.
- 14 came from organic search or direct.
- 6 of the 80 later requested refunds.
TikTok reports about 60 purchases. It counts the 44 click-throughs plus the 10 view-throughs (54), then adds modeled conversions to estimate the buyers its blocked mobile pixel could not observe. It reports many of them on the click date — so a chunk lands in last week's column — and it never subtracts the 6 refunds.
Shopify reports 80 orders, last-click. It credits roughly 44 to TikTok, 12 to Google/email, and 24 to search/direct. The 10 view-through buyers are not filed under TikTok here — they clicked nothing, so Shopify records their real last referrer.
Now the money. Total collected is 80 × $55 = $4,400. Then reality intrudes:
- Shopify Payments processing, at about 2.9% plus 30¢ per transaction on the entry-level plan: (0.029 × $4,400) + (80 × $0.30) = $127.60 + $24.00 = $151.60
- Refunds issued: 6 × $55 = $330.00
- One chargeback fee at roughly $15 per dispute: $15.00
Net deposited = $4,400 − $151.60 − $330.00 − $15.00 = $3,903.40.
You now have four "sales" numbers for one week: TikTok's ~60 purchases, Shopify's 80 orders, Shopify's ~$4,070 in total sales after refunds, and $3,903.40 actually in the bank. None is wrong. Shopify's order count is the truth for how many sales happened; TikTok's number is its claim about how many it influenced; the payout is the truth for cash. The reason your payout looks nothing like your sales is a separate but related story — the timeline between total sales and what Shopify deposits.
Why the gap is a profit problem, not a vanity problem
The mismatch only matters because you make spending decisions on it. If you read TikTok's 60 purchases as your true result, you underspend on a channel that actually touched 54 of your 80 orders. If you read TikTok's inflated revenue (view-through plus modeled plus no-refunds) as truth, you overspend on the same channel.
The fix is not to make the dashboards agree. It is to anchor every decision to the one server-side source of truth — Shopify's orders — and layer real per-order cost on top of it: product cost, print cost, shipping, processing fees, and refunds. That is where a raw "purchase count" turns into a profit-per-order you can actually steer on. Merchants moving a catalog over — say importing an Etsy store into Shopify — hit this the moment their first paid campaign goes live.
This is exactly the reconciliation problem PodVector is built for. It connects Shopify, Meta Ads, Google Ads, Printify, and Printful, and computes true per-order profit from the server-side order record — the number TikTok and every other ad dashboard can only approximate. Victor, its AI operator, reads that live data, analyzes where your reported ROAS diverges from real profit, and proposes moves; the changes he executes are Shopify-side and only with your approval. Victor is not a dashboard, and he does not touch your ad account — TikTok stays yours to manage, informed by numbers you can trust.
How to reconcile instead of chasing a match
- Confirm the orders exist in the date range and that Purchase actually fires in TikTok Events Manager — rule out a genuinely broken event first.
- Add the server-side Events API so blocked mobile browsers stop eating conversions.
- Compare on trailing 7- or 14-day windows, never single days, to absorb the click-date shift.
- Expect a residual gap. TikTok counts views, models the unobservable, and keeps refunds. Treat a stable ratio as healthy, not equality.
- Judge campaigns on Shopify orders minus real per-order cost — not on either dashboard's purchase count.
FAQs
Why does TikTok show no purchases but Shopify has orders?
The most common cause is a Purchase event that never reaches TikTok — its browser Pixel is blocked or fails on mobile and in-app views, or it is misconfigured at checkout. Shopify still records the order because it happens on the server. Check TikTok Events Manager: if AddToCart fires but Purchase does not, the event is broken and the server-side Events API is your fix.
Will TikTok and Shopify numbers ever match exactly?
No, and they are not supposed to. Even with perfect tracking, TikTok's seven-day-click, one-day-view default window counts view-through and modeled conversions that Shopify's last-click, server-side view never includes. Aim for a stable ratio between them, not equality.
Does the TikTok Events API fix the tracking problem?
It fixes the tracking-loss half — sending the Purchase server-side recovers events that ad blockers and closed tabs would have killed. It does not touch the methodology half. Attribution windows, view-through credit, click-date reporting, and refunds will still make the two dashboards disagree.
Why does TikTok report more revenue than Shopify after refunds?
Shopify reduces net and total sales when an order is refunded, and your payout shrinks with it. TikTok generally keeps the original conversion, so its revenue stays inflated. Always strip refunds out before you compare, or a refund-heavy week will make a losing campaign look like a winner.
Should I pause a TikTok campaign that shows a bad ROAS?
Not before you isolate whether the ROAS is real or a measurement artifact. Verify the Purchase event, add server-side tracking, and compare against Shopify orders on a trailing window. Only after the measurement is sound should you judge the campaign — and judge it on per-order profit, not the dashboard's headline number.
Which number should I actually trust?
For how many sales happened and how much you collected, trust Shopify's order count and total sales — it is the server-side record. For cash, trust the payout after fees and refunds. For "did TikTok influence this," read TikTok's number as a directional claim, never as ground truth. Real decisions belong on Shopify orders minus true per-order cost.