Skip to content
Bach.ai

The Contribution Margin Waterfall: A $100 Order, Dissected

Most founders track ROAS to two decimal places and treat their cost of goods as a single number they half-remember. That’s backwards. The order is where money is actually won or lost, and by the time ad spend enters the picture, most of your margin is already gone. This is a line-by-line teardown of one $100 order, walked all the way down to CM3, so you can see precisely where gross revenue evaporates — and why a ROAS that looks healthy can still bleed.

For the neighboring economics, compare Free-Shipping Thresholds: The Hidden Hit to Contribution Margin and use Contribution Margin CM2 vs CM3: The Real Meta Ads Scaling Gate to validate the measurement decision.

Why a waterfall, not a P&L

A monthly P&L tells you that you made or lost money. A contribution margin waterfall tells you where — at the unit level, in the order itself. You take one order’s gross value and subtract costs in the sequence they actually occur, watching the number fall at each step. The discipline matters because the costs that kill DTC businesses are the quiet ones between “revenue” and “COGS” — fees, shipping, returns — that never show up when you eyeball a 3x ROAS and call it a day.

Three tiers do the work:

  • CM1 — contribution after everything required to make and deliver the product, before any marketing. This is your true product margin.
  • CM2 — CM1 minus acquisition cost. What an order contributes after you paid to win it.
  • CM3 — CM2 minus the variable overhead that scales with orders (support, app and platform fees, rev-share). The closest thing to “real” per-order profit before fixed costs.

The point of the exercise is the first tier. Most operators are shocked by how little is left at CM1 — long before ad spend is counted.

The pre-ad block, line by line

Here is one order, using illustrative planning figures (your structure will differ — that’s the entire reason to build your own). Treat the percentages as a worked example, not benchmarks.

Step Line item Amount Running balance
Gross order value What the customer’s cart totaled $100 $100
− Discount / promo Blended code + sitewide markdowns −$10 $90
− COGS Landed product cost −$28 $62
− Payment processing Gateway % + per-transaction −$3 $59
− Shipping & fulfillment Last-mile, pick/pack, packaging −$12 $47
− Returns reserve Refunds, restocking, lost margin −$5 CM1 = $42

Notice what just happened. Before a single ad ran, this $100 order is already down to $42 of contribution — a 58% haircut. None of that is marketing. It’s the cost of doing the actual business.

Two line items deserve a second look because operators routinely under-count them:

  • The discount line is blended, not list. If you run codes, affiliate offers, or sitewide sales, your effective discount rate is higher than the headline. Average across all orders for a period — don’t use the one full-price order in your head.
  • Returns are a reserve, not a footnote. A returned unit costs you the reverse shipping, the processing labor, frequently the resale margin, and sometimes the whole unit. Spread that expected cost across every order as a reserve, the way an insurer prices risk. At an illustrative 10–20% return rate, this line is seldom trivial.

From CM1 down to CM3

Now we let marketing in.

CM2 = CM1 − acquisition cost. Say you’re acquiring at a blended 3x ROAS, so ad cost on a $100 order is roughly $33.

CM2 = $42 − $33 = $9 (9% of gross)

That “healthy” 3x just turned 42% of pre-ad margin into 9% of post-ad contribution. Drop the blend to 2.5x and ad cost climbs to ~$40 — CM2 collapses to $2. The order is now one return or one shipping surcharge away from losing money.

CM3 = CM2 − variable overhead. Subtract the costs that scale per order but live outside fulfillment — support tickets, subscription-app fees on your store, transaction-based platform charges, influencer or affiliate rev-share. Call it −$4 here.

CM3 = $9 − $4 = $5 at 3x — and negative at 2.5x.

That is the whole lesson in one screen. A 3x ROAS on this cost structure yields a 5% true contribution. The same order at 2.5x is underwater, even though the dashboard still flashes a number most operators would accept without blinking.

The trap: optimizing to a metric that doesn’t know your margin

This is where the platform mechanics bite. Meta optimizes toward the conversion event you hand it. If that event is purchase value, the system will faithfully buy you revenue — including the low-margin, heavily-discounted, return-prone orders that look identical to a great order at the gross line and only diverge once you run the waterfall. The algorithm has no idea your CM1 is 42%. It optimizes the number you fed it, exactly as designed. Feed it gross revenue and it will happily find you orders that lose money after the waterfall.

That’s why your breakeven ROAS is a derived number, not a vibe. If CM1 is 42% of gross, your breakeven on advertising alone (CM2 = 0) is a ROAS of about 1 / 0.42 ≈ 2.4x — and that’s before CM3 overhead. Anything below that and you’re paying customers to take product. Most operators set ROAS targets with no idea where this floor sits, because they never built the waterfall.

How to run this on your own orders

You don’t need a finance team. You need one representative order and an hour.

  1. Pull a blended period, not your best order. Take a month of orders so discounts, returns, and shipping average out honestly. Cherry-picking the full-price order is how the waterfall lies to you.
  2. List every cost between “revenue” and “ad spend” first. Discount, COGS, payment, shipping, fulfillment labor, packaging, returns reserve. Stop and look at CM1 before you let marketing in — that ceiling caps everything downstream.
  3. Compute breakeven ROAS from CM1, not from a target someone posted online. It’s roughly 1 ÷ (CM1 as a fraction of gross).
  4. Layer CM2 and CM3 with real blended acquisition cost and per-order overhead. The gap between CM2 and CM3 tells you how much your “soft” variable costs are quietly eating.
  5. Re-run it quarterly. Carrier rates drift, discount depth creeps, return rates move with product mix. A waterfall built once and forgotten is a waterfall that’s wrong.

This is exactly the read-only diagnostic Bach AI runs against a connected account — reconstructing the per-order margin so a recommendation is grounded in contribution, not gross ROAS — and it surfaces the math for approval before anything changes.

The takeaway

ROAS is a ratio with no opinion about your margin. The contribution margin waterfall gives it one. Build CM1 first and treat it as the hard ceiling on everything below: if 58% of an order is gone before you’ve spent on acquisition, then “3x ROAS” and “profitable” are two completely different claims. Know your CM1, derive your breakeven from it, and judge every campaign against the floor the order itself sets — not the number the platform is optimizing toward.

See what your Meta ads are really costing you.

Connect your account and Bach ranks every revenue leak in minutes — each with the money it costs and a one-tap fix. Free for 7 days, no credit card.

Start Free Audit
Start your free audit