When Meta says 300 purchases, GA4 says 180 and Shopify says 240, none of them is necessarily wrong and none of them is “the” number: your store counts what happened, while GA4 and the ad platforms estimate what caused it, each with its own windows and blind spots. Here’s why they diverge, which number to use for which decision, and a monthly routine that keeps the gaps explainable.
Why the numbers will never match exactly
- Your store (or your CRM in B2B) records every real order from every channel. It knows nothing about ads.
- Ad platforms report conversions they can connect to their own ads, including ad views and modeled estimates.
- GA4 records what its tag saw, from users it was allowed to track, then splits credit across channels.
| Store or CRM | Ad platforms | GA4 | |
|---|---|---|---|
| What it counts | Every real order | Orders linked to its own ads | Purchases its tag recorded |
| Sees ad views | No | Yes, for its own ads | No for Meta and most others |
| Credit | None | Full credit to its own ads | Split across channels by model |
| Date used | Order date | Click or impression date by default | Purchase date |
| Main blind spot | Why people bought | Other channels and overlap | Opted-out and blocked users |
In the example, Meta’s 300 is higher than the store’s total of 240 orders. That’s the tell: platforms overlap. A customer who clicked a Meta ad, then a Google ad, then a Klaviyo email can be claimed by all three. GA4’s 180 sits below the store because some buyers were never visible to its tag.
The goal isn’t to make the numbers match. It’s to know why they differ and to notice when the gap changes.
Attribution windows and models
Every platform decides how long after an ad interaction a purchase still counts, and how to share credit between touches.
- Meta uses 7-day click and 1-day view as its standard setting. Meta has refined which interactions qualify over time, so check the definition in your own account.
- Google Ads sets a window per conversion action, commonly 30 days after a click and adjustable up to 90, with data-driven attribution as the default. Credit only moves between Google’s own ads.
- GA4 attributes key events (its current name for conversions) across all channels, data-driven by default, with lookback windows set in Admin. The Traffic acquisition report uses session source instead of your model, so two GA4 reports can disagree about the same channel.
A simple example: a shopper clicks a Meta ad on Monday, then on Thursday clicks your Google brand ad and buys. Meta counts one purchase. Google Ads counts one. GA4 gives most or all of the credit to the Google visit, depending on the model. The store records one order.
Reporting dates shift the month
Meta reports conversions against the impression or click date by default, and Google Ads’ main Conversions column uses the click date. GA4 and your store use the purchase date. A click on March 29 that converts on April 3 lands in March for the platforms and April in GA4, and platform numbers for late March keep rising into April.
View-through and modeled conversions
These two are the main reason platform totals can exceed real orders.
View-through
A view-through conversion is a purchase by someone who saw an ad but didn’t click it. Meta’s 1-day view window can claim buyers who were already on their way, especially with heavy retargeting or strong existing demand. GA4 never sees Meta impressions, so these can’t appear there as Meta.
Google Ads keeps pure view-through conversions in a separate column, but engaged-view conversions from video ads can count in the main Conversions column. In Meta, use the compare attribution settings option to split click from view. If a large share of purchases are view-only, read that campaign’s ROAS with caution.
Modeled conversions
When a platform can’t observe a conversion, because of an iOS tracking opt-out, declined consent or a device switch, it estimates. Meta and Google Ads both include modeled conversions in reporting, and GA4 can apply behavioral modeling when consent mode runs in advanced mode and the property meets Google’s eligibility thresholds.
Modeled conversions are estimates, not orders. You won’t find them in your order export or reconcile them one by one.
Consent, ad blockers and cookie loss
This is why GA4 usually undercounts compared with your store.
- Consent banners. Where consent is required, users who decline analytics cookies aren’t tracked normally. With consent mode in advanced mode, Google gets cookieless signals it can model from; in basic mode, nothing is sent before consent.
- Ad blockers and privacy browsers. Many block the GA4 tag and Meta Pixel outright, so those purchases never reach either tool.
- Cookie limits. Safari caps cookies set by client-side scripts at seven days, and shorter in some cases. A buyer who returns after that looks new, and the original source is lost.
- Payment redirects. PayPal, 3-D Secure and buy-now-pay-later flows can send users back as a new referral. Add those domains to “List unwanted referrals” in your GA4 data stream settings.
- Orders with no browser session. Subscription renewals, draft and phone orders, and some upsell apps create real orders that no pixel ever sees.
Server-side tagging, the Conversions API and enhanced conversions recover part of what’s lost. It narrows the gap; it doesn’t change attribution logic.
Timezone, currency and deduplication issues
These are the boring causes, and when I audit accounts they explain more of the gap than people expect.
Timezones
Your Meta ad account, Google Ads account, GA4 property and store each have a timezone. If the store runs on New York time and GA4 on UTC, every day and month boundary cuts differently. GA4’s timezone can be changed in Admin; ad account timezones are often hard or impossible to change after setup. Align what you can and write down the offsets.
Currency and revenue definitions
- GA4 converts revenue to the property’s reporting currency using daily exchange rates. If the currency parameter is missing or wrong, revenue can be dropped or misstated.
- Multi-currency stores need to send the currency the customer actually paid in.
- Revenue means different things: GA4 purchase value may include tax and shipping, the store’s net sales deduct discounts and refunds, and ad platforms usually keep the original purchase after a return. Pick one definition and compare like with like.
Deduplication
- Meta Pixel plus Conversions API sends the same purchase twice by design. Meta deduplicates when the event name and event ID match; if the ID is missing or different, purchases get counted twice. Check deduplication in Events Manager.
- GA4 uses the transaction ID to deduplicate purchases. If the ID is blank or differs between tags, a thank-you page that fires on reload or two tags installed (theme code plus Tag Manager plus an app) can inflate purchases.
- Google Ads double counts if you import the GA4 purchase key event and also run the Google Ads purchase tag, with both set as primary. Keep one primary purchase action.
Which number to use for which decision
No number is right for everything. Each is right for something.
| Decision | Number to use | Why |
|---|---|---|
| How much did we sell? | Store or CRM | The only complete count |
| Raise or cut total ad budget | MER or blended CAC from store revenue and total spend | Immune to attribution overlap |
| Which ad sets, creatives or audiences to scale | Each platform’s own reporting | Same model across everything inside it; it’s also what the algorithm learns from |
| Keyword and campaign bidding in Google Ads | Google Ads conversions | Smart Bidding uses them |
| Shift budget between channels | GA4 trends, confirmed by incrementality tests | One model across channels, then proof of causation |
| Landing pages and funnel drop-off | GA4 | Built for on-site behavior |
Meta’s numbers may be inflated, but they’re inflated consistently across your ad sets, so they’re fine for ranking one ad set against another. The expensive mistake is adding up every platform’s reported revenue and presenting it as marketing revenue. For budget-level decisions, MER vs ROAS explains why the blended number should lead.
For B2B lead gen, swap the store for your CRM: platform leads, GA4 form submissions and CRM contacts disagree the same way, so run budget decisions on CRM pipeline.
A monthly reconciliation routine
Keep a sheet with one row per month and fill it on a fixed day, such as the 10th, so late-reported conversions have mostly landed.
- Pull the numbers. Store orders and net revenue, GA4 purchases and revenue, each platform’s purchases, revenue and spend, all for the same dates.
- Calculate a capture rate. GA4 purchases divided by store orders.
- Calculate an overlap ratio. All platform-claimed purchases added up, divided by store orders.
- Split Meta click from view. Track the view-through share over time.
- Compare with your baseline. Use the trailing three to six months. Stable ratios mean the gaps are structural; a sudden move means something changed.
- Log changes. Consent banner updates, checkout edits, new apps, attribution setting changes and big promotions all move the ratios.
As an example with round numbers: if GA4 has captured roughly three of every four store orders for six months and suddenly shows one in two while store orders hold steady, demand didn’t fall. Something broke. Fix tracking before touching budgets.
Before closing the month, check:
- Revenue compared on one definition and timezone offsets noted
- Capture rate and overlap ratio within their normal ranges
- Transaction IDs unique in GA4 and Meta deduplication working
- One primary purchase action in Google Ads
- Payment gateway domains excluded as referrals
- Changes logged next to the numbers
This sheet is usually the first thing I build in a marketing attribution engagement. A team that can explain its gaps stops arguing about which dashboard is right and starts making decisions.
Get it built
If your numbers disagree and nobody can explain why, the Growth Audit is $1,500 fixed and credited if we continue, and it starts with tracking and attribution. See pricing or get in touch.