ROAS Accuracy on Shopify: Why Your Ad Platforms and Shopify Disagree

ROAS Accuracy on Shopify: Why Your Ad Platforms and Shopify Disagree

TL;DR

Shopify reports actual collected revenue. Each ad platform reports the revenue it claims credit for under its own attribution rules. Meta uses a 7-day click / 1-day view window. Google Ads uses a 30-day click window. TikTok uses a 28-day click / 1-day view window. GA4 uses data-driven attribution that distributes fractional credit across touchpoints. Each platform receives the same order value from your store, but each decides independently which orders to claim. The result is that summing platform-reported revenue always exceeds Shopify's total. This is not a bug. It is the expected behavior when multiple attribution systems evaluate the same set of orders. Server-side tracking fixes event delivery (making sure platforms receive the purchase event), but it does not change how each platform attributes that event to its ads.


Key Takeaways

  • ROAS = revenue attributed to ads / ad spend. Each platform uses different rules for "revenue attributed to ads," which is why ROAS differs across platforms for the same orders.
  • Meta defaults to 7-day click / 1-day view attribution. Google Ads defaults to 30-day click. TikTok defaults to 28-day click / 1-day view. These windows overlap, so the same order can be claimed by multiple platforms simultaneously.
  • GA4 uses data-driven attribution that distributes fractional credit (for example, 0.3 conversions to paid social and 0.7 to paid search for one order), which is why GA4's numbers rarely match any single platform's.
  • All platforms receive the same revenue value for each order (parsed from order.total_price), so revenue differences are attribution differences, not data differences.
  • Shopify is the financial source of truth. Ad platforms are the source of truth for relative channel performance. GA4 is the best available tool for cross-channel comparison. These are three different questions with three different correct answers.

What ROAS actually measures

ROAS is a ratio: revenue attributed to ads divided by the amount spent on those ads.

$$ROAS = \frac{Revenue\ Attributed\ to\ Ads}{Ad\ Spend}$$

Ad spend is straightforward. You spent $1,000 on Meta ads last month. That number is the same everywhere.

Revenue attributed to ads is where the disagreement starts. Each platform has its own definition of "attributed to my ads." That definition depends on three things: the attribution window (how far back the platform looks), the matching logic (how it connects a user to an ad interaction), and the counting method (whether it claims full credit or shares it).

When merchants say "my ROAS is 4x," the real question is: according to which platform?


How each platform attributes revenue

Meta (Facebook/Instagram)

Default attribution window: 7-day click, 1-day view.

This means Meta claims credit for a purchase if the buyer clicked a Meta ad within 7 days before purchasing, OR if they viewed a Meta ad within 1 day before purchasing. "Viewed" means the ad appeared on screen for at least 1 second.

The 1-day view component is significant. A customer sees your Instagram ad on Monday, does not click it, then searches your brand name on Google on Tuesday and buys. Meta claims full credit for that purchase because the customer viewed the ad within 1 day. Google Ads also claims credit because the customer clicked a search ad. Shopify records one order, but two platforms each report the full revenue.

Meta's matching logic uses Advanced Matching: hashed email, phone, name, and other identifiers sent with the purchase event. Server-side events via the Conversions API (CAPI) send these identifiers directly, improving match rates. Higher match rates mean more conversions are attributed to Meta ads, which increases Meta-reported ROAS.

Google Ads

Default attribution window: 30-day click.

Google Ads claims credit for a purchase if the buyer clicked a Google ad within 30 days. No view-through attribution by default (though it is available for YouTube and Display campaigns).

The 30-day window is the longest of the major platforms. A customer clicks a Shopping ad on May 1, browses other sites for three weeks, then returns directly to your store and buys on May 25. Google Ads claims full credit.

Google Ads matching depends on click IDs: gclid for first-party clicks, gbraid and wbraid for privacy-restricted environments (iOS, consented browsers). Enhanced Conversions add hashed customer data as a secondary matching signal. The Enhanced Conversions guide covers how this works on Shopify.

TikTok

Default attribution window: 28-day click, 1-day view.

TikTok's window sits between Meta and Google Ads in length. Like Meta, it includes view-through attribution (1-day view), which means the same order can be claimed by both Meta (if the customer saw a Meta ad) and TikTok (if they also saw a TikTok ad) on top of Google Ads (if they clicked a search ad).

TikTok's Events API (its equivalent of Meta's CAPI) uses hashed identifiers for matching. Server-side events improve match quality but, like Meta, higher match rates increase the number of conversions TikTok claims credit for.

GA4

Default attribution model: Data-driven attribution (DDA).

GA4 does not use a simple "last click wins" or fixed-window model by default. Data-driven attribution uses a statistical model to distribute credit across all touchpoints in the conversion path. A single $100 order might be attributed as 0.3 conversions to paid social, 0.4 to organic search, and 0.3 to direct. The total adds up to 1.0 conversions and $100 in revenue, but the credit is spread across channels.

This is fundamentally different from how Meta, Google Ads, and TikTok report. Those platforms each claim the full purchase. GA4 splits it. This is why GA4's reported revenue for any single channel is almost always lower than what that channel's own dashboard shows.

GA4 uses the attribution models explained in the attribution guide to make these calculations.


Why the numbers always add up to more than Shopify

Take a concrete example. Your store did $10,000 in revenue last month on Shopify.

  • Meta reports $7,200 in attributed revenue (ROAS 3.6x on $2,000 spend).
  • Google Ads reports $5,500 in attributed revenue (ROAS 5.5x on $1,000 spend).
  • TikTok reports $3,000 in attributed revenue (ROAS 6.0x on $500 spend).

Total platform-reported revenue: $15,700. Shopify's actual revenue: $10,000. The platforms claim 57% more revenue than actually existed.

