E-commerce Contribution Margin: Turn Unit Economics Into Paid-Media Decisions

A finance-aligned framework for calculating e-commerce contribution margin and using it to set CAC ceilings, compare cohorts, and release paid-media budget.

E-commerce contribution margin is the money a single order, SKU, or customer cohort leaves behind after every cost that moves with that sale is removed from net revenue. It is not gross margin, it is not what an ad platform reports, and it is not profit. Its value to a paid-media team is narrow and specific: it is the only number that converts "this campaign looks efficient" into "this campaign can be funded."

Paid-media teams need a finance-owned definition because contribution margin has no accounting standard behind it. Gross margin is defined by how a company reports cost of goods sold. Contribution margin is defined by whoever builds the spreadsheet. If growth calculates it one way and finance another, the two teams will argue about budget while both are arithmetically correct. The fix is not a better calculator. The fix is a written contract that names the scope, the costs, the timing, and the decision the number is allowed to drive — signed off by the person who owns the P&L.

This article builds that contract, then shows how to turn it into CAC ceilings, cohort comparisons, and release-or-hold budget decisions without feeding stale numbers into automated bidding.

Write the margin contract before you calculate anything

A contribution-margin figure with no contract attached is an opinion with decimals. Before the first formula, document seven things.

1. Scope. Is this per order, per SKU, per acquired customer, per cohort, per channel, or per period? A SKU-level margin and an order-level margin answer different questions and rarely reconcile, because orders contain multiple SKUs, shipping revenue, and discounts that were never allocated at SKU level.

2. Net-revenue definition. Name exactly what is in the numerator. Shopify's sales reports distinguish gross sales, discounts, returns, net sales, shipping, duties, and taxes as separate columns, and the platform documents which reports include or exclude each (Shopify Help Center, Sales reports). Two analysts pulling "revenue" from the same store can differ by the size of the returns reserve. Write down which column you mean and which report you pulled it from.

3. Variable-cost taxonomy. List every cost that scales with an order and state which side of the line it sits on. The ambiguous ones — subscription apps that price per order, a 3PL with a monthly minimum plus per-unit picks, a customer-support team that grows in steps rather than smoothly — must be classified deliberately, not by default.

4. Cost timing and lag. Returns, chargebacks, and refund reserves arrive weeks after the order. A contribution figure for last week is a forecast wearing a historical label. Say how long the window stays open and when the number becomes final.

5. Acquisition-cost inclusion. State plainly whether media cost is in or out. Both versions are legitimate; mixing them in the same dashboard is not.

6. Finance owner and version. One named owner, one version number, one changelog. When the cost model changes, the version increments and historical comparisons carry the version they were computed under.

7. The decision it will drive. A margin definition built to set CAC ceilings is not the same as one built to decide which SKUs to discontinue. Name the decision first; it disciplines every choice above.

The U.S. Small Business Administration's business-planning guidance frames break-even analysis the same way — as a structured comparison of costs against revenue used to decide whether an activity is worth funding (U.S. Small Business Administration, Plan your business). The discipline is old. What changes in e-commerce is the number of variable-cost lines and the speed at which media spend can outrun them.

If the figure will ever appear in investor-facing material, one more constraint applies. The SEC's staff guidance on non-GAAP financial measures addresses how adjusted measures must be presented and reconciled so they are not misleading (U.S. SEC, Non-GAAP Financial Measures Compliance and Disclosure Interpretations). The SEC does not define an e-commerce contribution-margin standard and none of this guidance prescribes your cost taxonomy. The transferable principle is narrower: an internally defined measure should be labeled as such, defined consistently, and reconcilable to the reported financials.

Three layers, three different answers

Most disagreements about contribution margin are really disagreements about which layer is being discussed. Separate and label all three. None of them is the universal definition.

Layer 1 — Pre-acquisition contribution

Net revenue minus all order-variable costs, before any media spend. This is the layer that tells you how much room exists to buy a customer. It is the input to a CAC ceiling, and it is the only layer that is stable enough to publish weekly.

Layer 2 — Post-acquisition contribution

