Found in AI answers?Hire Theory Road
Theory Road.

Why Meta, Google Ads, GA4 and Shopify Report Different Sales.

Shopify says 100 orders. Meta claims 70, Google Ads claims 60, GA4 credits paid search with 40. None of them is broken. Each one answers a different question, and here is how we reconcile them on our own stores and on accounts we take over.

By October 18, 202610 min read

When Meta Ads, Google Ads, GA4 and Shopify report different purchase numbers, the gap almost always comes from ten things: different attribution windows, view-through credit, different attribution models, click date versus conversion date reporting, cross-device matching, modeled conversions, ad blockers and consent loss, duplicate counting, time zone and currency settings, and refunds that only Shopify subtracts. Shopify is the order ledger and should be your source of truth for revenue; the ad platforms and GA4 are attribution estimates, and you fix the gap by aligning dates, windows and deduplication, not by forcing the numbers to match.

Each system sees a different slice of the same purchase. Shopify records the order when checkout completes, in the store's time zone, and later subtracts returns. The Meta pixel and Conversions API send a Purchase event that Meta credits to an ad if the buyer clicked or saw one inside the ad set's attribution setting. The Google tag sends a purchase conversion that Google Ads credits to a prior ad interaction inside the conversion action's window and model. The GA4 tag sends a purchase event that GA4 credits across every channel, paid and organic. Four rulebooks, one order.

The 10 reasons the numbers differ.

  • Attribution windows: Meta's default credits a purchase up to 7 days after a link click, Google Ads defaults to 30 days after a click, and GA4 looks back 90 days for purchase key events, so the same order can fall inside one window and outside another
  • View-through credit: Meta's default setting includes purchases 1 day after someone only saw the ad, while Google Ads keeps most view-through conversions in a separate column and GA4 and Shopify never count a view
  • Attribution models: Google Ads and GA4 default to data-driven attribution, which splits credit across touchpoints, while Shopify's marketing reports default to last non-direct click, which gives one channel all of it
  • Click date versus conversion date: Google Ads' main Conversions column puts the sale on the day of the ad click, while Shopify, GA4 and Meta Ads Manager put website purchases on the day they happened
  • Cross-device matching: Meta and Google tie a phone ad click to a laptop purchase through logged-in users and modeling, while GA4 and Shopify usually see two separate visitors
  • Modeled conversions: Google Ads fills consent gaps with consent mode modeling and Meta uses statistical modeling where data is missing, so their totals include estimates that Shopify never sees
  • Ad blockers and consent loss: when a browser tag is blocked or consent is declined, the pixel or GA4 tag never fires, so platforms without a server-side feed under-report while Shopify still logs the order
  • Duplicate counting: every ad platform claims the orders it touched, so the platforms together exceed Shopify, and a missing event or transaction ID can double count inside one platform as well
  • Time zones and currency: each account reports days in its own time zone and converts revenue at its own exchange rate, which shifts orders across midnight and changes reported value
  • Refunds and cancellations: Shopify records a reversal as a negative on the day it is processed, while ad platforms keep the original purchase unless you send an adjustment

How each platform counts a purchase.

These are the defaults as documented by each platform in October 2026. Every one of them can be changed in settings, so check what your account actually uses before you compare.

Default conversion counting in Meta Ads, Google Ads, GA4 and Shopify
SettingMeta Ads ManagerGoogle AdsGA4Shopify
What it countsPurchases it attributes to Meta adsConversions it attributes to Google adsPurchase key events from all channelsEvery completed order
Default modelStandard attribution, credit to Meta when a qualifying touch existsData-drivenData-drivenLast non-direct click (marketing reports)
Default click window7 days after a link click30 days (1 to 90 allowed)90-day lookback for non-acquisition key eventsNot applicable to order counts
View credit1 day after view, plus 1-day engage-through1-day view-through window, reported in its own column for most campaign typesNoneNone
Date a sale is reportedDate of the purchase for website conversionsDate of the ad click in Conversions; purchase date in Conversions (by conv. time)Date of the purchaseDate of the order
Modeled conversionsYes, where data is partial or missingYes, consent mode and cross-deviceYes, behavioral modeling with Blended reporting identityNo
RefundsNot subtractedNot subtracted unless you upload adjustmentsSubtracted only if you send a refund eventSubtracted on the day processed
Dedupe keyevent_id shared by pixel and Conversions APITransaction IDtransaction_idOrder ID

