How to Calculate Shopify ROAS and Why Platforms Disagree

How to Calculate Shopify ROAS and Why Platforms Disagree

TL;DR

The ROAS formula is simple: revenue divided by ad spend. The hard part is that "revenue attributed to ads" means something different inside Meta, Google Ads, GA4, and Shopify, so you get four numbers that will never reconcile to one. Stop trying to make them match. Use each platform's ROAS to tune that channel, and use blended ROAS (also called MER) across your whole account to decide if ads pay at all. The threshold you measure against is not a generic "4x is good." It is your break-even ROAS, which is 1 ÷ profit margin. A store at 40% margin breaks even at 2.5:1, so a platform showing 2x is underwater even though it looks positive. WeltPixel Conversion Tracking does not calculate ROAS, but it controls the accuracy of the revenue that feeds every platform's numerator.

Key Takeaways

  • ROAS = revenue attributed to ads ÷ ad spend, stated as a ratio (2:1) or a percentage (200%) [1].
  • Break-even ROAS = 1 ÷ profit margin. At a 40% margin you break even at 2.5:1; below that, the ad is losing money [2].
  • Set your target ROAS above break-even, not at it, so there is room for refunds, overhead, and error.
  • Blended ROAS = MER = total revenue ÷ total ad spend [3]. It is attribution-independent and is the honest answer to "combine my Shopify revenue with my ad spend for true ROI."
  • Use platform ROAS to tune a single channel. Use blended ROAS to judge whether ads pay for the business.
  • Platforms disagree because each fills the numerator under its own attribution window, not because they see different sale amounts. The sibling article on why ad platforms disagree on ROAS covers that mechanism.
  • A tracking app cannot make platform numbers reconcile. It can keep each numerator honest through refund handling, server-side recovery, and event_id deduplication.

What is the ROAS formula?

ROAS, return on ad spend, is revenue attributed to ads divided by the cost of those ads [1]. If a campaign spends $1,000 and is credited with $2,000 in sales, that is 2,000 ÷ 1,000 = 2, written as 2:1 or 200% [1]. That is the whole formula, and it is also why a thin "ROAS = revenue ÷ ad spend" answer is useless on its own. The number means nothing until you know two things: which revenue went into the numerator, and what ratio your store actually needs to profit.

The phrase "revenue attributed to ads" is doing all the work. A platform only counts sales it believes its ads caused, under rules it sets itself. That is the seam where the disagreement starts, and it is the reason the same week can show a 4:1 in one dashboard and a 2:1 in another.

Why does every platform show a different ROAS?

Here is the part most people get backwards. The platforms are not seeing different sale amounts. When a Shopify order completes, WeltPixel Conversion Tracking sends the same order total to GA4, Meta, TikTok, Google Ads, and Reddit. The dollar value of the sale is identical across all of them. What differs is whether each platform claims that sale at all, and over what window.

Meta, Google Ads, and GA4 each fill the numerator under their own attribution window and credit rules, so the same order can land in several numerators, one, or none, depending on the path the buyer took. The divisor differs, not the dollars.

That is the entire reason the numbers spread, and re-deriving the windows here would just duplicate work already done. For the mechanism, the double-counting, and why the platform totals can exceed Shopify, read why ad platforms disagree on ROAS. For the timing side, see attribution windows and reporting delays. For the Google-specific gap, see why Google Ads reports fewer conversions than Shopify. The job of this article starts after you accept they will never match.

Platform ROAS vs blended ROAS (MER)

Once you accept the platforms disagree, the practical question is which number you act on. The answer is two numbers used for two jobs.

Platform ROAS is channel-specific and attribution-dependent. It is the right tool for tuning inside one channel: which Meta campaign to scale, which Google ad group to cut. It is the wrong tool for judging the whole business, because it only counts sales that channel claims credit for, and it ignores spend that drives sales another channel ends up reporting.

Blended ROAS, also called MER (marketing efficiency ratio), is total revenue divided by total ad spend across everything [3]. You take your actual Shopify revenue for the period and divide it by every dollar you spent on ads, no attribution involved. Because it ignores attribution entirely, it cannot double-count and it cannot be inflated by a generous window. It is the literal answer to "how do I combine my Shopify revenue with my ad spend for true ROI." If you spent $10,000 across all channels and Shopify recorded $40,000 in revenue, your blended ROAS is 40,000 ÷ 10,000 = 4:1 (illustrative).

The rule I follow: platform ROAS for within-channel tuning, blended ROAS for whole-business health and the budget sanity check. When a single platform claims a 6:1 but your blended sits at 2:1, the platform is taking credit for sales it did not solely cause. Blended is the number you defend a budget with.

How to calculate your break-even ROAS

A ROAS is only "good" relative to your margin. The break-even point, where ad revenue exactly covers ad cost and product cost, is break-even ROAS = 1 ÷ profit margin [2]. Profit margin here is your contribution margin as a decimal: gross margin after cost of goods, before ad spend.

The table below is illustrative. It assumes nothing about your store except the margin in the left column, and every row is just 1 ÷ margin.

Profit margin Break-even ROAS (1 ÷ margin) A reported 2x means
25% 1 ÷ 0.25 = 4.0:1 underwater
40% 1 ÷ 0.40 = 2.5:1 underwater
50% 1 ÷ 0.50 = 2.0:1 exactly break-even
60% 1 ÷ 0.60 ≈ 1.67:1 profitable

