It depends on the size of the gap, but a mismatch is normal and expected—Facebook Ads and GA4 measure revenue with different attribution models and lose different sales along the way. Facebook credits itself for view-through and modeled purchases and usually passes only the product subtotal, while GA4 drops client-side events to ad blockers and consent declines and splits credit fractionally across channels. Treat neither as your revenue source of truth; reconcile both against Shopify's server-side order record, and expect a stable ratio, not a matching number.

If you have ever exported a week of Facebook Ads revenue, opened GA4, and found two numbers that disagree by hundreds of dollars, you are not looking at a bug. You are looking at two tools answering two different questions about the same sales.

This guide walks through exactly where the revenue gap comes from, how big a gap is healthy, and how to reconcile the two without chasing ghosts. It is the revenue-specific companion to our broader guide on reconciling your ecommerce data.

The short version: three tools, three revenue definitions

Facebook (Meta) reports the revenue its ads plausibly influenced. GA4 reports the revenue its tags managed to transmit, split fractionally across channels. Shopify reports the revenue that actually cleared checkout.

None of these is dishonest. They are measuring different things, so their revenue totals were never going to line up. Once you accept that, the job shifts from "make them match" to "understand the gap and keep it stable."

Why the two revenue numbers diverge

The causes split into two families: methodology gaps (both tools measure real sales differently, and no fix closes them) and tracking gaps (data is genuinely lost, and better plumbing narrows them).

1. They count different revenue components

This is the single most overlooked cause of a revenue mismatch, as opposed to a purchase-count mismatch. Shopify separates Gross, Net, and Total sales: gross is product price × quantity, net subtracts discounts and returns, and total adds shipping and tax on top.

The Meta Pixel and your GA4 tag can each be configured to pass a different one of those tiers as the purchase value. A common setup sends the subtotal only to Meta (no shipping, no tax) while GA4 receives the full order value including tax and shipping. If your purchase counts match but your revenue totals don't, this mismatch in what "revenue" means is almost always the reason.

2. Different attribution models

Meta credits itself for any purchase falling inside its attribution window after a click or a view of its ad. Meta's current default is a 7-day click plus 1-day view window (Foreplay; Jon Loomer). GA4's default is data-driven attribution, which splits one conversion's revenue fractionally across every touchpoint it saw.

So one $49 order might show as $49 of revenue in Meta (full credit, in-window) and, in GA4, only a fraction of that $49 landing under "Paid Social" with the rest spread across organic and paid search. Same sale, two very different revenue rows.

3. View-through conversions inflate Meta

With the default 1-day view window, Meta claims a purchase made within a day of someone seeing an ad they never clicked. GA4 has no view-through concept for another platform's ads. View-through is the biggest single reason Meta's revenue runs ahead of everyone else's. A 20–35% gap between Meta-reported purchases and Shopify orders is considered normal on the default window (Vaizle; TrackBee).

4. GA4 loses revenue to client-side blocking

GA4 runs on browser JavaScript, so ad blockers, Safari and Firefox tracking prevention, cookie-consent declines, and tabs closed before the thank-you page all silently drop purchase events. Field estimates put ad-blocker and consent-affected traffic at 10–25% of users (Audiense/Elevar). Every dropped event is revenue GA4 never records but Shopify still books server-side. A 15–30% GA4-under-Shopify purchase gap is normal; 40%+ signals a real tracking break (BlueFrog; Consentmo).

5. Modeled conversions

When Meta or GA4 cannot directly observe a purchase—because of an iOS opt-out, a blocked pixel, or a consent decline—they estimate it with a machine-learning model and report the estimated revenue as if it were counted. These are estimates of real-but-unobservable sales, not fabricated demand, but they explain why platform revenue can exceed what either tool actually saw.

6. Click-date reporting and refunds

Meta books revenue on the date of the ad click, not the purchase date. A Monday click that converts Thursday shows Monday's revenue in Meta and Thursday's in Shopify, desynchronizing any single-day comparison. And when a customer refunds, Shopify reduces its revenue while Meta and GA4 typically keep the original conversion—so their revenue stays inflated after refunds. Always compare on trailing seven- to fourteen-day windows, never single days.

A worked example

Say you run a print-on-demand store and drive a week of Meta traffic. Say your average order is $40 subtotal + $5 shipping + $4 tax = $49 total, and 100 real orders clear checkout. Here is how each tool reports the revenue for that identical week.

Shopify (server-side truth): 100 orders × $49 = $4,900 in total sales before refunds. Say eight buyers later refund, dropping net/total sales to roughly $4,508.