Meta changed its click definition in March 2026: click-through attribution now counts only link clicks, and conversions after shares, saves and other non-link engagement moved into engage-through attribution. If your Meta numbers shifted then, that is why.

How to find where the gap comes from.

Three tools, in this order. Start from the ledger and work outward.

Shopify first. Export orders for a closed date range from Orders, and note the store time zone in Settings, General. Exclude test, draft and point of sale orders if your ad tags only see the online store. This is your denominator.

Google Ads second. In Goals, Conversions, Summary, confirm which actions are Primary, their count setting, window and attribution model. Then in the campaign report add the Conversions (by conv. time) and Conv. value (by conv. time) columns so the dates line up with Shopify, and segment by Conversions, Conversion action to see whether two actions are counting the same purchase.

Meta and GA4 third. In Ads Manager, use the Columns menu to compare attribution settings side by side, which shows how much of the result is view-through. In GA4, open Advertising, then Attribution, then Attribution models to compare data-driven with paid and organic last click, and check Admin, Data display, Reporting identity to see whether modeled data is included.

Reconcile top to bottom.

Each step removes one source of difference. Stop when the remaining gap is explained.

Pick a closed date range and one time zone.
Use a full week that ended a few days ago, because GA4 data processing can take 24 to 48 hours and Google Ads conversions can arrive up to 90 days after the click. Set every tool to the same time zone, or compare weekly totals.
Count the tagged purchases, unattributed.
In GA4, look at total purchases for the range in the ecommerce purchases report, regardless of channel. Compare to Shopify online orders. A gap here is a tracking gap (blockers, consent, a broken thank-you page), not an attribution gap. Our GA4 conversions troubleshooting guide covers that layer.
Check for duplicates inside each platform.
Purchases or revenue above Shopify inside a single tool means double counting. In Google Ads, look for two Primary purchase actions, such as a Google tag action and an imported GA4 purchase. In Meta, check that browser and server events share an event ID. In GA4, confirm transaction_id is set and never an empty string.
Align the date basis.
Switch Google Ads to the by conv. time columns before comparing to Shopify or GA4. A campaign that looks weak this week in the default column often has conversions still arriving against last week's clicks.
Strip view-through and compare windows.
In Meta, compare the 7-day click result with the default setting. The difference is view-through and engage-through credit. In Google Ads, keep All conversions and View-through conversions out of the comparison unless you mean to include them.
Compare like models.
Put GA4's paid and organic last click next to Shopify's last click model for the same channel. Those two should be close. Data-driven numbers differ from both by design.
Net out refunds and currency.
Compare revenue after refunds only in Shopify, and convert ad platform values to the store currency at the same rate before you compute return on ad spend.
Conversion discrepancy symptoms, causes and fixes
SymptomLikely causeFix
Meta and Google together claim more sales than ShopifyBoth platforms credit the same ordersNormal; never sum platforms, use Shopify for totals
One platform alone reports more purchases than ShopifyDuplicate tags or no dedupe IDKeep one Primary action; share event_id or transaction ID
GA4 purchases well below Shopify ordersAd blockers, declined consent, or a missing purchase tagAdd server-side events; check the thank-you page tag
Google Ads last week keeps risingConversions reported on click dateUse the Conversions (by conv. time) column
Meta reports far more than GA4 credits to MetaView-through and engage-through credit, cross-deviceCompare 7-day click only; accept the rest as view credit
Daily totals off but weekly totals closeDifferent account time zonesAlign time zones or report weekly
Platform revenue above Shopify net salesRefunds not sent to ad platformsCompare gross to gross; upload adjustments if bidding on value
Google Ads jumps after enabling consent modeConsent mode modeling added estimatesExpected; note the change date in reporting

