Skip to content
Can Elmas

Ecommerce · 8 min read

Contribution Margin for DTC: The Number That Should Set Your Ad Spend

TL;DR

Contribution margin is net revenue minus every cost that scales with an order. CM1 subtracts landed product cost, CM2 adds fulfillment, shipping, payment fees and returns, and CM3 subtracts variable marketing. Set ad spend from first-order CM2 plus repeat contribution you have actually measured, and calculate it per SKU and per channel, not just store-wide.

· Published · Updated

Contribution margin is what an order leaves you after every cost that scales with it: product, fulfillment, shipping, payment fees, returns and the marketing that bought it. It should set your ad spend, because it tells you how much you can pay for an order before growth starts costing money. Calculate it per SKU and per channel, not only for the whole store.

Why revenue growth can hide losses

Three things commonly push revenue up while profit falls:

  • Discounting. Every discount dollar comes straight out of contribution while product and shipping costs stay the same.
  • Spending past efficient scale. Each extra prospecting dollar buys pricier customers, so the newest orders carry the least contribution.
  • Mix shift. Growth arrives in cheap, heavy or high-return products that barely cover their own shipping.

A hypothetical brand grows monthly net revenue from $400,000 to $500,000 by running a deeper sitewide discount and adding prospecting budget. Contribution before marketing falls from 46% to 38%, and marketing spend rises from $120,000 to $170,000. Contribution after marketing drops from $64,000 to $20,000. The revenue chart looks great; the bank account disagrees.

The MER vs ROAS post derives break-even ROAS and target MER from contribution margin. This post builds the cost model underneath.

CM1, CM2 and CM3: which costs belong where

Each layer isolates a different kind of cost:

  • CM1 = net revenue − landed product cost. Is the product priced right?
  • CM2 = CM1 − variable order costs. What is one order worth before anyone paid to acquire it? Ad spend has to fit inside this number.
  • CM3 = CM2 − variable marketing. What’s left to pay fixed costs and profit?

Net revenue is gross product sales minus discounts and refunds, excluding sales tax. Count shipping fees customers pay either as revenue or as an offset to shipping cost, and never switch. I use the offset, so revenue reflects product sales only.

CostLevelNotes
Supplier product costCM1Per unit, from purchase orders
Inbound freight, duties, brokerageCM1Spread across the units in each shipment
Pick, pack, boxes and per-order 3PL feesCM2Include per-additional-item fees
Outbound shipping labelsCM2Net of shipping charged to the customer
Payment processingCM2Percentage plus fixed fee per transaction
Return shipping, processing, write-offsCM2Unsellable returns at product cost
Per-order apps and platform feesCM2Anything billed by order volume
Paid media on every platformCM3
Affiliate commissions, creator fees, seedingCM3
Salaries, software, retainers, rent, 3PL storageBelow CM3Paid out of contribution

Two calls matter most. Treat discounts as a revenue reduction, never as marketing, or CM1 looks better than the product really is. And keep 3PL storage below the line: it moves with inventory, not orders, and it distorts per-order math.

Pulling the inputs from your P&L, Shopify and 3PL data

No single system holds every input. Build a monthly model from five sources:

  1. Shopify sales reports for gross sales, discounts, returns, net sales and shipping charges, split by product and by first-time vs returning customer.
  2. Purchasing and accounting records for landed cost. Shopify’s cost-per-item field feeds its profit reports, but it often holds the supplier price only. Build landed cost from purchase orders plus freight and duty invoices, and update it with each shipment.
  3. 3PL and carrier invoices for pick and pack, packaging, labels and returns processing. Divide monthly totals by orders shipped for per-order averages, and keep the rate card for per-SKU modeling.
  4. Payout and billing reports for payment fees and for apps billed by volume.
  5. Ad platforms, affiliate networks and creator invoices for marketing spend.

Then reconcile. Multiply your per-order costs by monthly orders and compare against the P&L lines for COGS, fulfillment, shipping and merchant fees. If they differ by more than a few percent, a cost is missing: usually return write-offs, dimensional weight surcharges or a forgotten app. Fix the model before trusting any per-SKU number.

Contribution per order and per SKU

Per order

A hypothetical average order with free shipping:

LineAmount
Gross product sales$90.00
Discount−$10.00
Refund allowance (6% of $80)−$4.80
Net revenue$75.20
Landed product cost−$24.00
CM1$51.20 (68%)
Pick, pack and box−$4.50
Outbound shipping−$8.00
Payment processing−$2.60
Return handling and write-offs−$1.00
Per-order apps−$0.60
CM2$34.50 (46%)

That $34.50 is the ceiling on what you can pay to acquire this order if it has to pay for itself. Spend $30 in ads per order and CM3 is $4.50, before rent and salaries.

CM1 at 68% looks comfortable, yet fulfillment and shipping alone take $12.50, more than half of product cost. Brands that plan from gross margin miss exactly this gap.

Per SKU

Store averages hide the products that can’t carry ad spend. Calculate CM2 for each key SKU as if bought alone, using your 3PL rate card and each product’s actual shipping weight:

SKU (hypothetical)Net priceLanded costFulfillment + shippingFees + returnsCM2 aloneCM2 %
Starter kit$120$34$14$8$6453%
Premium bundle$210$78$18$14$10048%
Refill pack$32$8$11$3$1031%
Accessory$18$5$10$2$16%