Layer 1 minus the acquisition cost assigned to that order or customer. This is the layer that tells you whether the first purchase paid for itself. It inherits every weakness of your attribution model, because assigning media cost to an order requires deciding which orders were bought.

Layer 3 — Cohort contribution and payback

Contribution accumulated by an acquisition cohort over time, compared against the acquisition cost of that cohort. This is the layer that justifies buying customers at a first-order loss. It is also the layer most easily abused, because an immature cohort can be extrapolated into any conclusion you want.

Label every chart with its layer. A team that says "our contribution margin is 34%" without a layer has said almost nothing.

The variable-cost waterfall

Build the calculation as a waterfall so that every subtraction is visible and challengeable. Each step below is a line a finance partner can audit.

Step Line Typical source Notes --- --- --- --- 1 Gross sales Store sales report Before any reductions 2 − Discounts and sales reversals Store sales report Includes codes, automatic discounts, price adjustments 3 − Returns Store returns data + reserve Lags the order; see evidence states 4 = Net sales Derived The numerator you will defend 5 − COGS ERP or inventory system Landed cost, including inbound freight and duty 6 − Pick, pack, and fulfillment 3PL or warehouse invoice Per-unit and per-order components only 7 − Payment or marketplace fees Processor and marketplace statements Percentage plus fixed per transaction 8 − Merchant-funded shipping Carrier invoice minus shipping revenue collected Net, not gross 9 − Support and returns allowance Support cost per order, restocking, disposal Often the most estimated line 10 = Pre-acquisition contribution Derived Layer 1 11 − CAC Ad platform spend plus assigned non-platform acquisition cost Define the assignment rule 12 = Post-acquisition contribution Derived Layer 2

Two rules keep this honest. First, shipping is handled net: revenue collected from the customer for shipping is added in step 1 or netted in step 8, never both. Second, nothing fixed enters the waterfall. Salaries, software seats, warehouse rent, and agency retainers belong below contribution, not inside it — unless the contract explicitly moves one of them and says why.

Label the evidence state of every input

A waterfall built from ten inputs of unequal quality produces a number of unequal quality. Tag each line.

VERIFIED — traced to a system of record or an invoice for the period in question.

ESTIMATED — a modeled rate, a blended average, or an allocation. Record the method and the last time it was refreshed.

LAGGED — the true value is not yet known because the window is open (returns, chargebacks, late carrier surcharges).

MISSING — no value available; the line is currently excluded and the margin is overstated by an unknown amount.

NOT APPLICABLE — the cost genuinely does not exist for this scope.

The rule that follows: a decision may only be as strong as its weakest material input. A CAC ceiling built on a MISSING returns line is not a ceiling, it is a guess. Publishing the evidence state beside the number is what stops a growth team and a finance team from having the same argument every month.

The formulas, and what they are allowed to decide

Pre-acquisition contribution per order

pre-acquisition contribution = net revenue − variable non-ad costs

Maximum first-order CAC

At zero post-acquisition contribution, the most you can pay for an acquired order is exactly the pre-acquisition contribution that order produces:

max first-order CAC = pre-acquisition contribution per acquired order

Note the denominator: per acquired order, not per order. If 40% of orders come from returning customers and unassigned organic demand, dividing total contribution by total orders will inflate the ceiling.

Break-even first-order ROAS

break-even first-order ROAS = net revenue ÷ max first-order CAC

which reduces to

break-even first-order ROAS = 1 ÷ pre-acquisition contribution-margin rate

but only when the revenue definition in the ROAS numerator matches the net-revenue definition in the margin rate, and both cover the same period and the same order population. Platform-reported conversion value usually fails that test, because it is credited by an attribution model rather than copied from the ledger. Google documents that attribution settings determine how conversion credit is distributed and that conversion-based bidding uses those values (Google Ads Help, About conversion data).

These are decision boundaries, not targets. A break-even ROAS of 2.8 is a statement about your cost structure and your chosen definitions on a chosen date. It is not an industry target, not a goal, and not portable to another brand or another quarter. If someone quotes a break-even ROAS without naming the margin version it came from, the number has no standing.

