What contribution margin actually is

Contribution margin is what's left of revenue after you subtract every cost that would disappear if you didn't make that sale. In ecommerce, that means: the product itself (COGS), the shipping and packaging to get it there, the payment processing fee, the return if it comes back, and the paid media spend that drove the order.

What's left covers your fixed costs — warehousing, team salaries, software, rent — and whatever remains after that is operating profit. Contribution margin is the ceiling on profitability. If it's thin, nothing downstream saves you.

Most DTC operators know their gross margin. Fewer know their contribution margin by SKU, by channel, or even in aggregate. That gap is usually where margin compression hides.

Gross margin vs. contribution margin: why it matters

Gross margin = Revenue − Cost of Goods Sold. It stops there. For a brand selling a $60 supplement with $15 COGS, gross margin is 75%. That number feels excellent.

But now add: $8 in shipping and fulfillment costs, $3 in payment processing, $12 in paid media CAC allocated to the order. Contribution margin is now $60 − $15 − $8 − $3 − $12 = $22, or 37%.

That 37% now has to cover: your team, your warehouse, your 3PL overhead, your software, and your debt service. At 37% contribution margin on $5M revenue, you have $1.85M to work with before any fixed costs. At 20% contribution margin — which is not uncommon for brands over-reliant on paid acquisition — that drops to $1M on the same revenue, and unprofitability becomes structurally locked in.

Gross margin makes the P&L look better than it is. Contribution margin is the honest number.

The formula and what to include

The contribution margin formula for ecommerce:

Contribution Margin = Net Revenue
  − Cost of Goods Sold (COGS)
  − Shipping & fulfillment costs
  − Payment processing fees
  − Returns (net refund cost)
  − Variable acquisition cost (paid media allocated to order)

CM% = (CM ÷ Net Revenue) × 100

A few notes on what to include:

Net revenue, not gross. Subtract discounts, refunds, and chargebacks from revenue before you start. Many brands calculate contribution margin on gross revenue and overstate it by 5–15% depending on discount strategy.

Allocated paid media, not blended CAC. If you run a mix of brand search, Meta, and organic, allocate only variable paid spend to orders generated from paid channels. Don't apply blended CAC to every order — that overstates the cost for retention cohorts and organic orders.

Returns are variable costs. A 20% return rate on a $120 apparel item isn't a "fixed" cost — it directly scales with revenue. Include your net refund cost (refund amount minus restocking recovery) in the calculation.

Contribution margin by SKU

Once you have the aggregate number, the most valuable analysis is contribution margin at the SKU level. Two products generating the same revenue can have radically different contribution margins based on their size, weight, return rate, and price point.

A common pattern in DTC wellness and apparel: a lower-priced, high-volume SKU drives most revenue but has a 12% contribution margin because of shipping weight and high return rates. A smaller, higher-margin SKU gets ignored in media budgets because it's "only" 15% of revenue — but it runs at 45% contribution margin. Reallocating even 20% of paid budget toward the high-CM SKU can shift aggregate contribution margin by 4–6 points.

To build a SKU-level CM table: pull COGS, average shipping cost, average return rate, and average payment processing fee by SKU from your 3PL and Shopify data. Apply your channel-allocated media cost to each SKU based on where each is promoted. Rank by CM%. The bottom 20% of SKUs by CM% deserve serious scrutiny — they may be actively destroying value.

Contribution margin by channel

Channel-level contribution margin answers a question gross margin can't: which acquisition channel is actually profitable after its full cost is accounted for?

The model: for each channel, calculate average order value, average COGS, average fulfillment cost, average return rate, and the channel's average CAC. Contribution margin by channel = (AOV × (1 − return rate)) − COGS − fulfillment cost − payment processing − CAC.

The results almost always surprise. Email and SMS cohorts often run at 50–60% CM because there's no marginal acquisition cost. Branded search runs at 40–50%. Cold Meta or TikTok prospecting, especially for brands with $20–40 CPAs and low AOVs, often runs at 10–20% CM or negative. That means scaling that channel isn't just slow — it's structurally dilutive to the business.

This analysis also reframes the "should we cut paid spend" question. If Meta is running at 12% CM and your fixed cost structure requires 28% CM to break even, Meta is funding revenue growth while destroying profitability. The fix might be to raise minimum AOV thresholds for paid traffic, not to cut spend or to try harder on creative.

What targets to aim for

There's no universal "good" contribution margin in ecommerce — it depends heavily on fixed cost structure, category, and stage. That said, here are the benchmarks we use as starting points:

The most important target is your own breakeven contribution margin: the CM% at which your fixed costs are exactly covered. Calculate that first, then measure every SKU and channel against it.

If more than 30% of your revenue comes from channels or SKUs running below breakeven CM, the growth strategy needs to change before the marketing strategy does.

Get a P&L audit

Contribution margin problems are usually hiding in plain sight — they just require pulling data from three or four systems (Shopify, 3PL, ad platforms, your P&L) and building the right table. Most operators know the aggregate number is uncomfortable but haven't run the SKU-level or channel-level breakdown that tells them exactly where to fix it.

Want to know your real contribution margin — by SKU and channel?

We audit P&Ls across DTC brands and build contribution margin models that identify where margin is leaking and which lever to pull first. Starts with a free diagnostic call.

Request a free audit →