Then calculate each SKU as an add-on, counting only incremental costs. The accessory that earns $1 alone adds roughly $10 when it joins an order that’s already shipping, because only a per-item pick fee is incremental.

Decisions follow:

  • Rank by CM2 dollars, not percent. CAC is paid in dollars, so the premium bundle can carry more spend than the starter kit despite a lower percentage.
  • Lead acquisition ads with SKUs whose solo CM2 covers your target CAC. At a $40 target, that’s the kit and the bundle.
  • Sell the accessory in cart, post-purchase and in bundles, never as a paid landing page.
  • Keep the refill pack for returning customers through email and SMS, where acquisition cost is near zero.

Contribution by channel and customer type

The same product earns different contribution depending on the channel. Channels differ in discount depth, commissions, product mix, return rates and share of first-time buyers. Calculate CM3 per order by channel using one consistent attribution view, such as UTM-based last click, and use it to compare channels, not to prove incrementality.

Channel (hypothetical)Net revenue / orderCM2 / orderMarketing / orderCM3 / order
Paid social, new customers$76$33$38−$5
Google Shopping and Search$84$38$22$16
Affiliates and coupon sites$68$25$8$17
Email and SMS, returning$82$38$3$35

Paid social shows a loss per order, but it may be creating the customers who later buy through email. Coupon sites look profitable, but many of those buyers were already at checkout hunting for a code. Channel CM3 shows where contribution is booked, not what caused it.

Split by customer type too. Store-level CM3 blends returning customers, who cost little to reach, with new customers, who carry the full acquisition cost. A store can show healthy blended contribution while every new customer is bought at a loss, and that only works if those customers come back.

First-order vs lifetime contribution

First-order contribution is first-order CM2 minus CAC. For DTC brands acquiring on paid social it’s often thin or negative. Lifetime contribution adds CM2 from repeat orders over a fixed window, net of retention discounts and email and SMS costs.

Use cohorts: group customers by first-order month and track cumulative repeat CM2 per customer, not repeat revenue. Continuing the example with a $40 CAC:

Days since first orderRepeat CM2 per customer (hypothetical)Contribution after CAC
0$0−$5.50
90$9$3.50
180$18$12.50
365$28$22.50

This cohort pays back by day 90. To set the most you can pay per customer, add first-order CM2 to the repeat CM2 earned inside a payback window your cash can fund. With a 90-day window, that’s $34.50 + $9 = $43.50. With 365 days it’s $62.50, but you’re financing each customer for a year.

Count only repeat contribution you’ve measured in real cohorts, never a projected LTV. And check that new cohorts behave like old ones, because customers acquired with deeper discounts or through newer channels often repeat less.

Levers that improve contribution, ranked

Ranked by how quickly and how much they usually move CM2:

  1. Stop advertising products that can’t carry spend. Shifting budget toward high-CM2 SKUs changes contribution within days and costs nothing.
  2. Reduce discount depth and frequency. An extra 20% off an $80 order removes $16 of revenue while costs barely move, cutting that order’s CM2 of about $35 nearly in half. The post on ecommerce discount strategy covers running sales without training customers to wait.
  3. Raise order value. Bundles, multi-unit pricing and a free-shipping threshold set above your current average spread per-order fulfillment and shipping across more revenue.
  4. Fix shipping costs. Right-size boxes to avoid dimensional weight charges, renegotiate carrier rates as volume grows, and test charging for shipping below the threshold.
  5. Cut returns at the source. Better size guides, product detail and photos reduce refunds, return shipping and write-offs together.
  6. Lower landed cost. Supplier renegotiation, larger runs and slower freight modes can move CM1 the most, but they take months and tie up cash.

This model is where my ecommerce growth work starts: which SKUs get ad spend, which channels scale and what CAC the business can actually afford.

Get it built

If revenue is growing and cash isn’t, the Growth Audit starts with your contribution model by SKU, channel and customer type. It’s $1,500 fixed and credited if we continue. See pricing or get in touch.

FAQ

Frequently Asked Questions

Is contribution margin the same as gross margin?

No. Gross margin usually subtracts only product cost, which is roughly CM1. Contribution margin also subtracts fulfillment, shipping, payment fees and returns, and in ecommerce those costs are often large enough to change which products and channels are profitable.

Should discounts count as a marketing cost or a revenue reduction?

Treat them as a revenue reduction. Booking discounts as marketing makes CM1 look healthier than the product really is and hides how much promotions cost you.

What is a good contribution margin for an ecommerce brand?

There is no universal benchmark, because it depends on category, price point and shipping weight. The test that matters is whether CM2 per first order, plus repeat contribution you have measured, covers what you pay to acquire a customer.

How often should I recalculate contribution margin?

Refresh the per-order model monthly and reconcile it to your P&L. Update per-SKU contribution whenever landed costs, 3PL rates or carrier rates change.

Work with me

Let’s find your biggest growth lever

Tell me about your growth challenge. I’ll tell you honestly if I can help — and if I can’t, who can.

  • ✓ No obligation
  • ✓ No sales script
  • ✓ Honest feedback
  • ✓ Clear next steps