Google Ads, Meta, GA4, and Shopify will never report the same revenue, and they were never designed to. Each one counts conversions on its own attribution window, credits itself for orders other channels also touched, and books them against a different date. Google Ads records a conversion against the day of the click. GA4 records it against the day the purchase happened. Meta counts what its pixel attributed within its own window. Your store counts orders. Four systems answering four different questions will produce four different answers, and the useful work is understanding the gap rather than closing it.
This is the single most common reason a marketing team loses confidence in its own reporting. Below are the six real causes, what changed in January 2026 when Meta removed two of its attribution windows, how large a discrepancy is actually normal, and which number belongs in a budget meeting.
How big a discrepancy is normal?
Industry reporting commonly puts the gap between platform-reported conversions and analytics-reported conversions at 20 to 50 percent. That is a wide band because it depends heavily on your channel mix, how much of your audience blocks tracking, and whether your campaigns lean on view-through credit. A gap inside that range is not a bug. What deserves attention is a gap that shifts sharply week over week without a matching change in how you are buying media.
Here is the rough hierarchy of how much revenue each system will typically claim for the same period:
| Source | What it counts | Typical position |
|---|---|---|
| Sum of all ad platforms | Every order each platform attributed to itself | Highest, often well above actual revenue |
| Meta Ads Manager | Orders its pixel attributed inside its window | High, inflated by view credit |
| Google Ads | Conversions inside the conversion window, booked to click date | High, shifted earlier in time |
| GA4 | Sessions and events it could observe and attribute | Lower, loses blocked and cross-device journeys |
| Shopify or Stripe | Orders and payments that actually settled | The truth for revenue |
Note the top row. Summing platform-reported revenue across channels is the one operation guaranteed to produce a number no system on the list agrees with, and it is also the most common thing done in a weekly report.
Why don't my Meta Ads and Shopify revenue match?
Meta counts an order if its pixel can tie that order to someone who interacted with a Meta ad inside the attribution window. Shopify counts the order once, full stop. Three things drive them apart. First, view and engaged-view credit: Meta may claim a sale from someone who never clicked. Second, tracking loss: browser restrictions, ad blockers, and consent choices mean the pixel does not fire for every buyer, which pushes Meta's number down while Shopify's stays complete. Third, overlap: the same customer often saw a Meta ad and clicked a Google ad, and both platforms book that order.
Currency handling adds a smaller but persistent drift. Meta converts values at the time of the event using its own rate, while your store settles at a different rate on a different day. On a store selling internationally that alone can move reported revenue by a percent or two.
What changed in Meta attribution in January 2026?
This is the change that caught a lot of teams by surprise. Effective 12 January 2026, Meta permanently stopped returning the 7-day view and 28-day view attribution windows from the Ads Insights API, along with every combined window built on them, such as 7-day click plus 28-day view. Meta announced the change on its developer blog in October 2025.
The windows that remain supported are 1-day click, 7-day click, 28-day click, 1-day engaged view, and 1-day view. In practice this means long view-through credit is gone: a sale from someone who saw an ad twelve days ago and bought without clicking no longer appears in your Meta reporting. Advertisers running heavy video or upper-funnel awareness campaigns were hit hardest, and industry reports describe conversion counts falling by double-digit percentages overnight with no change to campaigns, budgets, or targeting.
Meta also tightened historical availability at the same time. Unique-count field breakdowns and hourly breakdowns are now limited to 13 months of history, and frequency breakdowns to 6 months, though total values remain available for up to 37 months. If you keep year-over-year comparisons in a spreadsheet fed by the API, some of those comparisons quietly stopped being possible.
The practical consequence: if your Meta ROAS dropped in mid-January 2026 and you have been trying to diagnose a creative or audience problem since, check the attribution setting first. You may be comparing two different measurement regimes.
Why don't Google Ads and GA4 conversions match?
Two structural reasons, both by design.
The first is the conversion window. Google Ads uses a default click-through conversion window of 30 days, configurable from 1 up to 30, 60, or 90 days for Search and Display campaigns, plus a default engaged-view window of 3 days and a default view-through window of 1 day. If a customer clicks today and buys in 45 days, a default Google Ads setup never sees that sale. GA4 will record the purchase, but its acquisition reporting may well credit it to a different source by then.
The second is the date the conversion is filed under. Google Ads books a conversion against the date of the ad click. GA4 books it against the date the event happened. That means any date-range comparison between the two is offset by however long your buying cycle is, even when tracking is flawless on both sides. Look at a week where you launched a campaign on Monday and Google Ads will show conversions landing on Monday that GA4 shows landing on Thursday and Friday.
The six causes, ranked by how much damage they do
| Cause | What it does to your numbers | Can you fix it? |
|---|---|---|
| Overlapping attribution across channels | Two or three platforms claim the same order, inflating the combined total | No, but you can stop summing platform revenue |
| Different attribution windows | Each platform scoops a different slice of the same customer journey | Partly, by aligning windows where the platform allows it |
| Click date versus event date | Shifts conversions between reporting periods | No, it is how each system is built |
| Tracking and consent loss | Understates platform and analytics numbers, not store revenue | Partly, with server-side tracking and a clean consent setup |
| View and engaged-view credit | Adds conversions no click ever produced | Yes, by reporting on click-only windows |
| Currency and timezone settings | Small, persistent drift that never resolves | Yes, align timezone and reporting currency everywhere |
When a number genuinely looks wrong rather than merely different, the fastest diagnosis is to trace the figure back through every transformation between the ad platform and your warehouse before touching the campaign, because a broken join or a changed field name produces exactly the same symptom as an attribution shift and gets misdiagnosed as one constantly.
Which number should I actually trust?
Your store or billing system, because it counts money that arrived. Everything else is a model.
That does not make platform numbers useless. They are the right tool for the job they were built for: comparing one ad set to another inside the same account, on the same window, over the same period. Meta's ROAS is a perfectly good signal for deciding which Meta creative to scale. It is a bad signal for deciding whether Meta deserves more budget than Google, because the two figures were produced by different rules against overlapping populations.
For that second question you need one number computed across everything: total revenue divided by total ad spend. That is blended ROAS, and it has one property none of the platform figures have. It cannot be inflated by double counting, because there is only one revenue figure and it comes from your store. The same logic gives you blended CAC and MER. Our comparison of blended ROAS versus platform ROAS works through the arithmetic with a full example.
How to stop chasing the gap every month
Pick one set of rules and hold everything to it. In practice that means four decisions, made once and written down.
- Align what you can align. Same timezone, same reporting currency, same reporting week across every platform. This removes the drift that has no analytical value at all.
- Standardize the window you report on. Click-only where the platform offers it. Document it, so a change in Meta's defaults does not silently rewrite your history again.
- Never sum platform revenue. Report platform numbers per channel, and report one blended figure for the business. Two tiers, clearly labeled, no arithmetic between them.
- Reconcile to the store weekly. Total ad spend against total revenue from Shopify or Stripe. The moment blended ROAS moves, you have a real signal rather than an attribution artifact.
That is the reconciliation a good PPC dashboard should do for you rather than leave in a spreadsheet. MixedMetrics connects Google Ads, Meta Ads, and TikTok Ads read-only alongside Shopify, Stripe, and Klaviyo, keeps the channel tier and the business tier separate, and computes blended ROAS, blended CAC, and MER against revenue that actually landed. If you want the deeper background on how credit gets assigned in the first place, marketing attribution models explained covers the models each platform is running under the surface, and multi-channel attribution shows how the blended view sits alongside them.
The goal is not to make four systems agree. It is to know which one to believe for which question, and to stop rebuilding the same reconciliation by hand every Monday.
See how MixedMetrics works for your kind of team on the use cases page.
MIXEDMETRICS // GET STARTED
See this metric live across every channel
Connect your ad platforms, store, and billing through read-only connectors and watch blended ROAS, CAC, MER, LTV, and revenue by channel land in one live dashboard.