Two buffers belong in the conversation. Most brands set an operating ceiling below the break-even ceiling, because break-even leaves nothing for fixed costs. And if the business intends to fund acquisition from future cohort contribution, that intention must be an explicit, bounded amount from Layer 3 — not an assumption smuggled into the first-order math.

A worked example (illustrative only)

The following numbers are invented for demonstration. They are not a benchmark, not a client result, and not a Sharply Labs result. Use the structure, not the figures.

A fictional brand sells three products. All figures are per acquired order, in one currency, under margin contract v1.3.

Line SKU A — Starter kit SKU B — Refill pack SKU C — Bundle --- --- --- --- Gross sales $100.00 $40.00 $180.00 − Discounts $10.00 $0.00 $27.00 − Returns reserve $6.00 $1.00 $13.50 = Net sales $84.00 $39.00 $139.50 − COGS $30.00 $14.00 $58.00 − Pick, pack, fulfillment $6.50 $4.50 $8.00 − Payment fees $3.20 $1.50 $5.50 − Merchant-funded shipping $7.00 $6.00 $4.00 − Support and returns allowance $3.00 $1.00 $5.00 = Pre-acquisition contribution $34.30 $12.00 $59.00 Pre-acquisition margin rate (on net sales) 40.8% 30.8% 42.3% Max first-order CAC $34.30 $12.00 $59.00 Break-even first-order ROAS (on net sales) 2.45 3.25 2.36

Now add observed acquisition cost:

Line SKU A SKU B SKU C --- --- --- --- CAC $41.00 $9.00 $44.00 Post-acquisition contribution −$6.70 $3.00 $15.00

Three readings, three different decisions. SKU C clears its own ceiling with room to spare. SKU B clears it narrowly, but its ceiling is so low ($12.00) that a small cost change flips it — and its shipping line consumes half its contribution. SKU A loses money on the first order, and the reason is visible in the waterfall rather than in the campaign: a 10% discount and a $7.00 shipping subsidy together remove $17.00 before media spend is considered.

Note what the example does not say. It does not say SKU A should be paused. If SKU A is the entry product for a subscription with mature repeat cohorts, a −$6.70 first order may be an intentional, funded position. That answer lives in Layer 3, and it requires cohort evidence, not an assertion.

Keep, Fix, Constrain, Stop

Turn the layered reading into one of four decisions. State the decision, the evidence behind it, and the date it will be revisited.

Keep — post-acquisition contribution is positive, the cohort is mature enough to be credible, and the material inputs are VERIFIED. Continue funding, and consider a bounded scale step while watching marginal rather than average contribution.

Fix — the mechanism is plausible but the inputs are not. Returns data is LAGGED beyond usefulness, the conversion value passed to the ad platform does not match net revenue, CAC assignment double-counts, or a cost line is MISSING. The failure is in the measurement system, not the campaign. Fix the input before you judge the campaign, and put a date on it.

Constrain — the activity is viable only inside a boundary: certain SKUs, certain regions where shipping cost is tolerable, certain cohorts, or a spend cap above which marginal contribution turns negative. Write the boundary into the campaign structure rather than the meeting notes.

Stop — post-acquisition contribution is negative, the cohort has matured, the inputs are VERIFIED, and no credible fix has been identified after an honest attempt. Stopping with documented evidence is a result, not a failure.

Most disputes resolve once a team is forced to choose between Fix and Stop. Those two look identical on a dashboard and are entirely different in cost.

Using contribution margin in campaign decisions without poisoning the bidding

The tempting move is to push contribution margin straight into the ad platform as conversion value. Sometimes that is right. Often it creates a slow, invisible failure, because bidding systems learn from the values they are given and a stale or wrong value trains the system toward the wrong customers.

Google supports setting and changing conversion values, including passing dynamic values from the site (Google Ads Help, Set or change conversion values), and offers conversion value rules for adjusting value by conditions such as location, device, or audience (Google Ads Help, Conversion value rules). Its value-based bidding guidance explains that these strategies depend on the accuracy and consistency of the values supplied (Google Ads Help, Value-based bidding FAQ). That dependency is the whole risk.

Practical guardrails:

Pass only what is knowable at conversion time. Net revenue minus COGS and known per-order fees is often available in the moment. A returns reserve that settles in six weeks is not. Passing a modeled estimate is a defensible choice — passing it without labeling it as ESTIMATED is not.

Change values on a schedule, not reactively. Every change restarts the system's learning against a new value distribution. Batch cost-model updates into a versioned release.

Keep the ceiling outside the platform. CAC ceilings and break-even ROAS are governance decisions. Use them to set targets and approve budget; do not expect the bidding system to enforce economics it cannot see.

Reconcile weekly. Compare platform-reported conversion value against the store's net sales for the same period and the same order population. Investigate the gap before you use either number to move budget. This is the same reconciliation discipline covered in our MER and ROAS budget framework, and it depends on a conversion pipeline you trust — see server-side tracking for paid media.

Do not let margin data replace account hygiene. Structural issues — overlapping audiences, fragmented learning, untested creative — will not be solved by a better value signal. Account structure is addressed in Meta Ads account structure for DTC scaling, and creative learning in our Meta Ads creative testing framework.

Gross margin, contribution margin, MER, ROAS, net profit, LTV

These six get used interchangeably in budget meetings, which is how budget meetings go wrong.

Metric What it measures What it excludes What it can decide --- --- --- --- Gross margin Net revenue minus COGS All non-COGS variable costs, media Product pricing and merchandising, not CAC ceilings Contribution margin Net revenue minus all variable costs (media in or out, by contract) Fixed costs CAC ceilings, SKU and cohort funding MER Total revenue ÷ total paid-media spend Cost structure entirely Period-level efficiency direction ROAS Credited conversion value ÷ spend Costs, and anything the attribution model did not credit In-account routing, diagnostics Net profit Everything, including fixed costs and overhead Nothing Whether the company made money LTV Revenue or contribution from a customer over a horizon Certainty; it is a forecast until the cohort matures How much first-order loss is fundable

The one-line version: gross margin is a product fact, contribution margin is an operating decision boundary, MER and ROAS are efficiency ratios, net profit is the outcome, and LTV is a claim about the future. Contribution margin is the only one of the six that sits between the product and the media decision, which is why it deserves the contract.

Limitations you must state out loud

Every contribution-margin program has these. Name them in the document rather than discovering them in an argument.

Returns lag. Recent periods are systematically flattered until the return window closes. Use a reserve and mark the period LAGGED.

Refunds and partial refunds. Partial refunds and goodwill credits often bypass the returns pipeline and land in a different ledger line.

Inventory accounting. FIFO, weighted average, and landed-cost timing change COGS per unit. A margin computed against a different inventory method will not reconcile to the P&L.

Bundles and multi-SKU orders. Bundle revenue must be allocated across components by a stated rule; there is no neutral rule.

Discount allocation. An order-level discount code has to be spread across SKUs somehow. The method changes SKU rankings.

Mixed currencies and taxes. FX timing and whether prices are tax-inclusive can move a margin rate by more than a creative test ever will.

Shipping revenue versus cost. The most common double-count in the waterfall.

Repeat purchase. First-order contribution understates a subscription or consumable business; cohort contribution understates a one-time-purchase business less than teams assume.

Fixed versus variable ambiguity. Step costs (an extra shift, a 3PL tier) behave as fixed until a threshold and variable after it.

Cohort maturity. A cohort younger than one full purchase cycle cannot support a payback claim.

Attribution duplication. If platforms are summed, acquired orders are overcounted and CAC is understated. Deduplicate against the store before assigning cost — the approach in our DTC LTV cohort framework applies directly, and brand-term incrementality is a frequent culprit, covered in brand bidding incrementality for DTC.

Questions buyers actually ask

Which costs belong in contribution margin?

Every cost that changes when order volume changes: COGS, fulfillment, payment or marketplace fees, merchant-funded shipping, packaging, per-order software fees, and a support and returns allowance. Fixed costs stay out unless the contract deliberately moves one and explains why.

Should ad spend be included?

Both versions are valid, which is exactly why the layer must be labeled. Use pre-acquisition contribution (media excluded) to set CAC ceilings, and post-acquisition contribution (media included) to judge whether acquisition paid for itself.

