Why your Meta (Facebook) Ads numbers never match GA4 or Shopify
Meta says your ads drove 40 sales. GA4 says 22. Shopify says something else again. If you have ever tried to reconcile the three, you know the feeling. The good news is the gap is normal and explainable. Here is what actually causes it, and how to get the numbers close enough to trust.
The short answer
Meta, GA4 and Shopify are three tools counting the same sales in three different ways. Meta credits a conversion to itself using its own attribution window and its own view of who saw or clicked an ad. GA4 credits the last non-direct channel and only counts what its browser tag managed to record. Shopify just counts orders it processed. None of them is lying. They are answering slightly different questions, and each loses a different slice of data along the way.
The 6 real reasons they disagree
1. Attribution windows are different by default
Meta defaults to a 7-day click and 1-day view window, so it will credit a sale that happened up to a week after someone clicked, or the same day they merely saw the ad. GA4 uses a data-driven or last-click model over its own lookback. Shopify counts by order date. Same sale, three different dates and three different owners. This alone explains a big chunk of the gap.
2. View-through conversions
Meta counts people who saw your ad but did not click, then bought later. GA4 and Shopify have no idea that impression happened. So Meta will almost always report more conversions than the others, by design. It is not wrong, it is just measuring influence rather than direct clicks.
3. iOS and ad blockers eat the browser pixel
Since iOS tracking prompts arrived, a large share of Apple users opt out of tracking, and browser privacy features plus ad blockers stop the Meta pixel firing at all. Those real buyers still show in Shopify, but Meta's browser pixel never saw them. This pushes browser-measured numbers down and is the single biggest source of under-counting.
4. No Conversions API, or CAPI without deduplication
The fix for the pixel loss above is the Conversions API (CAPI), which sends the purchase from your server instead of the browser. If you do not have it, you are leaving 20 to 40 percent of conversions unreported to Meta. If you have it but it is not deduplicating against the browser pixel, you get the opposite problem and Meta double counts. Both wreck your reported ROAS.
5. Missing or mismatched event IDs
Deduplication between the pixel and CAPI relies on a shared, unique event ID on every purchase. If it is missing or not consistent, Meta cannot tell the browser event and the server event apart, so the same order gets counted once, twice, or not at all depending on which arrived.
6. Modelled and estimated conversions
Both Meta and GA4 now fill gaps with modelling. When consent is denied or data is missing, they estimate conversions rather than count them. That is sensible, but it means part of what you see is a statistical guess, and two tools guessing separately will never land on the same number.
Not sure how much your ad tracking is losing?
Pop in your domain and we will show you where your tracking is leaking, in about 10 seconds. Free, no signup.
Check my tracking freeHow to get the numbers close
You will never make Meta, GA4 and Shopify match exactly, and you should stop trying. The goal is to make them directionally consistent and to trust one source for each decision. Here is the order of work:
- Pick Shopify as your source of truth for revenue. It is the only one counting actual money. Use Meta and GA4 for direction, not for the bank figure.
- Line up the windows. Set a consistent attribution window in Meta and note that GA4 and Shopify will still differ. Compare trends, not absolute totals.
- Turn on the Conversions API with deduplication. This recovers the iOS and ad-blocked buyers and is the highest-impact fix by far.
- Send a unique event ID on every purchase so the pixel and CAPI dedupe cleanly.
- Set up Consent Mode properly so you keep modelled conversions instead of losing EU and UK data outright.
Done right, Meta stops under-reporting, your ROAS reflects reality, and the algorithm optimises on real buyers instead of a distorted picture. That usually improves ad performance on the same budget, because Meta is finally learning from clean signal.
Want it checked and fixed by hand?
We audit your live pixel, CAPI and deduplication, tell you exactly what is wrong in plain English, and give you a fixed quote to fix it. The audit comes off any build.
See how it works & pricingDatahound are analytics and ad-tracking specialists. We fix broken GA4, Meta CAPI and server-side tracking for ecommerce and lead-generation businesses so every sale, form and call gets counted. Back to datahound.agency · Read: why GA4 and Shopify don't match