Contribution ROAS: The Margin-Aware Metric That Closes The Gap

Contribution ROAS (cROAS) divides contribution margin by ad spend — the single metric swap that keeps paid-media dashboards honest through promo seasons and discount codes.
Contribution ROAS (cROAS)
Contribution ROAS is contribution margin divided by ad spend — the margin-aware version of ROAS that reflects what actually funds acquisition.
Contribution ROAS (cROAS) replaces gross revenue in the ROAS numerator with contribution margin: the dollars left after COGS, payment fees, shipping, returns, and discount codes. A €1 ad spend that drives €4 of revenue on a discounted, high-return SKU can produce a healthy 4.0 ROAS while contributing only €0.60 of margin — a 0.6 cROAS that loses money on every click.
The metric matters because ROAS and profitability diverge exactly when stakes are highest: promo weeks, bundle offers, and free-shipping thresholds. cROAS closes that gap so buying decisions, bid caps, and weekly trading reviews reflect economics finance will actually sign off on.
Standard ROAS treats every euro of revenue as equal. It isn't. A €80 order on a full-price item and a €80 order on a 30%-off bundle with free shipping and a €12 return probability produce wildly different contribution — but identical ROAS. Media buyers optimising toward the same ROAS target end up scaling the worst orders.
cROAS fixes the numerator. Instead of asking "how much revenue did this spend produce?", it asks "how much money did we keep after variable costs, before we paid the ad platform?". That framing is closer to how a CFO thinks about paid media, and it survives the promotional calendar without a spreadsheet of asterisks.
cROAS = (Revenue - COGS - Discounts - Payment Fees - Shipping - Returns Reserve) / Ad Spend
Revenue
Gross revenue attributed
Net of taxes; the same revenue figure feeding your ROAS numerator today.
COGS
Cost of goods sold
Landed unit cost of the products sold, including inbound freight and duties.
Discounts
Promo & code discounts
Sitewide promos, code redemptions, and automatic bundle discounts applied to the order.
Payment Fees
Processor fees
Shopify Payments / Stripe / PayPal fees — typically 1.4-2.9% + fixed component.
Shipping
Net shipping cost
Carrier cost minus shipping revenue collected. Free shipping = full carrier cost.
Returns Reserve
Expected returns cost
Category-level return rate × (refunded revenue + reverse logistics + restocking loss).
Ad Spend
Media investment
Platform spend for the same window and attribution scope as revenue.
An apparel Shopify store runs a 20%-off sitewide promo on Meta prospecting. In one week: €40,000 attributed revenue, €14,000 Meta spend.
Revenue: €40,000
COGS (28% of gross list): €14,000
Promo discount (20% off): €10,000
Payment fees (1.9%): €760
Net shipping cost: €2,400
Returns reserve (18% apparel): €3,200
Ad spend: €14,000
→ ROAS = 40,000 / 14,000 = 2.86. cROAS = (40,000 − 14,000 − 10,000 − 760 − 2,400 − 3,200) / 14,000 = 9,640 / 14,000 = 0.69
The dashboard shows a 2.86 ROAS — comfortably above the 2.0 target. cROAS reveals the campaign returned €0.69 of margin per €1 of spend: the promo week lost money on paid social, and scaling it would compound the loss.
The break-even threshold for cROAS is 1.0 by definition — every euro above 1.0 is margin the business keeps before fixed costs. That makes cROAS uniquely usable as a bid-strategy floor and as the single number finance and media can align on, which is why it usually outperforms MER for weekly decisioning even though MER is easier to compute.
Typical cROAS ranges by channel and stage — DTC apparel & beauty, full-price weeks
| Channel / stage | Reported ROAS | cROAS (margin-adjusted) | Break-even cROAS |
|---|---|---|---|
| Meta prospecting (cold) | 1.8 – 2.4 | 0.55 – 0.90 | 1.00 |
| Meta retargeting | 5.0 – 8.0 | 1.60 – 2.80 | 1.00 |
| Google Brand search | 8.0 – 15.0 | 2.80 – 5.20 | 1.00 |
| Google Shopping (non-brand) | 2.5 – 3.5 | 0.75 – 1.30 | 1.00 |
| TikTok prospecting | 1.4 – 2.0 | 0.40 – 0.75 | 1.00 |
| Blended paid (MER-equivalent) | 3.0 – 4.0 | 1.00 – 1.50 | 1.00 |
Getting to a reliable cROAS number is mostly a data-plumbing problem, not a math problem. Most brands compute it weekly from GA4 attribution plus Shopify order exports, layer in a category-level returns reserve, and reconcile monthly against the P&L. The child guides on switching your weekly trading report to cROAS, building a daily cROAS dashboard from GA4 and Shopify, auditing what belongs in the numerator, and the first-order-vs-blended cut for subscription brands walk through each step. If you sell heavily on promo, the piece on why sitewide 20% promos crater cROAS is the fastest way to see the metric earn its keep.
Contribution ROAS FAQ
ROAS uses gross revenue in the numerator; cROAS uses contribution margin — revenue minus COGS, discounts, payment fees, net shipping, and a returns reserve. ROAS tells you how much top-line the ad produced. cROAS tells you how much money you kept before overhead.
Practically yes — "profit ROAS" and "margin ROAS" are the terms media buyers use for the same idea. Strictly, contribution ROAS stops at contribution margin (variable costs only) and doesn't subtract fixed costs like salaries or software, so it isn't full profit ROAS.
Break-even is 1.0 by construction. Most DTC brands set a blended cROAS floor of 1.2-1.5 to cover fixed overhead and leave a margin. Channel-level targets vary: cold prospecting often runs 0.7-1.0, retargeting 1.8-3.0, brand search 3.0+.
MER (Marketing Efficiency Ratio) divides total revenue by total marketing spend across all channels — it's blended and revenue-based. cROAS uses contribution margin and can be computed per campaign. MER is easier; cROAS is more decision-useful, especially during promotions.
Not directly — the platforms only ingest revenue events. What you can do is feed adjusted revenue (revenue × contribution margin rate) via a custom conversion value, which effectively makes Target ROAS bid on margin. Otherwise, use cROAS to set the floor and let ROAS run above it.
No. A weekly cROAS is achievable from a GA4 export, a Shopify orders CSV, and a spreadsheet with margin rates by collection. A warehouse helps once you want it daily, per-campaign, and reconciled to the P&L — but it isn't the starting point.
Use a returns reserve, not actual returns, so the metric works in the same window as the ad spend. Apply a category rate (apparel 15-25%, beauty 3-8%, electronics 8-12%) to attributed revenue, and subtract the refunded revenue plus reverse-logistics cost.
Yes, but you need to pick first-order cROAS or blended cROAS deliberately. First-order cROAS almost always looks bad on subscription because the LTV is downstream; blended cROAS across the cohort's expected revenue is the honest number for scaling decisions.
A 20% off code shaves 20% off contribution margin but only fractionally moves ROAS (because higher AOV and conversion partially offset the discount in the numerator). cROAS puts the discount squarely into the numerator via lower margin — which is why it's the more useful metric during Black Friday and Cyber Monday.
Yes, that's one of its main uses — but keep the attribution model constant. Comparing Meta cROAS (last-click) to Google cROAS (data-driven) muddles the comparison. Freeze the attribution scope, then compare channel-level cROAS to reallocate budget.
Track CAC, channels, and funnel conversion in one place
Metricuno connects ad spend, funnel events, and revenue so you can see CAC by channel, cohort, and campaign — without stitching together five tools.