Skip to content

Answer library  /  Conversion Tracking  ·  Reconciliation

Why don't my GA4 and Meta conversion numbers match?

GA4 and Meta won't match, because each credits the same orders under its own rules. I expect Meta 10 to 30 percent above GA4's paid-social count, and GA4 paid conversions within 15 percent of Google Ads plus Meta. Outside those bands, check tracking first. On one store I audited, two Conversions API builds double-sent Meta purchases for six months.

They count different things on purpose

GA4 and Meta both report conversions, but they answer different questions. Meta answers “how many of these orders can I credit back to an ad someone saw or clicked.” GA4 answers “which clicks it saw should share credit for this key event,” and by default it splits that credit with data-driven attribution. Its Traffic acquisition report works differently again: it files each session under its last non-direct click. Those are different definitions, so the totals won’t line up. Expecting them to is the mistake, not the gap itself.

I treat Shopify as the ledger. The order count inside the Shopify admin is the number no platform can overrule. Meta and GA4 are both attempting to attribute those orders, and each uses its own rules to do it. So the first move is never to ask which platform is right. It’s to ask how far apart they’re and whether that distance is explainable.

The band I hold Meta to is 10 to 30 percent above GA4’s paid-social conversions, wider on stores with a high iOS share. Inside that band, the numbers are doing their job. Outside it, something is broken.

The three reasons the numbers diverge

Attribution windows

Meta’s default is a 7-day click, 1-day view window. A person clicks your ad Monday, comes back through a Google search Thursday, and buys. Meta still claims that order inside its 7-day window. GA4 saw both visits. Its session report files the order under organic search, the last non-direct click, and its data-driven model gives Meta a share at most. Same order, two different owners. Multiply that across a few hundred orders and the totals drift apart with nothing actually wrong.

View-through conversions widen the gap further. Meta counts a conversion when someone saw the ad and didn’t click, then bought within a day. GA4 has no concept of that order being Meta’s. So Meta will almost always report more conversions than GA4 credits to paid social.

Modeling and the iOS gap

Since iOS 14.5, Meta fills part of what it can’t observe with statistical modeling. When the pixel and Conversions API can’t tie an order to a person, Meta estimates it. Ads Manager doesn’t show you which conversions were modeled, so you can’t audit that share line by line. Read Meta conversions as directional, not as ledger truth.

GA4 models too, mostly for visitors who decline consent when Consent Mode is on. Neither platform’s number is the ledger. The store’s order record is.

Deduplication and double firing

This is the one that signals a real problem. If your Meta pixel and your Conversions API both fire a purchase and they aren’t deduplicated by a shared event_id, Meta counts the same order twice. The same thing happens in GA4 when a purchase event fires on both the thank-you page and a server-side tag without a transaction_id to dedupe against. On one store I audited, Meta’s 2024 Conversions API auto-setup was still firing beside a newer server-side build. Both sent every purchase, the event IDs didn’t match, and Meta counted each order twice for six months. Meta reliably drops the duplicate when the browser and server events share the same event_id and event name within 48 hours. When the platform total is higher than your Shopify order count for the period, double firing is the first thing to rule out.

How to read the gap in 15 minutes

Pull five numbers for the same thirty-day window and put them in one row of a spreadsheet:

  1. Google Ads conversions
  2. Meta conversions
  3. GA4 paid-channel conversions, split into paid search and paid social
  4. Shopify paid orders
  5. Shopify revenue after discounts, before refunds

Now check three relationships. Meta should run higher than GA4’s paid-social number, inside that 10 to 30 percent band. GA4’s paid-channel conversions should land within 15 percent of the Google Ads plus Meta sum, and within 20 percent of Shopify’s paid orders. Compare revenue gross to gross. The value each platform receives should be the order subtotal after discounts, before tax and shipping, in one currency, with the order ID, and refunds and cancellations get handled separately. If all three hold, your tracking is healthy and the divergence is just the platforms doing their jobs differently. Stop there.

If either relationship breaks, you have a tracking problem, not a performance problem, and chasing it through bid changes will waste budget. The two failure shapes are the platform reporting more than Shopify (double counting or undeduplicated events) and the platform reporting far less than Shopify (a tag that stopped firing, a consent banner blocking the pixel, or a checkout the tag never sees).

When the gap is a real problem

A few patterns tell me to stop reading and start auditing:

  • The platform total exceeds the Shopify order count for the same period. That’s double counting, not strong performance.
  • The gap is widening week over week with no change in iOS share or channel mix. Something in the tracking stack drifted.
  • GA4 paid conversions collapsed after a theme update, an app install, or a consent-banner change. The tag is firing in fewer sessions than it used to.
  • Meta conversions are flat while Shopify orders climb. The Conversions API may have lost its match quality, and Meta is modeling blind.

For a sense of what a sane scoreboard looks like, I put the platform claims next to the order record on one store I manage, August 17 to October 14, 2026. Google Ads claimed 0.83 purchases per online order and Meta claimed 0.07, so together they claimed fewer sales than the store made. That passes the first check. One in eight of Google’s claims still came from a duplicate purchase action, which is why a believable total isn’t proof. The full comparison is its own answer. It’s one store, so read it as a worked example rather than a rate.

The fix lives in the deduplication contract between the pixel, the Conversions API, and the GA4 tag, plus the reconciliation back to Shopify. My Tracking Stack reference covers both. My free ads audit is where I check this against your real account, and the free 25-page Setup Checklist covers the conversion settings you can check yourself first.

The honest read

GA4 and Meta not matching is the normal state of a healthy account. Two platforms, two attribution definitions, two amounts of modeling. The job isn’t to force them into agreement. It’s to know the size of the gap you should expect, watch it over time, and treat Shopify as the number that settles every argument. When the gap stays inside the band, leave it alone. When it breaks the band, fix the tracking before you touch a single bid. The wasted ad spend hub walks through the rest of the leaks.

When to bring me in

Bring me in when Google Ads, Meta and your store report different numbers for the same sales, when a purchase or lead event stopped firing after a site change, or when you can’t say which number to trust.

I'm Conner Crowe, and I write every audit myself. Send the free audit request and add me as a read-only user, and within 24 hours of access you'll have a written read on which numbers to trust and what to fix first. No call needed, and nothing in your account or store changes.

Request a free Google Ads audit

See how I fix conversion tracking.

Tools for this diagnosis

All my free tools

Related questions

Back to the full conversion tracking: the diagnosis library

Want your tracking checked?

Same check,
run on your tracking.

Add me as a read-only user and I'll write the audit myself: which of your numbers to trust and what to fix first, 5 to 7 pages, back within 24 hours of access. No call needed. If you'd rather talk first, a call is open too.