How to Report One Blended ROAS Across Shopify, Meta and Google Ads

|Dan Giura
How to Report One Blended ROAS Across Shopify, Meta and Google Ads

TL;DR

Blended ROAS is total revenue divided by total ad spend, and the formula plus the platform-versus-blended decision are already worked through in how to calculate Shopify ROAS and why platforms disagree. This article is about the two inputs. Shopify publishes three defensible revenue figures for the same month [1], and on the illustrative month below they differ by roughly a sixth, so the ratio is decided before any attribution question arrives. Pick net sales, label it, align the periods, and fix your re-pull day.

Key Takeaways

  • Shopify's own definitions: net sales is gross sales minus discounts minus sales reversals; total sales adds taxes, duties, shipping charges and fees on top [1]. Those two are not interchangeable numerators.
  • On the illustrative month below, net sales is 86,000 and total sales is 99,000, a 15% difference between those two that becomes blended ROAS of 3.44 versus 3.96 against the same 25,000 of spend.
  • Use net sales, then label the report as net. Total sales is the larger of the two figures, so an unlabelled ratio will silently disagree with whoever on the team is reading the other one.
  • Pull spend from each ad platform, not from Shopify's marketing reports, and include every ad account on every platform. A ratio that omits a channel is not blended.
  • Do not net agency fees, creative costs or app subscriptions into ad spend unless you are publishing a differently named metric alongside it.
  • Sales reversals land in the period of the adjustment, not the period of the sale [1], so the same month's blended ROAS declines as it ages. Fix one re-pull convention, for example every month reported at day 15, and never mix conventions inside a trend line.
  • Gift cards sold as products are excluded from sales reports, while an item paid for with a gift card counts at its full value. Shopify's own example: a 20 t-shirt with 5 paid by gift card shows as 20 in sales [1].

Which Shopify sales figure goes in the numerator?

Start with the arithmetic, because it settles the argument faster than any discussion of methodology.

Run the numbers on an illustrative store's clean month: gross sales 100,000, discounts 8,000, sales reversals 6,000, taxes 9,000, shipping charged 4,000, duties and fees zero. Ad spend across all platforms, 25,000. Currency is deliberately left unstated; the shape holds in any of them.

Metric Shopify's published definition [1] Illustrative month
Gross sales product price x quantity, before taxes, shipping, discounts and sales reversals 100,000
Discounts line item discount plus order level discount share 8,000
Sales reversals all order adjustments resulting in negative monetary value, including returned products, cancellations, edits, and adjustments to shipping, taxes, fees and discounts 6,000
Net sales gross sales minus discounts minus sales reversals 86,000
Shipping shipping charges minus shipping discounts minus refunded shipping 4,000
Total sales gross sales minus discounts minus sales reversals plus taxes plus duties plus shipping charges plus fees 99,000

Three defensible numerators, one month, no tracking involved: 86,000, 99,000 and 100,000. Against 25,000 of spend that reads as a blended ROAS of 3.44, 3.96 or 4.00. The spread from lowest to highest is 16%, and every point of it is tax, shipping and reversals rather than performance.

Net sales is the right numerator for a ratio you will make decisions against. Tax is not your money, shipping charged is usually offset by shipping paid, and reversals are revenue you did not keep. The cost of that choice is real and you should state it in the report: total sales is the larger of the two figures, so a net-sales ratio reads lower than one built on total sales. Label the column. That one word prevents the recurring meeting where two people compare two different metrics and conclude the tracking is broken.

Two inclusion rules that surprise experienced operators, both from the same page. Pending, unpaid and canceled orders are included in Shopify's sales reports and test orders are not, and deleting an order removes its data from the reports retroactively [1]. Gift cards sold as products are excluded from sales reports, but when a customer pays with a gift card the item counts at full value, with Shopify's own worked example being a 20 t-shirt with 5 of gift card applied showing as 20 in sales [1]. What ad platforms see in the same situation is a separate question, handled in gift cards and store credit in Shopify conversion tracking.

What belongs in the spend figure?

Every platform's own spend number for the period, and nothing that is not media cost.

That means all of it. Every ad account on every platform, including the small ones nobody reports on, plus the retargeting account somebody set up two years ago. Meta and Google Ads are in the title because they are where the money usually is, and a blended ratio that covers only those two while a third channel spends is not a blended ratio.

Use spend, never the platform's attributed revenue. Mixing an attributed numerator into a blended calculation reintroduces exactly the disagreement the method exists to avoid, and the sources of that disagreement are catalogued in why ad platforms disagree on ROAS accuracy.

Keep out: agency retainers, creative production, app subscriptions, and the cost of the person who runs the accounts. Each is a real cost and none of them belongs in a media-efficiency ratio you intend to compare against last quarter or against anybody else's. If you want a fully loaded number, publish it as a second line with its own name and its own definition next to it.

One sourcing rule that saves a monthly argument: pull spend from the ad platforms rather than from Shopify's own marketing surfaces. Shopify's channel reporting is a different instrument with its own attribution and its own sync behaviour, explained in how the Shopify channel performance report attributes, and none of the analytics access you need for this is plan-gated, which which Shopify plan you need for attribution and channel reports walks through.

Aligning the two so the ratio holds still