Do I calculate it per SKU, per order, or per cohort?

Per SKU for assortment and pricing decisions. Per acquired order for CAC ceilings. Per cohort for payback and for deciding how much first-order loss is fundable. They will not reconcile to one another, and they are not supposed to.

How is this different from gross margin?

Gross margin subtracts only COGS. Contribution margin subtracts everything variable. For most DTC brands, shipping, payment fees, and fulfillment together are large enough that a healthy gross margin can sit above a contribution margin that cannot fund any meaningful CAC.

What break-even ROAS should I target?

There is no portable answer. Compute it from your own pre-acquisition margin rate, then set an operating target below break-even so fixed costs are covered. Any break-even ROAS quoted without its margin version and period attached should be ignored.

How often should the model be updated?

Refresh cost inputs on a fixed cadence — monthly is common — and re-version whenever a material input changes: a new 3PL rate card, a freight change, a processor renegotiation, a pricing or discount-policy shift. Between refreshes, keep the version frozen so period comparisons remain valid.

Why can't platform ROAS replace contribution margin?

Because platform ROAS reports credited conversion value against spend, and credit is assigned by an attribution model that the platform also uses for bidding (Google Ads Help, About conversion data). It knows nothing about COGS, shipping subsidies, returns, or fees. Two campaigns with identical ROAS can have opposite contribution outcomes purely from product mix.

Does a positive contribution margin guarantee profit?

No. Contribution margin is what remains before fixed costs. A business can hold a strong contribution margin on every order and still lose money if volume does not cover overhead, or if the payback period outruns available cash. Contribution margin decides whether an activity is fundable; it does not decide whether the company is profitable.

Minimum viable data pack

You do not need a data warehouse to start. You need these, for one defined period, with an evidence state on each:

Store sales report showing gross sales, discounts, returns, and net sales.

COGS per SKU, landed, with the inventory method named.

Fulfillment invoice detail separating per-order and per-unit charges from monthly minimums.

Payment processor and marketplace fee statements.

Carrier invoices plus shipping revenue collected, so shipping can be netted.

A support and returns allowance per order, with its estimation method written down.

Paid-media spend by channel, plus the rule used to assign spend to acquired orders.

New versus returning customer counts from the store, deduplicated against platform-reported conversions.

One cohort table with at least one full purchase cycle of history.

Implementation checklist

Name the finance owner and issue margin contract v1.0.

Define scope, net revenue, the variable-cost taxonomy, timing, and acquisition-cost inclusion in writing.

Build the waterfall with one row per cost line and an evidence state per row.

Compute Layer 1 and publish the max first-order CAC and break-even ROAS with the version and date attached.

Compute Layer 2 by channel and by SKU; label CAC assignment rules.

Build one cohort table for Layer 3 and refuse payback claims on immature cohorts.

Assign every material segment a Keep, Fix, Constrain, or Stop decision with a revisit date.

Reconcile platform conversion value against store net sales weekly before any budget move.

Batch cost-model changes into versioned releases; never adjust values mid-test.

Review the contract monthly and re-version on material change.

Contribution margin will not make a campaign work. It will tell you, before you spend more, whether a working campaign is worth funding — and when the answer is no, it will tell you which line in the waterfall is responsible.

Where this fits in a growth program

The framework above is measurement design, not media execution. It sits underneath channel work for e-commerce and DTC brands and informs the budget and testing decisions inside a growth and paid acquisition program.

Talk it through with us

This conversation suits DTC and e-commerce teams scaling paid media while revenue, returns, cost inputs, and finance definitions refuse to reconcile. It is not for teams looking for a channel audit or a quick account fix.

In a scoped diagnostic conversation we examine three things: the data contract behind your revenue and cost definitions, the variable-cost waterfall and where its inputs are verified, estimated, lagged, or missing, and the decision thresholds your team currently uses to release or hold budget.

You leave with a scoped diagnostic and an evidence list — what is trustworthy today, what is not, and what would have to be true before a budget decision is defensible. We do not promise a profit outcome, a ROAS figure, or a budget result. Those depend on your cost structure, your data, and decisions you own.