This is not fraud, and it is not a tracking error. It is what happens when three systems with overlapping attribution windows independently evaluate the same set of orders. A customer who saw a TikTok ad, saw a Meta ad, and clicked a Google ad before purchasing gets that purchase claimed by all three platforms.

GA4, using data-driven attribution, would report the same $10,000 total (because it distributes credit rather than duplicating it), but would split it differently than any individual platform does. GA4 might show $4,000 for paid social, $3,500 for paid search, $1,500 for organic, and $1,000 for direct.


What server-side tracking does (and does not) fix

Server-side tracking fixes event delivery. It ensures that purchase events reach each platform even when ad blockers, ITP, or redirect flows (Shop Pay, PayPal) prevent the browser pixel from firing.

Without server-side tracking, some purchases simply never reach the ad platform. The platform underreports conversions and ROAS looks worse than reality. Adding server-side tracking closes this gap, often increasing reported conversions by 10-30% depending on the store's audience mix and ad blocker exposure.

What server-side tracking does NOT fix is the attribution disagreement between platforms. After adding server-side tracking, Meta, Google Ads, and TikTok will all receive more purchase events. Each will claim credit for more revenue under its own attribution rules. The total across platforms will still exceed Shopify's number. The gap may actually increase because more orders are now successfully delivered to all platforms, giving each one more opportunities to claim credit.

This is important to understand before you add server-side tracking and expect the numbers to converge. They will not converge. Each platform will report more accurately (fewer missed conversions), but they will still disagree with each other because they use different attribution rules.


How deduplication works across platforms

Each platform has its own mechanism for preventing the same order from being counted twice within its own system (browser pixel + server-side event both firing for one order). The mechanisms are different:

GA4: Deduplication is based on a deterministic combination of client_id and session_id. If both a browser pixel and a Measurement Protocol event fire for the same purchase with the same client_id and session_id, GA4 deduplicates based on transaction_id.

Meta: Both the browser pixel and CAPI send an event_id with each purchase event. If both fire for the same order with the same event_id, Meta deduplicates to one conversion. WeltPixel Conversion Tracking stores this shared event ID in the order metafield so both the browser and server paths reference the same identifier.

TikTok: Similar to Meta. Both browser and Events API events carry a shared event_id. Matching IDs are deduplicated to one conversion. The same metafield-based approach ensures consistency.

Google Ads: Deduplication relies on click IDs (gclid, gbraid, wbraid) captured at the click and matched at conversion. Enhanced Conversions add hashed customer data as a secondary signal.

This deduplication happens within each platform. There is no cross-platform deduplication. Meta does not know about your Google Ads conversions, and Google Ads does not know about your Meta conversions. Each platform independently decides which orders to claim.


A practical framework for interpreting ROAS

Instead of trying to find the "right" ROAS number, use each data source for what it does best.

Shopify = financial truth. Shopify's revenue is the actual money collected. Use it for financial reporting, cash flow planning, and any context where you need the real number. Shopify does not attribute revenue to campaigns, which is a feature, not a limitation. It prevents the double-counting problem entirely.

Ad platform ROAS = relative channel performance. Meta's reported ROAS is useful for comparing one Meta campaign against another Meta campaign. Google Ads ROAS is useful for comparing one keyword against another keyword. Do not compare Meta ROAS to Google Ads ROAS directly, because they use different attribution windows and matching logic. A 3x ROAS on Meta and a 5x ROAS on Google Ads does not mean Google is outperforming Meta.

GA4 = cross-channel comparison. GA4 applies the same attribution model to all channels. This makes it the best available tool for comparing paid social performance against paid search performance against organic. GA4's data-driven attribution is not perfect, but it applies the same rules to everyone, which is the prerequisite for a fair comparison. The revenue reconciliation process covers how to use GA4 and Shopify together.


How to use this in practice

Monthly reconciliation: Compare total Shopify revenue to the sum of all platform-reported revenue. Calculate the overlap ratio (sum of platforms / Shopify). Track this ratio monthly. If it spikes, investigate whether a new campaign type (like broad/view-through) is inflating one platform's claims.

Campaign optimization: Use within-platform ROAS for within-platform decisions. If your Meta retargeting campaign shows 8x ROAS and your Meta prospecting shows 2x, that comparison is valid because both use the same attribution rules. Use GA4 for cross-channel budget allocation decisions.

Report to stakeholders: Lead with Shopify revenue as the total. Present platform-specific metrics as supplementary, with a note that platform-reported revenue overlaps. Show GA4's attribution breakdown as the cross-channel view.


FAQ

If I add server-side tracking, will my ROAS go up?

Probably, yes. Server-side tracking ensures more purchase events reach each platform. More attributed conversions means higher reported revenue for the same ad spend, which means higher ROAS. This does not mean your ads suddenly became more effective. It means the measurement improved. You were already generating those conversions; the platform just was not seeing them.

Which ROAS number should I use for budget decisions?

Use GA4 for cross-channel budget allocation (shift spend from the channel with 2x DDA-attributed ROAS to the one with 5x). Use platform-specific ROAS for within-channel optimization (shift spend from the ad set with 1.5x to the one with 4x). Use Shopify revenue for overall business health.

Is a 3x ROAS on Meta the same as a 3x ROAS on Google Ads?

Not directly comparable. Meta's 3x includes 1-day view-through conversions (people who saw but did not click your ad). Google Ads' 3x is click-only by default. The Meta 3x likely includes conversions that Google Ads would not count, and vice versa. Compare them only through GA4's unified attribution model, as covered in the Meta Event Match Quality guide.


Read Next


Sources

(No external sources cited.)

Ready to upgrade your tracking?

Server-side tracking for Magento and Shopify — accurate data, better attribution, full privacy compliance.