Why doesn’t Meta Ads ROAS match GA4 revenue?
Learn why Meta Ads ROAS and GA4 revenue disagree, how to align their scopes and attribution rules, and which metric should guide campaign versus business decisions.

Quick answer
Meta Ads and GA4 rarely report the same revenue or ROAS because they assign credit differently. Reconcile spend and purchase value separately, align the reporting scope, then trace mature orders before deciding whether the gap is normal attribution or broken measurement.
Quick answer: the same sale can receive different channel credit
Meta Ads ROAS and GA4 revenue rarely match because they are not measuring the same claim. Meta reports purchase value it can attribute to eligible ad interactions under its attribution setting. GA4 assigns ecommerce revenue through its own event collection, identity, consent, session, channel, and attribution rules. One order can therefore appear in both systems with different dates or campaign credit—or appear in only one.
Reconcile the numerator before comparing the ratio. Confirm that Meta spend is complete, then compare Meta-attributed purchase value with GA4 purchase revenue under aligned dates, time zones, currencies, domains, transaction statuses, and campaign scope. Trace a mature sample of transaction IDs across both systems. The goal is not forced equality; it is to explain enough of the gap to choose the right metric for campaign optimization and the right source for commercial reporting.
- User symptom: Meta reports a different ROAS or purchase value than GA4 for apparently the same campaigns.
- Control level: cross-system revenue collection, identity, attribution, campaign mapping, and report scope.
- Time grain: completed days and mature purchase cohorts, not live intraday dashboards.
- Decision produced: repair measurement, document a normal attribution gap, or change which metric guides media versus business decisions.
Keep this reconciliation separate from nearby problems
This diagnosis owns the revenue-credit path: why two marketing systems assign different purchase value to Meta traffic and therefore calculate different returns. It is different from Meta clicks not matching GA4 sessions, which concerns traffic denominators and session creation. It is also different from UTMs showing the wrong GA4 campaign, where sessions exist but their campaign names or source classification are wrong.
A Meta-versus-Shopify purchase mismatch starts from platform-attributed purchases versus source-of-truth store orders. A ROAS drop while total revenue stays flat asks whether media efficiency or business economics changed. Here, the specific task is to reconcile Meta-attributed revenue with GA4-attributed revenue without assuming either attribution model represents total incremental value.
- Clicks versus sessions: traffic handoff and analytics sessionization.
- Wrong GA4 campaign: UTM persistence and source classification.
- Meta purchases versus store orders: attributed outcomes versus source transactions.
- Meta ROAS versus GA4 revenue: cross-platform purchase-value credit and denominator alignment.
- Reported ROAS versus profit: margin, refunds, costs, and commercial economics.
Write out both formulas before opening another dashboard
Meta purchase ROAS is Meta-attributed purchase value divided by Meta spend. A GA4-based Meta return is GA4 revenue credited to the chosen Meta source or campaign divided by the matching Meta spend. The spend denominator may be identical while the revenue numerator differs substantially. Comparing two labels called ROAS without writing out those inputs hides the actual disagreement.
Create a small reconciliation table with Meta spend, Meta-attributed purchase value, GA4 gross purchase revenue, GA4 refunded or net revenue if available, transaction count, and the resulting ratios. Keep currency conversion explicit. If an agency dashboard imports spend after fees or applies a different exchange rate, even the denominator can diverge.
- Meta ROAS = Meta-attributed purchase value / Meta media spend.
- GA4 channel return = GA4 revenue credited to Meta traffic / matching Meta media spend.
- Blended MER = total business revenue / total marketing spend; it answers a different question.
- Contribution return = net or contribution profit / spend; it is closer to economics but needs cost data.
- Never compare ratios until both numerator and denominator definitions are documented.
Freeze a like-for-like reporting scope
Use completed dates and one stable account or campaign cohort. Record the Meta ad account time zone, GA4 property time zone, currency, attribution setting, reporting identity, included domains, filters, transaction status rules, and campaign IDs. In GA4, decide whether you are reviewing first-user, session, or event-scoped acquisition; they can assign the same purchase to different channels.
Match campaigns with immutable IDs preserved in URL parameters or a durable custom dimension where possible. Names change, and broad source filters can accidentally include organic social, referral traffic, or other paid social platforms. Compare total purchase value before adding campaign, device, or landing-page segments so filters do not masquerade as attribution loss.
- Align date range, account scope, time zones, currency, and campaign IDs.
- Use the same purchase event and clearly define gross, tax, shipping, discounts, refunds, and cancellations.
- Hold Meta attribution settings and GA4 attribution/reporting identity constant during the comparison.
- Include cross-domain checkout and payment-provider domains in the journey map.
- Allow recent purchases enough time for delayed event processing and attribution updates.
Trace mature transaction IDs through both systems
Choose a sample of completed, non-test orders old enough for reporting to settle. Start with the commerce backend, then find the matching transaction ID and value in GA4 and the corresponding browser or server purchase event sent to Meta. Record event timestamps, campaign identifiers, landing parameters, consent state, currency, value, browser-server event IDs, and whether the customer had multiple marketing touches.
This record-level bridge separates collection failure from attribution disagreement. If GA4 never received the purchase, inspect tag execution, consent, cross-domain checkout, and ecommerce payloads. If both systems received it but only Meta claims ad credit, compare lookback windows, view-through eligibility, modeled data, identity, and the buyer's other sessions. If values differ for the same transaction, inspect tax, shipping, discount, currency, and item-value logic.
- Missing from GA4: analytics event, consent, checkout-domain, or payload problem.
- Missing from Meta: Pixel or Conversions API delivery, matching, deduplication, or eligibility problem.
- Present in both but credited differently: attribution model, lookback, identity, or multi-touch journey.
- Same transaction with different value: currency, tax, shipping, discount, refund, or item-calculation problem.
- Duplicate transaction: repeated event firing or unstable transaction and event IDs.
Diagnose the gap by mechanism, not by whichever dashboard is higher
Meta can report more revenue because it observes eligible ad views and clicks across its ecosystem, uses its selected attribution window, and may model outcomes where direct observation is limited. GA4 may credit the purchase to search, email, direct, or another session later in the journey. Conversely, GA4 can show more Meta-sourced revenue if valid sessions and purchases are collected but Meta cannot match the purchase event, the attribution window has expired, or campaign delivery data is filtered incorrectly.
Segment only after the base totals are stable. A mismatch concentrated by browser or region points toward consent and identity. A checkout-domain concentration suggests cross-domain or referral handling. A campaign concentration suggests missing IDs, inconsistent UTMs, or different attribution eligibility. A sudden date-specific break points toward a release, consent change, event edit, or reporting configuration change rather than ordinary model disagreement.
- Attribution: windows, click versus view credit, model choice, and competing channel touches.
- Collection: tag coverage, JavaScript failures, Conversions API delivery, consent, and blocked storage.
- Identity: cross-device journeys, browser restrictions, user-ID coverage, and event matching.
- Classification: UTMs, redirects, channel groups, renamed campaigns, and missing campaign IDs.
- Value logic: refunds, subscriptions, tax, shipping, discounts, currency conversion, and duplicate events.
Choose the source of truth for each decision
Use Meta reporting to understand how Meta's delivery system is allocating credit and learning within its configured attribution rules. Use GA4 to analyze observed web journeys and compare channels under a common analytics framework. Use the commerce backend or finance system for actual orders, refunds, net revenue, and profit. None of these should silently replace the others.
For campaign changes, judge Meta signals alongside verified transaction quality rather than optimizing to the lower or higher dashboard by default. For cross-channel allocation, use a documented analytics or warehouse view plus incrementality evidence. For financial planning, use backend net revenue and margin. Maintain a normal reconciliation range; investigate when the gap changes materially, not merely because it exists.
- Delivery decisions: Meta attribution plus stable downstream quality checks.
- Journey analysis: GA4 sessions, paths, landing pages, and channel reports.
- Commercial truth: backend transactions, refunds, net revenue, margin, and customer status.
- Budget allocation: blended economics and incrementality, not one platform's self-attributed ROAS alone.
- Monitoring: alert on changes in the reconciliation gap by date, device, region, and campaign.
How an AdSpecIt-style audit helps reconcile Meta and GA4
An AdSpecIt-style audit can establish the Meta side of the comparison by reviewing attribution settings, purchase-event configuration, Pixel and Conversions API health, deduplication, value and currency consistency, campaign IDs, account time zone, spend allocation, and unusual performance changes. That account-wide context shows whether the discrepancy clusters around a campaign, device, placement, event setup, or recent edit.
The useful output is a prioritized reconciliation plan: define both formulas, freeze the reporting scope, compare mature totals, trace transaction IDs, classify the residual, repair the responsible layer, and assign a source of truth to each decision. That gives agencies and ecommerce teams a defensible answer when Meta ROAS and GA4 revenue disagree—without forcing two attribution systems to produce identical numbers.
Want AdSpecIt to audit your own account?
Connect your Meta Ads account, get a free score, and see the issues most likely to be hurting campaign performance before you spend more.
Get your free audit