KPIHelm — Your KPIs. Our insight. Your future.
All articles

Meta says 40 sales. Shopify says 24. Neither one is lying.

Open the ad platform and it reports one number. Open Shopify and it reports another, usually smaller, sometimes by half. The instinct is to decide which one is broken and trust the other — and that instinct is the actual problem, because the two numbers were never measuring the same thing. One answers "did my ad contribute to a sale?"; the other answers "what did the store record?" Both can be right at once, and a store that picks the wrong one for a given decision will misprice, misjudge a channel, or move budget for a reason that doesn't exist. This guide explains where the gap comes from, which number belongs to which decision, and how to tell an ordinary gap from one that just changed meaning. If the underlying problem is that your ROAS fell, start with Your ROAS dropped on Shopify.

Step 1: The two numbers answer different questions

Your ad platform is a claims system. It reports the conversions it believes it influenced, using its own definition of influence, its own time window, and its own view of who saw what. No platform is asked to check whether another platform is claiming the same sale, because none of them can see each other.

Your store is a ledger. Shopify records an order when an order happens: one row, one customer, one amount, one moment — and later, one refund if it comes back. It has no opinion about which ad deserves credit; where it does assign a source, it does so from what the browser told it at checkout.

A claims system and a ledger will disagree by design. The useful question is not "which is true" but "how far apart are they, and is that distance stable" — which is step 4.

Step 2: Where the gap actually comes from

Five mechanisms cover nearly all of it. They stack, which is why the total gap is often larger than any single explanation seems to justify.

Attribution windows. A platform typically credits a purchase that happens days after the click back to the day of the click. Your store records it on the day it was paid for. So the same sale can appear in two different reporting periods — and if the customer came back via search or typed your domain, the store may credit a different source entirely.

View-through conversions. Some platforms count a purchase from someone who saw the ad and never clicked it. Your store cannot attribute that sale to the ad, because nothing in the visit points there. This single mechanism can account for a large share of the gap on display-heavy and video-heavy channels.

Modeled conversions. Since consent prompts and tracking restrictions took away part of the observable data, platforms statistically estimate the conversions they can no longer see directly. These estimates are legitimate — and they are not rows in your order table. A modeled conversion cannot be matched to an order by design, so no amount of reconciliation work will make it line up.

Double-claiming across platforms. Each platform independently reports the conversions it thinks it contributed to. Nobody deduplicates between them. Add up what three platforms claim and the total can exceed the number of orders your store actually took — and that is not a bug in any of them. It is three separate answers to three separate questions, being added together as if they were one.

Timing, currency and returns. Ad accounts carry their own timezone and their own reporting delay, so a day boundary alone can move several orders between periods. Platform-reported revenue may exclude tax or shipping that your store total includes. And your store nets out refunds later, while platform numbers generally keep the original conversion.

Step 3: Which number belongs to which decision

The gap stops being a problem the moment each number is used for what it can actually answer.

Money questions belong to the store. What the month left you, what your real ROAS was, what you can afford to pay for a customer, whether a price works. Only your store knows the discount actually given, the refund that arrived three weeks later, and what the goods cost — and those are what decide profit. If you are turning those figures into a break-even number, the arithmetic is in the break-even guide.

Optimization questions belong to the platform. Which creative is decaying, which audience stopped responding, whether cost per click is drifting. The platform is the only place impressions, clicks and frequency exist at all. Its numbers may be inflated in absolute terms, but that inflation is roughly constant over short periods — so movements inside one platform still carry real information.

And one comparison to stop making entirely: platform A's reported ROAS against platform B's reported ROAS, to decide a budget split. Those are two different measuring systems with different windows and different definitions of a conversion. Judge each platform against its own history, and split budget on what the store recorded. This is also why the blended ROAS guide insists on taking channel revenue from the store rather than from the ad platforms.

Step 4: The ten-minute check — measure the gap, then watch it

Pick a closed period, long enough that returns have mostly landed.

  1. Count the orders your store recorded in that period.
  2. Add up the conversions each platform claims for the same period, in each platform's own reporting.
  3. Divide claimed by actual. A combined figure above 1.0 is normal and expected — you are adding up overlapping claims. The number itself is not the finding.
  4. Do the same per channel, comparing each platform's claimed conversions against the sales your store attributes to that channel.
  5. Write the ratio down and repeat it next period. This is the entire point of the exercise.

Now read it as a trend, not a value. A stable ratio means your platform dashboard is a usable proxy — inflated by a known, steady factor, and therefore still readable day to day. A ratio that moved means your dashboard changed meaning, and any trend you read across that change is partly an artefact of the measurement rather than the market.

When the ratio moves, check the measurement before you check the campaign: an attribution window or attribution-setting change, a new consent banner or a shift in consent rate, a broken or missing UTM on a new campaign, a tracking tag that stopped firing after a theme update, or a newly added platform now claiming sales the others were already claiming. A jump in store-side "direct" traffic that lines up with the move is a strong hint that the tagging broke rather than the demand.

Step 5: What this changes in how you spend

Set budgets from what the store recorded; judge creatives and audiences inside each platform. Keep one store-side channel split you trust — consistent UTMs on every campaign, checked when campaigns launch rather than when numbers look strange — because that is the only channel attribution that survives a platform changing its own rules.

Do not try to close the gap to zero. It cannot be closed: view-through and modeled conversions have no order rows to match against, and no reconciliation will produce them. The goal is a gap that is measured, explainable and stable. A known gap is arithmetic you can work around. An unknown one is a dashboard quietly rewriting its own definition while you read trends off it.

Then finish the way any honest diagnosis does: change one thing, and judge the result by how much new data has accumulated rather than by how many days have passed.


KPIHelm reads each platform in its own context and against its own history, next to what your Shopify store actually recorded — so an inflated claim on one channel is never mistaken for performance, and the platforms are never averaged into a single number that hides which one needs attention. Install it free on the Shopify App Store or see a sample report.