You open Meta Ads Manager and it claims your campaign drove 78 purchases. You open GA4 and "Paid Social" shows more like 48. Same store, same week, same ads — a 30-point spread. Nobody is lying. The two platforms are built to measure different things, and once you see how, the gap stops being alarming and starts being useful.
This is one of the most common reconciliation headaches in ecommerce, and it sits right next to two cousins: why Google Ads and GA4 numbers differ and why Google Ads overreports against GA4. The Facebook version of the story is the most extreme, because Meta has the most generous crediting rules of any major platform.
Why Facebook Ads reports more purchases than GA4
The gap comes from two forces pulling in opposite directions: Meta inflates its own credit, and GA4 deflates its measured total. Stack them and Facebook's number lands well above GA4's.
1. View-through attribution — Meta's biggest inflator
Meta's default attribution setting is a 7-day click plus 1-day view window, according to Jon Loomer's 2026 attribution breakdown and Foreplay's attribution guide. That "1-day view" half is the culprit. If a shopper sees your ad — no click — and buys within a day, Meta claims the sale.
GA4 has no equivalent. It credits paid social only when there's an actual click it can observe. So every view-through purchase is a sale Meta counts and GA4 does not. This single mechanism explains most of the spread.
2. Different attribution models entirely
Meta self-credits: any purchase falling inside its window after a click or view gets counted as one full Meta conversion. GA4's default is data-driven attribution (DDA), which splits one conversion fractionally across every touchpoint. One real order might read as 1.0 Meta conversion and only 0.4 of a GA4 "Paid Social" conversion — the rest handed to organic, direct, or paid search.
So even for the same clicked sale, Meta books a whole conversion while GA4 books a slice. Multiply that across hundreds of orders and the two totals drift apart by design. If you want the deeper version of this, our guide on which number is actually right walks through when to trust platform-reported versus store-side attribution.
3. Modeled conversions on both sides — but Meta claims them fully
When a pixel is blocked or a user opts out of tracking, both platforms estimate the missing conversions with machine-learning models. The difference is what happens next: Meta assigns the modeled conversion fully to itself, while GA4 still runs it through fractional DDA and may attribute much of it elsewhere.
4. GA4 quietly loses events Meta recovers
GA4 is client-side JavaScript. Ad blockers, Safari and Firefox tracking prevention, cookie-consent declines, and shoppers who close the tab before the thank-you page all cause GA4's purchase tag to never fire. Field estimates put ad-blocker and consent-affected traffic at roughly ten to twenty-five percent of users, per Elevar and Audiense's cross-tool analysis. Meta backfills many of those with modeling; GA4 backfills less and splits what it does recover. Net result: GA4 undercounts while Meta pads its own line.
5. Click-date versus conversion-date reporting
Meta reports a conversion on the date of the click or view that earned credit, not the date of purchase. A Monday click that converts Thursday appears in Meta on Monday. GA4 logs it Thursday. Compare a single day and the numbers look wildly off even when the trailing totals agree — always compare Facebook and GA4 on rolling seven-to-fourteen-day windows, never one calendar day.
How big should the Facebook-vs-GA4 gap be?
There's no universal constant, but the surrounding benchmarks bound it. GA4 typically runs fifteen to thirty percent below Shopify's server-side order count, and a gap past forty percent signals a real tracking break, according to BlueFrog Analytics and Consentmo. Meta, meanwhile, typically runs twenty to thirty-five percent above Shopify on the default window, per Vaizle and TrackBee.
Anchor both to Shopify — the one server-side source of truth — and Facebook naturally sits well above GA4. If Meta is roughly a third over Shopify and GA4 a quarter under it, Facebook can plausibly report on the order of half again as many paid-social purchases as GA4 shows. That's a healthy, expected spread, not a bug.
A worked example: one week, two very different numbers
Say you run a print-on-demand store and, in one week, 100 real orders come in. Imagine each order averages a $40 product subtotal, plus $5 shipping and $4 tax, for $49 total. (These are illustrative inputs, not benchmarks about your store.) Of those 100 buyers:
- 55 clicked a Meta ad within seven days before buying.
- 15 only saw a Meta ad within a day before buying — no click.
- 10 clicked a Google ad last.
- 20 arrived via organic search or typed the URL directly.
Here's how each tool tells the story.
Facebook Ads Manager reports about 78 purchases. It counts 55 click-through plus 15 view-through (55 + 15 = 70 by window), then adds roughly 8 modeled conversions for buyers it couldn't observe directly: 70 + 8 = 78. It reports revenue at the subtotal the pixel passes, not the full total: 78 × $40 = $3,120. It does not subtract refunds, and it books many of these on the click date, so some land in the prior week.
GA4 reports about 48 paid-social conversions. It loses roughly a fifth of buyers outright to ad blockers, consent declines, and closed tabs, recovers some by modeling, then splits every survivor fractionally under DDA. The 15 view-through buyers who never clicked? GA4 gives Meta zero credit for them. What's left for "Paid Social" is a slice — nowhere near Meta's 78.
Shopify reports 100 orders. Server-side, last-click, authoritative on how many sales happened. It files the 15 view-through buyers under their real last referrer, not Facebook.
Three numbers — 78, 48, 100 — for one week of 100 orders. The roughly 30-point Facebook-over-GA4 gap is view-through plus full self-credit plus modeling on Meta's side, minus client-side loss plus fractional splitting on GA4's. All three counts are internally correct.
The mistake that makes it much worse
Everything above describes a healthy gap. One misconfiguration turns it into nonsense: broken deduplication. Best practice is to send each purchase from both the browser Pixel and server-side CAPI, so blocked events get recovered. Meta then collapses the pair into one — but only if they share an identical event_id and event_name, and only within forty-eight hours, per Meta's official dedup documentation.
Miss the shared key and Meta counts the same order twice. If Facebook suddenly shows nearly double GA4 (or double Shopify) after you added CAPI, that's not more sales — it's a dedup bug. Correct redundant setup should hold your count steady while recovering lost events, not inflate it.
What to actually do about the gap
Stop trying to force the numbers to match — they can't, and chasing equality wastes hours. Instead:
- Pick one source of truth per question. Shopify's order count for how many sales happened. Meta's number for how many sales its ads plausibly touched. GA4 for cross-channel path patterns, not headline totals.
- Compare on trailing windows. Never diff a single day, given Meta's click-date reporting.
- Watch the ratio, not the delta. A stable Facebook-to-GA4 ratio week over week is healthy. A sudden jump means a tracking or dedup change — go investigate.
- Standardize UTMs on every paid link so Shopify and GA4 classify traffic consistently, even though Meta's self-credit ignores them.
Because paid social touches so many orders that neither platform fully captures, most POD sellers eventually reach for multi-touch attribution tooling to see the whole path instead of arguing with two disagreeing dashboards. If you're doing this cleanup for the first time, our ecommerce data reconciliation hub lays out the full framework.
Where profit fits — and where PodVector helps
Here's the part every SERP article skips: the reason the Facebook-vs-GA4 gap matters isn't tidiness — it's that you compute ROAS from these mismatched numbers, and a wrong denominator hides whether an order actually made money. A campaign Meta calls profitable at its inflated count can be underwater once you subtract product cost, shipping, transaction fees, and refunds from the real order.
That's the problem PodVector is built for. It connects Shopify, Meta Ads, Google Ads, Printify, Printful, and Stripe, then computes true per-order profit — the number underneath all this attribution noise. Victor, its AI operator, reads your ad data and your store data together and proposes moves you approve; the writes he executes are Shopify-side. Victor is not a dashboard, and he does not touch your ad account — he reads Meta's reported numbers, reconciles them against real orders and real margin, and tells you which sales actually paid off.
FAQs
Does Facebook always report more purchases than GA4?
Almost always, yes, for the same store and window. Meta credits view-through conversions and self-attributes full credit, while GA4 loses client-side events and splits credit fractionally under data-driven attribution. Both forces push Facebook's count above GA4's. The exception is a broken GA4 or Meta setup, where either number can swing unpredictably.
Is Facebook lying about my conversions?
No. Meta counts view-through and modeled conversions by design and discloses that it does. It's answering "did my ad plausibly influence this sale?" — a looser question than GA4's or Shopify's "was there a click, and did a sale happen?" Different question, different answer, no dishonesty.
Will fixing my tracking make Facebook and GA4 match?
No. Setting up CAPI or consent mode recovers lost events, but it does nothing about the structural gaps — view-through, self-crediting windows, modeling, and last-click versus fractional attribution. Even with flawless tracking, Facebook will still report more paid-social purchases than GA4. Aim for a stable ratio, not equality.
Which number should I use to calculate ROAS?
Use Shopify's order count and revenue as the denominator for how many sales and how much money actually happened, since it's the server-side source of truth. Then decide separately how much ad influence to credit. Better still, compute return on ad spend against true per-order profit — after product cost, fees, and refunds — rather than gross revenue, so a high-ROAS campaign that loses money can't hide.
Why did my Facebook number double after I added CAPI?
That's a deduplication misconfiguration, not real growth. The browser Pixel and server CAPI are both sending the same purchase without a shared event_id, so Meta counts each order twice within its dedup window. Fix the shared event key and matching event name, and your count should return to normal while still recovering blocked events.
How large a Facebook-vs-GA4 gap is normal?
There's no fixed constant, but you can bracket it: GA4 typically runs fifteen to thirty percent below Shopify, and Meta twenty to thirty-five percent above it. Anchor both to Shopify's order count and a substantial Facebook-over-GA4 spread is expected. What matters is whether that ratio stays stable week over week — a sudden change is your signal to investigate.