Which number to use for which decision.

  • Total revenue, profit and overall marketing efficiency: Shopify net sales divided by total ad spend
  • Shifting budget between campaigns or ad sets inside Meta: Meta Ads Manager, on a consistent attribution setting
  • Shifting budget between campaigns inside Google Ads: Google Ads Conversions, since it is the same data the bidding uses
  • Comparing channels against each other, including organic and email: GA4 with one model, read consistently over time
  • Whether a channel adds sales at all: a holdout or incrementality test, since none of the four reports measures what would have happened without the ads

The bidding systems learn from the events you send them, so the quality of those events matters more than matching reports. Server-side sending through the Meta Conversions API and enhanced conversions in Google Ads closes much of the blocker and cross-device gap. If you are weighing a third-party attribution tool to sit above all of this, our Triple Whale vs Northbeam comparison covers what they add.

What is normal and what is a red flag.

Some gap is built into the defaults. Meta credits a 1-day view by default and none of the other three do. Google Ads keeps counting for 30 days after a click by default, and up to 90 days if you extend the window. GA4 looks back 90 days for purchase key events. GA4 data can change for 24 to 48 hours after the day ends. Google Ads consent mode modeling only switches on once a domain reaches 700 ad clicks over 7 days per country, and GA4 behavioral modeling needs at least 1,000 events per day with analytics storage denied for 7 days plus 1,000 daily consented users on 7 of the last 28 days, so small accounts often see no modeled lift at all.

Red flags: any single platform reporting more purchases than Shopify has orders, GA4 purchases far below Shopify with no consent banner to explain it, a sudden step change on a day nobody touched the ads, or revenue per conversion that does not match your average order value. Those point to broken tags or duplicate actions, and the conversion tracking audit checklist is where we go next. If Meta alone collapses, start with why your Meta pixel is not firing.

Why does Meta show more purchases than Shopify?

Meta's default attribution setting credits purchases up to 7 days after a link click and 1 day after someone only saw the ad, and it matches buyers across devices. Other channels may also claim those same orders. If Meta alone reports more purchases than Shopify has orders in total, check for duplicate pixels or browser and server events without a shared event ID.

Why don't Google Ads conversions match GA4?

Google Ads reports conversions on the date of the ad click and gives credit only to Google ads, while GA4 reports on the date of the purchase and spreads credit across every channel. They can also use different windows and different tags. Compare Google Ads' Conversions (by conv. time) column to GA4's Google Ads traffic over the same closed range.

Which number should I trust for ROAS?

For total business efficiency, divide Shopify revenue by total ad spend. For decisions inside one platform, such as which campaign to scale, use that platform's own conversions on a consistent setting, because that is what its bidding optimizes against. Do not add Meta and Google Ads revenue together.

Why is GA4 lower than Shopify?

GA4 only counts purchases its tag records in the browser. Ad blockers, declined consent, a missing tag on the order status page, and orders created outside the online store all reduce it. Shopify records every order regardless. A gap that suddenly grows usually means a tag broke.

Do refunds reduce conversions in Meta or Google Ads?

Not on their own. Shopify subtracts a refund on the day it is processed, but Meta and Google Ads keep the original purchase. Google Ads accepts conversion adjustments and GA4 accepts a refund event, but you have to send them.

Work with us

Let’s talk about what’s next.

A short note on where the business is and where it needs to go. A senior partner replies within one business day.

t@theoryroad.com

Step 1 of 2

How can we help you get found?

What do you need help with?

Next: name, email and budget. That’s it.