The instinct when Facebook Ads and GA4 disagree is to assume one of them is broken and go hunting for the bug. Almost always, both are working exactly as designed. They are answering two different questions about the same orders, and the Facebook Ads GA4 discrepancy you are staring at is the answer, not the error.
That reframe matters because it changes what you do next. If one tool were broken, the job would be to fix it and get to one true number. But no single true number exists here. Meta counts conversions it can attribute to an ad interaction; GA4 counts events tied to a session whose source it can see; your store counts orders that were actually placed. Three honest systems, three different totals, all describing the same week of sales.
Here is what each platform is really counting, how much of the gap is normal versus a real bug, and the reconciliation pass that turns "why don't these match" into a list of named, quantified causes you can act on.
The one question each tool is actually answering
Before you decompose the gap, get clear on what each number means, because most arguments about which platform is "right" are really arguments about a question nobody stated out loud.
- Facebook Ads Manager answers: how many conversions can Meta attribute to someone who saw or clicked a Meta ad, within Meta's attribution window, using Meta's logged-in identity graph?
- GA4 answers: how many key events happened in sessions where GA4 could observe the source, credited to the last non-direct click before conversion?
- Your store admin answers: how many orders were actually placed and paid for?
Only the last one is a count of reality. The other two are counts of attributed reality, filtered through each platform's rules. Once that is clear, the discrepancy stops being mysterious and starts being decomposable.
The reasons Facebook Ads and GA4 will never match
Every one of these pushes the numbers apart in a predictable direction. Knowing which is which is how you tell a normal gap from a broken setup.
1. Different attribution windows
Meta's default attribution setting credits a conversion when someone clicked your ad within 7 days, or viewed it within 1 day, before converting. GA4, by default, credits the last non-direct click and does not count view-through at all. Meta documents its options in about attribution models and settings, and Google covers GA4's models in get started with attribution.
This one changed recently. On January 12, 2026, Meta removed the 7-day-view and 28-day-view options, leaving 1-day view as the only view window alongside the 7-day click default. The direction of the effect is the same as it always was: Meta claims conversions from views and longer lookbacks that GA4 never credits, so Meta will almost always report a higher number. If your Meta conversions dropped in mid-January, that window change is a likely reason, not a broken pixel.
2. View-through and modeled conversions
Meta credits view-through conversions (someone saw the ad, did not click, then converted) and fills gaps with modeled conversions where direct observation is not possible. GA4's default last-non-direct-click model does neither. Every view-through and modeled conversion is a number that exists in Meta and simply is not present in GA4.
3. A click is not a session
Meta counts an ad click the moment it happens. GA4 only records a session when the landing page actually loads, the tag fires, and consent permits it. A shopper who taps an ad on a flaky mobile connection and bounces before the page paints is a click in Meta and nothing at all in GA4. On mobile-heavy paid social traffic, this alone opens a real gap.
4. Cross-device attribution
Meta stitches a phone tap today to a desktop purchase Thursday through its logged-in identity graph. GA4, without a robust User-ID implementation, largely cannot. Any journey that crosses devices tends to be one attributed conversion in Meta and either an unattributed or direct/none session in GA4.
5. The reporting clock keeps moving
Meta's reported conversions are not final for a while. Meta statistically models figures over a rolling window, so yesterday's numbers keep revising for 24 to 72 hours. If you compare a Meta number pulled this morning against a GA4 number pulled last night, part of your "discrepancy" is just two snapshots taken at different points in Meta's revision cycle.
6. Tagging gaps hide real ad traffic
This is where a discrepancy stops being structural and starts being fixable. When paid clicks land on untagged or inconsistently tagged URLs, GA4 files that traffic under direct/none instead of the paid channel, so Meta shows the click and GA4 shows nothing attributable.
In a delivered reporting audit we found about 31 percent of a store's traffic landing as direct/none while the ad platforms recorded the matching click volume. The cause was three UTM spellings for one channel (fb, facebook, and meta-paid) plus untagged email and influencer links. None of that was a Meta problem. It was a tagging-hygiene problem that made GA4 look like it was undercounting paid performance.
7. Double counting inflates one side
The opposite failure is just as common. When the same purchase fires from more than one source, a number gets counted twice. On the Meta side, the classic version is a browser pixel and a Conversions API event sent without a shared event_id, so Meta cannot deduplicate them. Meta's own deduplication guidance is explicit that both events must carry the same event_id and event name to be merged.
In a delivered paid-media audit we found exactly this on part of a catalog: an Events Manager deduplication rate of about 71 percent, which meant roughly a third of purchase events were being counted twice and reported ROAS was inflated by about a third. That is a discrepancy pointing the other way: Meta too high, not GA4 too low.
How much of the gap is normal
Not all of the discrepancy is a problem. Some of it is the unavoidable cost of two systems measuring differently, and you will burn weeks trying to close a gap that is supposed to be there.
The working rule most practitioners use: a 10 to 20 percent difference between Meta-reported conversions and GA4 is normal and expected. A gap of 50 percent or more is a red flag that something in the list above is broken rather than merely different. Treat the size of the gap as triage, not diagnosis. It tells you how hard to look, not what you will find.
Reconcile it: turn the gap into named causes
The reconciliation pass is what separates a real analysis from an argument. The goal is not to make the numbers match. It is to account for every meaningful slice of the gap with a named, boring reason, so that whatever is left over is small enough to ignore.
Start from the number that is real - your store admin - and work outward. Pick a clean, already-closed week so Meta's revision cycle has finished, then line everything up:
| Source | What it counts | Purchases |
|---|---|---|
| Store admin (reality) | Orders actually placed | your number |
| GA4 | Last-non-direct-click key events, observed sessions | your number |
| Meta Ads Manager | Attributed conversions, incl. view-through and modeled | your number |
Then decompose the difference between GA4 and Meta into the causes above, in this order:
- Tagging check first. Look at GA4's direct/none share against known ad spend. A bloated direct/none bucket is a tagging problem, and it is the single most common reason GA4 undercounts paid traffic. This is the same discipline as auditing your GA4 setup for the misconfigurations that quietly break attribution.
- Dedup check. In Meta Events Manager, read the deduplication rate for purchase. Below the high-90s means browser and server events are not sharing an
event_id, and Meta is inflated. - Window and view-through. What is left after tagging and dedup is mostly the structural gap: view-through, modeled conversions, and the click-versus-session difference. This portion is expected and should not be chased.
Two of those three are fixable. The third is the residual you learn to live with. When you can point at each slice and say what it is, the Facebook Ads GA4 discrepancy has done its job: it has told you where your measurement is broken and where it is merely different.
If server-side events are part of your fix - recovering the match rate that ad blockers cost the browser pixel - our walkthrough of server-side GTM and when it earns its keep covers the tradeoffs before you take on the extra infrastructure. And if you would rather have a measurement engineer decompose the gap for you, a fixed-scope marketing analytics engagement exists to reconcile exactly these numbers across GA4, Meta, and your store. You can see the shape of that work in a sample paid-media audit report before deciding whether to run a full analytics audit on your own account.
Which number should you actually trust?
The wrong question is "which platform is right." The right question is "which number should drive this specific decision," because the answer changes with the decision. Here is the frame we hand founders instead of a single winner:
| Decision you are making | Number to trust | Why |
|---|---|---|
| What actually sold and what you banked | Store admin | It is the only count of reality, not attributed reality |
| Comparing channels against each other | GA4 | It applies the same last-non-direct-click rule to every channel |
| Whether Meta's optimization is working | Meta Ads Manager | Its delivery system optimizes to its own attributed signal |
| Whether tracking itself is healthy | The reconciliation table | Only the gap between all three reveals broken tags or double-counts |
Pick the number that matches the question, and the discrepancy stops being a source of anxiety. Meta and GA4 were never going to agree, and once each of them is doing the job it is actually good at, they do not need to. The one deliverable that ties them together is not a matching number - it is a reconciliation you can explain line by line.