Read the 40% row, because it is the one the headline uses. A store at 40% margin needs 2.5:1 just to break even, so a platform proudly reporting 2:1 is losing money on every one of those sales. The dashboard says positive; the P&L says negative. This is why "is 2x good?" has no answer without the margin.

Your target ROAS sits above break-even, never at it. Break-even leaves zero room for refunds, overhead, fixed costs, or attribution error. How far above is a judgment call tied to how much of that buffer you need, but the floor is fixed by the math: a target below your break-even ROAS is a target to lose money. Treat any "ideal ROAS is 4:1" advice you see as a generic figure, not a benchmark for your store. Your 4:1 is correct only if your margin happens to be 25%.

A worked reconciliation: from platform numbers to a decision

Here is the full loop with illustrative numbers, all internally consistent with the table above. The store runs at a 40% margin, so its break-even ROAS is 2.5:1.

In one month it spends $10,000 on ads in total and Shopify records $40,000 in revenue. The platform dashboards, added up, claim more than that, because each is counting under its own window and some sales get credited twice across platforms. That sum is not a real number, so I ignore it.

I calculate blended ROAS from the only two figures I trust: actual ad spend and actual Shopify revenue. 40,000 ÷ 10,000 = 4.0:1 (illustrative). I compare that to break-even of 2.5:1. The business is profitable on ads with margin to spare: 4.0 is well above 2.5.

The decision falls out of that comparison. Blended is healthy, so the question is not "should I cut spend," it is "which channel deserves more of it," and that is where platform ROAS comes back in, for tuning only. If blended had come in at 2.0:1, below the 2.5:1 break-even, the decision would flip to pulling spend regardless of how good any single platform's dashboard looked. The output of the exercise is a decision, not a single reconciled ROAS. The numbers were never going to agree, and that was never the point.

What changes the numbers, and what a tracking app can and cannot do

Platforms own their attribution, and no app can change a platform's window or make four dashboards print the same figure. What an app does control is the accuracy of the revenue feeding each numerator. WeltPixel Conversion Tracking affects four inputs, all outcome-level:

  • Same value to every platform. All senders ship the same Shopify order total, so a per-platform difference is attribution, never a different sale amount. On a multi-currency store that value is the converted shop-currency total, which is its own source of mismatch, covered in why ad platforms show the wrong conversion value on multi-currency stores.
  • Server-side recovery. Orders also send from the server, recovering purchases the browser tag drops to ad blockers, ITP, or wallet redirects. More delivered conversions raise the reported numerator without ads becoming more effective. Browser events respect Shopify's Customer Privacy API signals.
  • event_id deduplication. When browser and server both fire for one sale, a shared event_id keeps the platform from counting it twice and inflating its own numerator. See how event_id prevents double-counting.
  • Refund events. When refund tracking is on, refunded revenue is subtracted from the platform numerator. Without it, a platform's ROAS stays permanently inflated by sales that were returned. Mechanics are in server-side refund tracking.

None of that makes the platforms reconcile, and the honest framing is that it never will. The app keeps each numerator clean and de-duped so the ROAS you calculate is built on real, deliverable, refund-adjusted revenue instead of double-counted or dropped sales. The decision is still yours, made on blended ROAS against your break-even.

FAQ

Which ROAS number should I trust for budget decisions?

Blended ROAS (total revenue ÷ total ad spend) [3]. It is attribution-independent, so it cannot be inflated by a generous window or double-counting across platforms. Use platform ROAS only to tune inside a single channel, never to decide whether ads pay overall.

What counts as a good ROAS?

There is no universal number. Good means above your break-even ROAS, which is 1 ÷ profit margin [2]. A 25% margin store needs 4:1 just to break even, while a 50% margin store breaks even at 2:1. Calculate your own threshold before judging any campaign.

Why is my Meta ROAS higher than my blended ROAS?

Because Meta only counts sales it claims under its own attribution window, while blended counts every dollar of spend against your actual revenue. A platform taking generous credit will always look better than the blended view. The ROAS discrepancy explainer covers the mechanism.

Does server-side tracking raise my ROAS?

It can raise the reported number by recovering conversions the browser tag would drop, but that is a measurement gain, not an effectiveness gain. The ads did not get better; more of the sales they caused are now counted. This is also why Shopify's own revenue and a platform's number diverge, covered in Shopify Analytics vs GA4.

Keep your ROAS numerator honest

ROAS is only as honest as the revenue underneath it. WeltPixel Conversion Tracking sends accurate server-side purchases with refund handling and event_id deduplication, so the numerator in your ROAS reflects real, de-duped sales instead of double-counted or dropped ones. It does not calculate ROAS for you, and it cannot make four platforms agree, but it makes sure the revenue each one divides by ad spend is the right revenue.

Install WeltPixel Conversion Tracking on the Shopify App Store

Sources

  1. Shopify. "Return on Ad Spend (ROAS): How To Calculate Your ROAS." https://www.shopify.com/blog/roas
  2. Triple Whale. "Breakeven ROAS: How To Calculate It." https://www.triplewhale.com/blog/breakeven-roas
  3. Shopify. "Marketing Efficiency Ratio (MER): What It Is and How To Calculate It." https://www.shopify.com/blog/marketing-efficiency-ratio
  4. Google Ads Help. "About conversion windows." https://support.google.com/google-ads/answer/6268637

Ready to upgrade your tracking?

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