The numerator and the denominator come from systems that disagree about what a day is. Reconciling that once, in writing, is most of the work.

  1. Fix one time zone for the whole report, and write it in the column header. Ad platforms report in the ad account's time zone; Shopify reports in the store's. A one-day offset at a month boundary moves both sides of the ratio in the same direction and is a recurring cause of "our efficiency changed".
  2. Fix one calendar. Calendar months are easier to defend than rolling 30-day windows, because reversals and re-pulls are month-shaped.
  3. Pull the numerator from the sales report with the same filters every time, and save the report so the filter set is not retyped.
  4. Pull spend per platform per account into the same sheet, one row per account, and total it in the sheet rather than in your head.
  5. Record the pull date next to the month. This matters more than it sounds, for the reason in the next section.
  6. Recompute last month at the same offset every cycle rather than whenever someone asks.

If you want the two-sided version of this reconciliation, where Shopify and GA4 revenue disagree for structural reasons before spend is involved, that is why Shopify Analytics and GA4 revenue never match.

Why does the same month's blended ROAS drop as it ages?

Because reversals are dated to the adjustment, not to the sale [1]. A refund processed on the 20th reduces the sales figure for the period containing the 20th, which means a month closed on day 1 and re-pulled on day 30 legitimately shows lower net sales for the same month.

Shopify's API makes the same distinction explicit at the order level: totalPriceSet is the order total before returns, and currentTotalPriceSet is the total after returns [3]. The two differ by exactly the reversals.

So a team comparing a fresh month against a settled one is reading a systematic bias as a performance change, and it always points the same way: the newest month looks best. This is the single most common way a blended series lies to the people who built it, and it has nothing to do with ads at all.

The fix is a convention, not a calculation. Report every month at the same age, day 15 being a reasonable default for most refund policies, and if you must publish a preliminary number, publish it in a separate column labelled preliminary and never plot the two in one line. The refund side of the event layer, if you also want your platforms to reflect reversals, is in Shopify server-side GA4 refund tracking.

One vocabulary note while you are rebuilding the pull. Shopify renamed its returns metrics to sales reversals in a changelog dated March 13, 2026 [2], and the two sets of metrics were shown side by side in sales reports only until May 1, 2026 [1]. A saved dashboard or spreadsheet that still references "returns" is pointing at a field that has been removed.

What blended ROAS must not decide

Blended answers one question well: do ads pay for the business at the current spend level? Everything below is outside its competence, and using it there produces confident wrong answers.

Which channel to cut. Which campaign to scale. Which creative won. Whether a new channel is incremental. Any per-channel budget shift at all. Blended cannot allocate, because it has no per-channel numerator by construction, and the number will move for reasons that have nothing to do with the channel you are about to change.

For those decisions you are back to attributed numbers, with all their disagreement, and the routing for that disagreement is in analytics discrepancies on Shopify: the triage guide. Blended is also not more accurate than platform ROAS. It is attribution-independent, which is a different property and the reason it is useful as a check rather than as a replacement.

No app calculates your blended ROAS, because no app knows your spend across accounts. What it controls is whether the revenue each platform reports is the same revenue as the Shopify order, which is what makes the platform side of the comparison worth doing at all. WeltPixel Conversion Tracking [4] sends the purchase from the Shopify order record to each destination, so the platform numerator you sanity-check against your blended ratio traces back to an order you can open in the admin.

FAQ

Should blended ROAS use net sales or total sales?

Net sales, and label it. Net sales excludes taxes and shipping charges and nets out reversals, which keeps the ratio close to money the business actually keeps [1]. Total sales is the larger of the two figures, so an unlabelled net figure will look like a discrepancy to anyone comparing the two.

Do I include organic and email revenue in the numerator?

Yes. Blended ROAS deliberately puts all revenue over all ad spend, which is why it is called blended and why it cannot allocate. If you want a paid-only view, that is attributed reporting and a different metric.

Does the reversal lag mean my historical blended ROAS is wrong?

Not wrong, just measured at different ages. Re-pull the last twelve months on the same day, at the same offset, and the series becomes comparable. Then keep the convention.

Where should the spend number come from if Shopify already shows ad spend?

The ad platforms. Shopify's own marketing reporting is a different instrument with its own sync behaviour, covered in how the Shopify channel performance report attributes. Use the platform as the source of truth for its own spend.

How often should I recompute it?

Monthly, at a fixed age, with a weekly directional read if you want an early signal. Recomputing daily invites decisions on a number that has not settled, which is the same trap that makes daily platform comparisons unreliable.

If you build only one thing from this article, build the header row: month, time zone, pull date, numerator name. Blended-ROAS arguments usually come down to two people using two different values in one of those four columns.

Sources

  1. Shopify Help Center, "Sales reports" (gross sales, discounts, sales reversals, reversed quantity, net sales, shipping and total sales formulas; pending, unpaid and canceled orders included and test orders excluded; deleted orders removed from reports; gift cards sold excluded and the 20 / 5 gift-card example; sales reversals displayed as a negative value for the day they were processed; deprecated return metrics shown alongside the new ones until May 1, 2026), help.shopify.com/en/manual/reports-and-analytics/shopify-reports/report-types/default-reports/sales-report, accessed September 10, 2026
  2. Shopify changelog, "Returns metrics renamed to reversals", published March 13, 2026 (returns fields renamed to sales reversals and reversed quantity), changelog.shopify.com/posts/returns-metrics-renamed-to-reversals, accessed September 10, 2026
  3. Shopify, Admin GraphQL API Order object (totalPriceSet is the total price before returns, including taxes and discounts; currentTotalPriceSet is the total after returns), shopify.dev/docs/api/admin-graphql/latest/objects/Order, accessed September 10, 2026
  4. WeltPixel Conversion Tracking, Shopify App Store listing, apps.shopify.com/weltpixel-conversion-tracking, accessed September 10, 2026

Ready to upgrade your tracking?

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