Why your conversions never match — and how to fix it
Meta says 50 conversions, Google says another number, Shopify shows 12. Here’s why every platform reports a different figure — attribution windows, the iOS and ad-blocker gap, bot traffic, and modeled estimates — and how to get one number you can trust.
The AdProtektor Team12 min read
Open Meta Ads Manager and it says 50 purchases. Open Google Ads and it says something else. Open GA4 and it’s a third number. Then open Shopify, the system that actually took the money, and it shows 12 orders. Every dashboard is confident, and no two of them agree. If you’ve ever had to decide which figure to put in a board deck, you know the feeling.
The good news: this is not a bug, and it’s not (usually) your setup being broken. The platforms disagree because they are each answering a different question — and because real sales leak out of the system while fake ones leak in. This guide breaks down the four reasons your conversion numbers never match, then shows the only thing that actually resolves it: one server-side source of truth that reconciles to your store.
“Meta says 50 conversions. Shopify shows 12. Which number do I put in the board deck?” The honest answer isn’t to pick one — it’s to build one number all of them reconcile against.
First, the mindset shift: they measure different things
Most people try to make Meta equal Shopify. That’s the wrong goal, and it will drive you slowly insane. Meta, Google, GA4 and Shopify are not four measurements of the same quantity — they are four different quantities. Meta measures “orders I can take credit for.” Shopify measures “orders that happened.” Those will never be the same number, and chasing equality is a waste of time. The realistic goal is one clean, deduplicated, fraud-filtered figure you trust — and then you reconcile each platform against that.
Reason 1: every ad platform credits itself
Ad platforms are graded on the revenue they can claim, so each one counts generously in its own favor. Three rules do most of the damage:
Attribution windows differ. Meta commonly credits a conversion on a 7-day-click / 1-day-view window; Google Ads uses its own windows and a data-driven model; GA4 reports on yet another basis. The same order can land in different days — or different channels — depending on whose clock you read.
View-through counts. Meta can claim a sale from someone who saw an ad but never clicked it. Shopify has no concept of that. So Meta’s total includes conversions Shopify will never attribute to Meta.
Cross-channel double-counting. One purchase that touched a Meta ad, a Google ad, and a marketing email can be counted once by Meta, once by Google, and once by Klaviyo. Add the dashboards up and you’ll “sell” more than you actually did.
None of this is fraud or a misconfiguration. It’s the platforms doing exactly what they’re designed to do. But it guarantees the numbers diverge.
Reason 2: the browser pixel silently loses real sales
The classic conversion pixel runs in the shopper’s browser — and a growing share of browsers never let it fire:
iOS & browser privacy limit third-party scripts and cookies, capping how much a pixel can see.
Ad blockers stop the pixel from loading at all for a meaningful slice of shoppers.
Cookie-consent walls block tags until (or unless) a visitor opts in.
Broken tags fail silently after a theme update, a checkout change, or a tag-manager tweak — and nobody gets an alert.
The result is under-counting: a real, paid-for order happens, the money hits Shopify, but the ad platform never hears about it. Worse, the platform then optimizes away from the campaign that drove it, because as far as it can tell, that campaign produced nothing. This is the gap server-side tracking exists to close — capturing the order from the store backend (or via each platform’s Conversions API) instead of relying on the browser.
Reason 3: bots inflate the count the other way
While real sales leak out, invalid traffic leaks in. Bots, click farms and competitor scripts don’t buy, but they do browse, fire page views, add to cart, and fill in lead forms. Most tracking setups count those events like any other and forward them straight to the ad platforms — so your top-of-funnel metrics inflate, and Meta and Google dutifully optimize toward finding more of the same fake traffic.
That makes bot filtering an accuracy problem, not just a budget one: invalid events corrupt the very data your campaigns learn from. (For why blocking individual IPs no longer catches this, see IP blocking vs. person-based detection.)
Reason 4: “modeled” numbers you can’t audit
To paper over the gaps in Reasons 1–2, some analytics tools report modeled attribution: when they can’t observe part of the journey, they estimate it with a statistical model, often blending pixel data, platform APIs and post-purchase surveys into a single proprietary “total impact” figure.
Modeling isn’t inherently wrong. The problem is auditability. If you can’t click a reported conversion and trace it to a specific real order, you can’t explain the number when finance asks where it came from — and “trust the algorithm” is a hard sell on a six- or seven-figure budget. That’s exactly why teams who rely on a modeled dashboard still cross-check it against Shopify every week. A number you have to verify against another number isn’t a source of truth.
What each system actually counts
System
What it counts
Why it differs
Meta Ads Manager
Orders it can attribute to a Meta ad within its window (click + view-through)
Claims cross-channel and view-through credit; misses orders with no Meta touch
Google Ads / GA4
Conversions attributed to Google on its own windows and model
Different window and model than Meta; Ads and GA4 also differ from each other
Shopify
Completed orders only
Channel-agnostic; includes direct, organic and POS; doesn’t assign ad credit
Server-side, reconciled
Every real order, deduplicated per person, fraud-filtered
Matches the store to the dollar; one clean number sent to every platform
Don’t chase “Meta = Shopify”
You will never make an ad platform’s self-credited total equal your store’s order count, and a vendor who promises they’ll match exactly is overselling. Aim instead for one deduplicated, fraud-filtered figure that ties to your store — then read each platform as “how much credit this channel is claiming,” not as a competing truth.
How to actually fix it
Every reliable setup does the same four things, in this order:
Capture server-side. Record the order from your store backend or via the Conversions API, so iOS, ad blockers, consent walls and broken tags can’t hide real sales.
Deduplicate per person. Tie every event to the real person behind it, across sessions and devices, so one customer is one conversion — no double counts, no phantom sales.
Filter out fraud first. Withhold bot and click-farm events before they’re reported, so the platforms optimize on real buyers instead of being trained on invalid traffic.
Reconcile to your store. Match the final number to the orders your checkout actually recorded, then send that one clean, deduplicated event to Meta, Google and GA4 with a shared event ID so de-duplication just works.
That’s precisely what ConversionOS (AdProtektor’s conversion-tracking layer) is built to do: capture every order server-side, dedupe and fraud-filter it, reconcile it to your store to the dollar, and dispatch the clean event everywhere at once — so your dashboards finally tell the same story your bank does.
What to check when you compare tools
Most conversion-tracking and attribution tools pitch the same “recovered conversions” headline. Before you commit, check four things — of any vendor, us included:
Auditable or modeled? Can you open any conversion and see the real order behind it?
Does it filter bots, or forward them? Is invalid traffic screened out before events are sent?
Your whole stack, or Shopify only? Native server-side capture on Shopify, WooCommerce, WordPress and custom storefronts — plus an API for anything bespoke.
Pricing and lock-in. Transparent and predictable, or GMV-based with an annual contract?
ConversionOS captures conversions server-side across Shopify, WooCommerce, WordPress and custom stores, deduplicates each one per person, withholds bot and click-farm events using AdProtektor’s fraud detection, and reconciles the total to your store before dispatching to Meta Pixel + Conversions API, GA4 and Google Enhanced Conversions. Start a free trial to see one reconciled number on your own traffic, or read the ConversionOS overview.
The bottom line
Your conversions don’t match because Meta, Google, GA4 and Shopify each measure a different thing, because real sales leak out through the browser, and because bot traffic leaks in — and modeled dashboards hide all of it behind a number you can’t audit. You can’t force the platforms to agree, but you can give them one clean, server-side, fraud-filtered source of truth that reconciles to your store. Do that, and the question stops being “which number is right?” and becomes “how much credit is each channel claiming against the real one?” — which is the only version of the question worth answering.
FAQ
Frequently asked questions
Why do Meta and Shopify show different conversion numbers?
Because they count different things. Meta credits a conversion to itself when a user saw or clicked a Meta ad within its attribution window (often 7-day click, 1-day view) — even if the order also involved Google or email. Shopify counts only completed orders, regardless of channel. So Meta’s number includes view-through and cross-channel credit Shopify never attributes, and Shopify includes orders (direct, organic, POS) Meta never saw. Neither is “wrong” — they answer different questions. The goal isn’t to make Meta equal Shopify; it’s to have one deduplicated, fraud-filtered source of truth you reconcile both against.
How do I get accurate conversion tracking after iOS and ad blockers?
Move capture server-side. A browser pixel can be blocked by iOS privacy settings, ad blockers, or a cookie-consent wall before it ever fires, so a meaningful share of real orders go uncounted. Server-side capture records the order from your store backend (or via the Conversions API) instead of relying on the shopper’s browser, then forwards it to Meta, Google and GA4 — so the real sales those browser-side blocks hide still get counted.
What is “modeled” attribution, and can I trust it?
Modeled attribution is an estimate: when a tool can’t observe part of the customer journey, it fills the gap with a statistical model, sometimes blending pixel data, platform APIs and surveys into one proprietary number. Modeling isn’t inherently bad, but if you can’t open a conversion and trace it to a real order, you can’t audit or defend the figure — which is why finance teams distrust it. Prefer tools where every reported conversion ties back to an actual order you can inspect.
Do bots really change my conversion numbers?
Yes — in both directions. Bots and click-farm traffic generate fake page views, add-to-carts and lead-form fills that get counted as events and, with most trackers, forwarded straight to the ad platforms. That inflates top-of-funnel metrics and trains optimization and lookalike audiences toward more invalid traffic. Filtering invalid traffic out before conversions are reported is as much an accuracy fix as a budget one.
AP
The AdProtektor Team
Ad-fraud researchers & engineers
AdProtektor builds person-based AI click-fraud protection for Google Ads and Meta. This article is written by the same team that ships the detection engine — engineers and analysts who look at invalid-traffic patterns across millions of ad clicks every week.
See how much fraud is hiding in your traffic — in 5 minutes.
Most accounts find that 10–20% of paid clicks are bot, click-farm, or repeat-offender traffic. Start your free trial — the first numbers come back the same day you install.