Facebook Ads Manager: it attributes about 70 purchases by window (55 click-through plus 15 view-through) and adds roughly 8 modeled ones, for about 78 attributed purchases. Because in this setup your pixel passes the subtotal only, each attributed purchase is valued at the $40 subtotal rather than the $49 total. Working the arithmetic: 78 × $40 = $3,120 in reported revenue—dated to the click, with the eight refunds never subtracted.

GA4: say ad blockers, consent declines, and closed tabs cost it roughly 20 purchases outright. Under data-driven attribution it then splits the surviving revenue fractionally, so "Paid Social" might show only a portion of the full order values—well under both Meta's $3,120 and Shopify's $4,508.

Four systems, one week of 100 orders, four different revenue numbers—and every one is internally correct. The order count and total sales in Shopify are your source of truth for how much revenue happened; Meta's number tells you how much its ads influenced; GA4 tells you how the modeled journey split.

How to reconcile instead of chasing zero

You cannot make Facebook Ads revenue equal GA4 revenue, and you shouldn't try. Here is what to do instead.

Anchor on Shopify. Shopify's server-side order record is the only number that reflects real, refunded, completed revenue. Compare both Meta and GA4 against Shopify, not against each other.

Line up your revenue fields. Decide whether your pixel and GA4 tag pass subtotal or total, and make them consistent. Much of a pure revenue gap disappears once both tools send the same tier of Shopify's Gross/Net/Total stack.

Track the ratio, not the delta. A steady "Meta revenue ≈ 1.3× Shopify Facebook-attributed revenue" is healthy. A ratio that suddenly jumps is your real alert—often a deduplication break between the Pixel and the Conversions API rather than a genuine revenue change.

If your order counts also disagree, or your ROAS looks off, those have their own mechanics—see our companion guides on why Facebook Ads orders don't match GA4, why Facebook Ads ROAS doesn't match GA4, and why Facebook Ads sessions don't match GA4.

The number none of these tools shows you: profit

Here is the part every SERP result skips. Even after you reconcile revenue, revenue is not the number that decides whether an ad is worth running. Two orders at the same $49 can carry wildly different product costs, shipping, and processing fees—so one is profitable and the other loses money, and no revenue dashboard can tell them apart.

That's the gap PodVector fills. It connects your Shopify, Meta Ads, Google Ads, Printify, Printful, and Stripe accounts and computes true per-order profit—revenue minus product cost, fulfillment, fees, and ad spend—on the same order record Shopify treats as truth. It is not a dashboard and not an analytics layer; it's a live data warehouse plus Victor, an AI operator who analyzes your reconciled data and proposes moves with your approval. Victor reads your ad data to explain a mismatch but does not touch your ad account—the actions he executes are Shopify-side. Start free with PodVector and see the per-order profit behind the revenue numbers.

When you're ready to fix the tracking underneath all of this, our guide to the best app for Google Ads pixel tracking on Shopify is the logical next step.

FAQs

Why is my Facebook Ads revenue higher than GA4 revenue?

Two forces push it up. Meta credits itself for view-through and modeled purchases that GA4 never attributes to paid social, and GA4 simultaneously loses purchase events to ad blockers and consent declines. The result is Meta reporting more attributed revenue while GA4 reports less transmitted revenue—a gap in opposite directions that widens the spread.

Is a revenue mismatch a sign something is broken?

Usually not. Some gap is structural and permanent. Use the benchmarks as a guide: a Meta-over-Shopify purchase gap of 20–35% and a GA4-under-Shopify gap of 15–30% are normal. Only a gap north of forty percent, or a sudden jump in a previously stable ratio, points to a genuine tracking break.

Will setting up the Conversions API make the revenue match?

No. CAPI recovers lost events—the tracking-gap half of the problem—but does nothing about the methodology gap: view-through, modeling, click-date reporting, and last-click versus window attribution. Even flawless tracking leaves a structural gap. And if your Pixel and CAPI send the same purchase without a shared deduplication key, Meta counts the revenue twice, per Meta's own dedup rules.

Which revenue number should I actually trust?

Shopify's, for how much revenue happened, because it is a server-side record of completed, refund-adjusted orders. Trust Meta's number for how much revenue its ads influenced, and GA4's for the modeled cross-channel journey. For whether an ad is worth running, trust none of them alone—you need per-order profit, which no revenue report contains.

Why does the revenue gap change from week to week?

Refund timing, the mix of view-through versus click-through buyers, click-date shifting revenue across week boundaries, and fluctuations in how much traffic runs ad blockers all move the gap. This is why you track a stable ratio over trailing windows rather than expecting a fixed dollar delta.