Hunor.digital
← All writing
Attribution · GA4

Why GA4, Facebook and your store disagree on purchases

Facebook says 212, GA4 says 167, the store says 189. Usually nothing is broken: they count different things. What each number means and which one to report.

Lázár HunorDigital Fixer
The short answer

GA4, Facebook, and your store disagree because they count different things: Facebook claims any purchase it may have influenced within its attribution window, GA4 assigns credit by its own model and loses consent-rejecting visitors, and your store simply counts orders. They will never match. Reconciling them means choosing one source of truth per question.

Say your Tuesday looks like this: Facebook Ads Manager reports 212 purchases, GA4 reports 167, and your store's order list says 189. Three systems, one reality, three answers, and a meeting where somebody asks which one is "right."

The uncomfortable, liberating answer: probably all of them, by their own definitions. They are not measuring the same thing. Once you can say precisely how the definitions differ, the panic mostly evaporates, and what remains is a manageable engineering question.

Three systems, three definitions of "a purchase"

Facebook counts influence, generously. By default, Meta takes credit for a purchase if the buyer clicked an ad within the past 7 days or merely saw one within 1 day (check your account's window settings; these are configurable). It also models conversions it cannot directly observe, precisely because tracking losses exist. It is answering "how many purchases might our ads have contributed to," and it is answering it as the party that gets paid more when the number is bigger. That does not make the number fake. It makes it an advocate's number.

GA4 counts what it saw, then divides credit. GA4 only knows about purchases its tag observed: visitors who accepted consent, were not running blockers, and whose events actually fired. Among those, its attribution model splits credit across channels. It is answering "of the journeys I could see, which channels earned the conversion," with an unavoidable footnote: it did not see everyone.

Your store counts money. Orders in the database, minus test orders, refunds, and cancellations, depending on the report. It has no idea why anyone bought, but on how many, it is the only honest witness in the room.

Notice the shape of the illustration above: Facebook highest, store in the middle, GA4 lowest. That ordering shows up constantly, and now you know why: generous windows and modeling on one end, consent and blocker losses on the other, cash registers in between.

The six usual gaps

When you need to explain a specific discrepancy, it is nearly always one or more of these:

  1. Attribution windows. A purchase two days after an ad click: Facebook yes, a last-click view elsewhere maybe not. Different windows, different counts, forever.
  2. View-through conversions. Facebook's 1-day-view credit has no equivalent in GA4 at all. This alone builds a permanent gap.
  3. Consent and blockers. Every visitor who rejects your banner or blocks scripts is invisible to GA4 but still perfectly capable of buying. Your store sees them; analytics never will. (This is also why what your consent setup actually blocks is a data-quality question, not only a legal one.)
  4. Deduplication between pixel and server events. Teams sending both browser and server events to Meta without correct dedup keys double-count; with overly aggressive dedup they undercount. If you run server-side tracking, this seam is a top suspect.
  5. Timezones, currencies, refunds. Facebook's Tuesday, GA4's Tuesday, and your store's Tuesday can be three different 24-hour windows; refunds usually vanish only from the store's count.
  6. Modeled conversions. Where data is missing, Meta and Google estimate. Modeled numbers are not observations, and they will not match anyone's database, by construction.

So which number do you report?

One source of truth per question. Not one source of truth overall; that is the mistake that produced the argument.

And a practice worth stealing: stop staring at the gaps, start watching the ratios. If Facebook-to-store has hovered around some level for months and suddenly jumps, that is not philosophy anymore; something changed in measurement, consent, or deduplication, and it is worth an investigation that week.

When a mismatch means something is actually broken

The structural gaps are stable. Breakage moves. Get suspicious when a ratio shifts sharply without a change in spend or mix; when GA4 exceeds the store (analytics undercounts by nature, so overcounting means double-firing tags or test traffic); or when a platform's number changes drastically right after a tracking or consent change you made. Those are findable, fixable engineering problems, and finding them hands-on is exactly what a Clarity audit is for: three to five days, network-tab-level verification, and a written explanation your whole team can argue from instead of arguing about.

The dashboards will still disagree afterwards. But you will know why, by how much, and which one to trust for which decision, and that is what trustworthy analytics actually means: not one perfect number, but known numbers with known errors.