Allocating Return Rate Into Per-Order Contribution Margin For Apparel

Apparel returns of 20-40% quietly halve reported CM when booked as a marketing line. Here's how to price them into per-order margin — and which method your media buyer should bid against.
Quick answer
Book the return provision inside per-order contribution margin, not as a marketing expense. For most apparel catalogues use SKU-level (or at least category-level) return provisioning; blended-across-orders is only safe when return rates sit within ±3pp of the catalogue average. Media buyers should bid against the returns-adjusted CM — never gross CM.
Allocating return rate into per-order contribution margin (apparel)
Pricing the expected cost of returns into each order's contribution margin so paid-media bidding reflects true post-return profitability.
In apparel, 20-40% of units come back. If you record returns as a marketing line — a lump refund cost sitting under CAC — your per-order CM looks healthy and ROAS looks strong, right up until the P&L closes and half the margin is gone. Allocating return rate into per-order CM means booking an expected return provision on every order at the moment of sale, based on the SKU's or category's historical return behaviour, so the CM figure your buyer optimises against already reflects reality.
The two methods are blended-across-orders (one catalogue-wide return rate applied to every order) and SKU-level provisioning (each SKU carries its own return rate). Which one you pick decides whether dresses subsidise basics or the other way round.
The stakes are simple. On a €80 AOV apparel store with a 32% unit return rate and €22 of variable cost per return (reverse logistics, restocking, quality-check labour, plus write-off on the ~4% that comes back unsellable), the average order carries roughly €7 of returns cost. Ignore it and you're bidding on a CM that's 25-40% too high.
Why the mis-allocation happens
Most Shopify P&Ls inherit their chart of accounts from a wholesale-era template. Refunds get their own top-line contra-revenue row, return shipping lands in fulfilment, and restocking labour gets buried in overhead. Nothing touches per-order CM.
Meta ads managers then optimise against a purchase event fired at checkout, weighted by gross order value. The buyer's target ROAS is calibrated on a CM that quietly assumes zero returns. Every campaign scaling decision is made on a number that's structurally wrong by 15-25 percentage points of margin.
The tell
If your reported blended ROAS looks great but the bank balance disagrees at month-end, returns are almost certainly being booked outside per-order CM. See booking returns as a marketing line item overstates ROAS on apparel Meta campaigns for the full mechanism.
How to detect it in your numbers
Pull three numbers for the last 90 days: gross CM per order, refunds as a share of revenue, and variable return-handling cost per returned unit. If gross CM per order minus (return_rate × (AOV + handling_cost_per_return)) differs from your reported CM by more than 5%, your allocation is broken.
Then split it by category. Dresses and outerwear typically return at 35-45%; basics and accessories at 8-15%. If your accounting applies one blended rate, the high-margin basics buyer is being taxed to cover the loss-making dress SKUs — and the dress category looks profitable when it isn't. That's the case for SKU-level return provisioning.
Returns-adjusted CM by apparel category (illustrative, €80 AOV, 55% gross margin)
| Category | Return rate | Gross CM / order | Returns cost / order | Adjusted CM / order |
|---|---|---|---|---|
| Basics (tees, socks) | 10% | €44 | €3 | €41 |
| Denim | 22% | €44 | €6 | €38 |
| Dresses | 38% | €44 | €11 | €33 |
| Outerwear | 42% | €44 | €13 | €31 |
| Accessories | 6% | €44 | €2 | €42 |
How to fix the allocation
Start category-level, not SKU-level. Build a return-rate table by category using trailing 180 days of order data, exclude the last 30 days (returns lag), and compute a variable return cost that includes reverse shipping, inspection labour, and a write-off rate for unsellable returns. Apply it as a provision at order-creation time.
Refine to SKU-level only where category averages hide meaningful variance — usually the size-curve tail (XS and XXL return at 2-3× the fit-band middle) and price-point outliers within a category. See blended vs SKU-level return provision for the decision framework, and the size-curve tail piece for the specific loss dresses hide.
Also split refund-rate from exchange-rate. Exchanges keep the revenue but incur handling cost, so they belong in CM. Refunds destroy the revenue entirely, so they belong partly in CM (handling) and partly in CAC (the acquisition spend on a customer who took nothing home).
Bid on the adjusted number
Once returns-adjusted CM is wired into your data layer, feed it to Meta and Google as the value parameter on purchase events. Buyers report a 15-30% shift in campaign ranking — the campaigns driving dress-heavy carts get downweighted, and basics/accessories campaigns get more budget. That's the bid-strategy delta at work.
Experiments to run
First, run a two-week holdout: keep one ad account bidding on gross CM value, switch a matched one to returns-adjusted CM value. Measure blended contribution profit (not ROAS) at day 45 once returns have settled. Expect the adjusted-CM account to show 8-18% higher contribution profit despite lower reported ROAS.
Second, provision first-order returns separately from repeat-cohort returns. First orders return at 1.4-1.8× the repeat rate in most apparel catalogues — bracketing is concentrated in trial buyers. If you're not provisioning by buyer maturity, prospecting campaigns look worse than they are and retention campaigns look better. The first-order vs repeat-cohort provisioning piece walks the split.
Frequently asked questions
Neither, cleanly. The handling cost (reverse shipping, labour, write-off) belongs inside per-order contribution margin as a variable cost. The lost revenue on refunded orders belongs partly against CAC — you paid to acquire a customer who kept nothing. Booking the whole thing as marketing overstates ROAS and hides which categories are actually loss-making.
Blended applies one catalogue-wide return rate to every order. SKU-level (or category-level) applies the SKU's own historical return rate. Blended is fine when your catalogue is homogeneous — say, all t-shirts. It breaks the moment you mix categories with different return behaviours, because dresses at 38% end up subsidised by basics at 10%.
Add reverse shipping (typically €4-8 in EU), inspection and repackaging labour (€2-4), and a write-off allowance for unsellable returns (usually 3-6% of returned units at full cost). For a €80 apparel order that's €7-15 per returned unit, or €2-6 per order once you weight by return rate.
The method does; the impact is smaller. Accessories, beauty, and homewares typically return at 4-10%, so gross CM and returns-adjusted CM sit within a few percentage points. Apparel is the category where the mis-allocation genuinely reshapes bidding decisions.
Bracketing — customers ordering multiple sizes to keep one — inflates both AOV and return rate simultaneously. If you provision returns as a flat rate on AOV you overstate CM on bracketed orders. See modelling bracketing behaviour into per-order CM for higher-AOV apparel for the specific adjustment.
Yes, if your data layer supports it. Send the returns-adjusted CM as the value parameter on the purchase event, not gross order value. The bidding algorithm then optimises against real contribution — the ranking shift usually favours basics and accessories campaigns over dress-heavy ones.
Category-level rates: monthly, using a trailing 180-day window excluding the last 30 days. SKU-level rates: quarterly, or whenever a SKU crosses 100 orders. Refresh more often during seasonal transitions — winter outerwear returns behave nothing like summer dresses.
That's why you exclude the most recent 30-60 days from the rate calculation. For P&L purposes, book the provision at order creation and true it up monthly as actual returns come in. Your CM ledger carries a small returns-provision liability that unwinds over 60-90 days.
Partially. Exchanges keep the revenue but still incur handling cost, so book the handling portion into CM and leave the revenue intact. Refunds hit both. The exchange-rate vs refund-rate distinction is worth splitting in your data layer — one belongs in CM only, the other bleeds into CAC too.
Same one: returns-adjusted, per-order, at the category or SKU level. The historical trap is finance running on refund-adjusted revenue while media runs on gross CM. Aligning both teams on a single returns-adjusted CM is the single biggest fix — it typically closes a 10-25% gap between reported ROAS and actual contribution profit.
Get an AI expert review of your site
Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.