Most direct-to-consumer brands can tell you their gross margin to the decimal point and cannot tell you which sales channel actually funds the business. That is not a bookkeeping failure. It is a reporting choice: the profit and loss statement your accountant produces is organized for tax and audit purposes, and it aggregates by expense type rather than by the channel that generated the expense.
A contribution margin report fixes that. It re-cuts the same dollars so each channel carries the costs it caused, and it stops at the line where costs become genuinely shared. Built properly, it answers the only question that matters when you have one more dollar of inventory, ad budget or headcount to place: where does that dollar earn the most, and where is it quietly subsidizing a channel that has never paid for itself.
In short
- Blended contribution margin averages a healthy channel against a losing one, so the report conceals the exact decision it exists to inform.
- Above the contribution line sits every cost that moves with the order: landed COGS, outbound shipping, payment fees, pick and pack, returns and channel-attributable marketing.
- Shipping and returns break most channel P&Ls, because both are billed centrally and then allocated by revenue share instead of by the parcel that caused them.
- Wholesale usually looks worse on margin rate and better on contribution dollars per hour of team time, which is why rate alone is a poor allocation rule.
- A usable report is monthly, fits on one page, shows dollars and rate side by side, and reconciles to the general ledger within a stated tolerance.
Why blended numbers hide the channel that is losing money
Blending is arithmetic averaging, and averaging destroys exactly the information you need. A brand doing $400,000 a month at a 32% blended contribution margin looks stable. Split it into $250,000 of D2C at 41% and $150,000 of marketplace at 17%, and the picture changes: the marketplace channel is consuming working capital, warehouse hours and inventory that the D2C channel paid for.
The failure is structural rather than occasional. Channels differ in the three cost lines that swing hardest: acquisition cost, fulfillment cost per unit and return rate. Those three lines rarely move together, so a single blended figure sits somewhere in the middle and describes no channel accurately. The average is real; it is just not actionable.
It gets worse when a channel is growing. Growth in a low-contribution channel raises revenue, raises the warehouse bill, raises the payment processing bill, and lowers the blended rate slightly. The board deck reads “revenue up 18%, margin down 90 basis points” and the conversation turns into a hunt for supplier savings. The real cause was mix, and nobody in the room can see it because the report does not carry channel as a dimension.
There is a second, subtler cost to blending. It removes accountability. When a marketplace manager and a paid social manager are measured against the same blended target, neither owns a number they can move. Channel-level contribution gives each owner a figure that responds to their decisions within a month, which changes behavior faster than any incentive scheme.
The three questions a channel P&L has to answer
Before building anything, be clear on what you want the report to settle. In practice it comes down to three questions, and a report that answers them is finished, whatever else it lacks.
- Which channels generate positive contribution dollars after every cost that moves with the order?
- If we add $50,000 of inventory or ad spend next month, which channel returns the most contribution per dollar deployed?
- Which channels are near a capacity limit, so that extra dollars will not convert into extra contribution regardless of the rate?
Anything that does not help answer one of those three questions is decoration. The temptation with a first channel P&L is to build forty rows of granularity, most of which nobody looks at after month two. Resist it. The reporting habit matters more than the resolution, and a coarse report produced every month beats a precise one produced twice.
Channel profitability is one of several financial disciplines that separate brands that scale from brands that stall, a theme running through our overview of the retail business landscape. Contribution reporting is where most of them start, because almost every other decision depends on knowing which channel pays.
This channel view is one layer inside a larger financial picture. If you are still setting up the basic structure of the statement itself, the sequence in retail margin structure every D2C founder must master covers what belongs on each line before you start slicing by channel. Get the vertical structure right first, then cut it horizontally.
What belongs above the contribution line and what does not
Contribution margin is revenue minus variable costs. The definition is simple and the argument is always about which costs count as variable. The workable test: if you sold one more unit through this channel tomorrow, would this cost increase? If yes, it belongs above the line. If the cost would be identical whether you sold zero units or ten thousand, it belongs below.
That test resolves most disputes quickly. Your warehouse lease does not change when you ship one more parcel, so it sits below the line. The corrugated box, the label, the pick labor and the carrier charge for that parcel all increase, so they sit above it. The standard accounting treatment is described plainly in the contribution margin literature, though the classification choices below are operator conventions rather than accounting requirements.
| Cost line | Treatment | Why |
|---|---|---|
| Product cost (landed, including inbound freight and duty) | Above | Scales one-for-one with units sold |
| Outbound shipping and packaging | Above | Caused by the individual order |
| Payment processing and marketplace commission | Above | A percentage of each transaction |
| Pick, pack and 3PL per-order fees | Above | Billed per order or per line |
| Returns processing, refunds and refurbishment | Above | A function of order volume and channel mix |
| Channel-attributable paid media | Above | Directly traceable to the channel that spent it |
| Warehouse rent and fixed 3PL minimums | Below | Unchanged by the next order |
| Salaried headcount, including channel managers | Below | Fixed within the reporting period |
| Software, tooling and platform subscriptions | Below | Tiered, not per-order |
| Brand marketing with no channel destination | Below | Allocation would be arbitrary |
| Depreciation, interest and overhead | Below | Financing and capital structure, not operations |
The gray zone, and how to settle it
Three lines cause almost every internal argument. The first is the salaried channel manager: their cost is fixed this month but clearly attributable to one channel. The second is warehouse labor, which is fixed in the short run and variable across a quarter as you add shifts. The third is brand marketing that lifts every channel without being traceable to any of them.
The pragmatic answer is to keep all three below the contribution line and show them as a separate “channel direct fixed costs” block underneath. That gives you two useful numbers instead of one: contribution margin for marginal decisions, and channel operating margin after direct fixed costs for structural decisions such as whether to keep the channel at all.
What you must not do is allocate those costs by revenue share and pretend the result is contribution margin. Revenue-share allocation mechanically makes your largest channel absorb the most overhead, which makes it look worse and makes small channels look artificially healthy. That single choice has justified more bad channel decisions than any other line in D2C finance.
Document the rules once, then freeze them
Write the classification rules down in a one-page memo and date it. Every month somebody will want to reclassify a line, usually because the number came out unfavorably. A dated memo turns that into an explicit change with a before-and-after comparison rather than a silent revision that breaks your trend line.
Change the rules when the business genuinely changes, for example when you move from a 3PL to your own warehouse. Restate at least six months of history when you do, or you will spend the next two quarters explaining a discontinuity that is an artifact of your own methodology.
Allocating shipping, payment fees and pick-pack honestly
Fulfillment is where channel P&Ls most often go wrong, because the bills arrive centrally. Your carrier sends one invoice, your 3PL sends one invoice, your processor sends one statement, and the path of least resistance is to split each by revenue. That split is almost always wrong, and it is wrong in a consistent direction: it flatters the channel with heavy, cheap, frequently returned orders.
Shipping: charge the channel that caused the parcel
Outbound shipping should be allocated at the order level, not the channel level. Most carrier invoices are available as a line-item file, and most order management systems store a shipment ID against each order. Join those two on shipment ID and you have true shipping cost per order, which rolls up to a true cost per channel.
If you cannot get to order-level data yet, the interim approach is a weighted parcel model rather than a revenue split. Take the average billable weight and zone for each channel from a sample of 200 to 400 shipments, price them against your rate card, and use that as the per-order rate until the join is built. The error will be a few percentage points, which is tolerable; a revenue split can be off by twenty.
Remember to net out shipping revenue where the customer paid for it, and to hold free-shipping thresholds in the same line. A threshold is a marketing decision expressed as a fulfillment cost, and it belongs to the channel that offered it. The pressure on those thresholds heading into peak season is covered in our analysis of free-shipping thresholds before Black Friday, and any change there flows straight into this line.
Payment fees vary more than operators expect
Processing costs are not a flat percentage across channels, and treating them as one hides real money. Card-present retail runs cheaper than card-not-present e-commerce. Wallet transactions, buy-now-pay-later and international cards each carry different economics. Marketplace commission is a different animal again, typically 8% to 15% of gross depending on the category, and it should sit in this block rather than being buried in a marketing line.
Pull the effective rate per channel from three consecutive months of processor statements rather than using the headline rate on your contract. Interchange-plus pricing means the realized rate drifts with card mix, and the gap is frequently 30 to 60 basis points.
Chargebacks and dispute fees belong here too. They concentrate heavily in specific channels, usually the ones with the fastest checkout and the least identity friction, and a channel with a 0.6% dispute rate is materially different from one at 0.1% even when both look identical on gross margin.
Pick, pack and the cost of a wholesale carton
The per-order fulfillment cost of a wholesale shipment and a D2C shipment are not comparable, and this is where wholesale earns back some of what it loses on price. A single wholesale purchase order might move 400 units in twelve cartons on one pallet. The equivalent D2C volume is 400 separate picks, 400 boxes, 400 labels and 400 carrier scans.
Bill each channel for what it consumes: per-line pick fees for D2C, per-carton and pallet fees for wholesale, plus any EDI, labeling or compliance charges the retailer imposes. Retailer chargebacks for late delivery or incorrect labeling are a genuine variable cost of the wholesale channel, and leaving them out is one of the more common ways a wholesale P&L is overstated.
The same discipline applies to the underlying unit economics of each order type. If you have not yet nailed down per-order costs at that level, the framework in D2C unit economics every founder should be able to defend is the prerequisite for a credible channel report. Channel contribution is unit economics summed correctly, and it cannot be more accurate than the unit numbers underneath it.
Marketing cost per channel when campaigns overlap
Marketing is the line where finance and growth teams stop agreeing. The finance instinct is to allocate all spend somewhere. The growth instinct is to argue that a paid social impression drove a marketplace purchase two weeks later, so no channel split is honest. Both positions have merit, and the resolution is to separate spend into three buckets and treat each differently.
Bucket one: directly attributable spend
Some spend has an unambiguous destination. Marketplace sponsored product ads can only produce marketplace sales. A retail media campaign inside a grocer’s app can only produce sales at that grocer. Search campaigns pointing at your own domain can only convert on your own site. Assign these at full cost to their channel and move on.
This bucket is usually 60% to 80% of total paid spend for a mid-sized D2C brand, which means most of the allocation problem solves itself before you reach anything contentious. Build the report so this bucket is visible on its own row, because it is the portion of marketing that a channel owner can genuinely control month to month.
Bucket two: shared spend that lifts several channels
Upper-funnel video, influencer partnerships and brand search fall here. There are three defensible methods, and the important thing is picking one and holding it rather than finding the theoretically perfect answer.
- Leave it unallocated below the contribution line as a brand investment. Cleanest, most conservative, and it keeps channel contribution figures comparable over time.
- Allocate by new-customer count per channel rather than by revenue. This at least ties the split to the thing upper-funnel spend is supposed to produce.
- Allocate by incrementality test results, if you run geo holdouts or matched-market tests. Best evidence, highest cost, and only worth it above roughly $200,000 of monthly shared spend.
Whichever you choose, show the unallocated version alongside it for at least one quarter. If a channel is only profitable under one allocation method, that is a finding in itself and it should be discussed openly rather than settled by whoever builds the spreadsheet.
Bucket three: retail media and trade spend
Wholesale and marketplace channels carry costs that never appear in an ad platform: slotting fees, promotional funding, co-op advertising, markdown allowances and volume rebates. These are not marketing in the general ledger sense but they behave exactly like channel-attributable acquisition cost, and excluding them is the single largest reason wholesale P&Ls look better than they are.
Ask your finance team for the full deduction schedule from each retailer, not just the invoiced amounts. Deductions are frequently taken off remittance rather than billed, which means they never pass through an expense account where a channel report would find them. Retail media budgets are growing quickly across the sector, and our piece on how retail media funds holiday margin rather than the shelf price explains why these line items keep expanding faster than the shelf economics behind them.
Returns: the cost that ruins otherwise good channels
Returns are the most commonly understated line in a channel P&L, and the reason is that most systems record a return as negative revenue and nothing else. The refund is captured. The freight both ways, the labor to inspect and restock, the packaging that cannot be reused and the units written down to clearance are recorded somewhere else entirely, if at all.
The result is that a channel with a 4% return rate and a channel with a 22% return rate can appear within a few points of each other on gross margin while being on opposite sides of the contribution line. Apparel, footwear and anything sized are the obvious cases, but the pattern shows up in electronics and home goods whenever a channel’s merchandising sets weak expectations.
The five costs inside a single return
| Component | Typical treatment | Why it is missed |
|---|---|---|
| Refunded revenue | Netted against gross sales | Usually captured correctly |
| Original outbound shipping | Not recovered on refund | Sits in the fulfillment line with no link to the return |
| Return freight | Paid by the brand in most D2C programs | Billed on a separate returns account |
| Inspection, restock and repackaging labor | Per-unit 3PL charge or internal labor | Buried in a monthly 3PL invoice total |
| Value lost on resale | Clearance markdown or write-off | Recorded as inventory adjustment, never linked to channel |
Add those five together and a returned $80 order rarely costs $80. Depending on category and freight, the true cost is commonly $95 to $115 once the unit is resold at a markdown, which means the return does not simply erase the sale, it eats into the contribution generated by a different order.
Model returns as a rate, then reconcile to actuals
Build the report with a returns provision per channel expressed as a percentage of gross revenue, calculated from a trailing 90-day window. Using a trailing window matters because returns lag sales, and a fast-growing channel will always understate its return cost if you compare this month’s returns to this month’s sales.
Then reconcile quarterly to actual return costs from your 3PL and carrier invoices. If the provision is off by more than a couple of points, adjust the rate rather than restating history. Aim for directionally right every month and precisely right every quarter.
One practical warning: return rate is a property of the channel and the merchandising, not just the product. The same SKU sold through a marketplace with thin listing copy and no size guidance will come back at a materially higher rate than through your own site. That difference belongs to the channel, because the channel caused it.
Wholesale, marketplace and D2C compared on the same basis
Once the cost rules are fixed, the comparison becomes genuinely useful. The table below works through a simplified but realistic month for a brand doing roughly $500,000 across three channels, with the same product at the same landed cost in each. The figures are illustrative rather than benchmarks, and your own numbers will differ by category.
| Line | Owned D2C | Marketplace | Wholesale |
|---|---|---|---|
| Gross revenue | $250,000 | $150,000 | $100,000 |
| Returns and refunds | ($22,500) 9.0% | ($21,000) 14.0% | ($2,000) 2.0% |
| Net revenue | $227,500 | $129,000 | $98,000 |
| Landed product cost | ($77,000) | ($46,200) | ($52,000) |
| Payment fees or commission | ($6,900) 2.8% | ($21,000) 14.0% | $0 |
| Outbound shipping and packaging | ($23,800) | ($13,500) | ($3,100) |
| Pick, pack and 3PL per-order | ($9,400) | ($5,600) | ($1,900) |
| Returns handling and markdown loss | ($8,200) | ($9,100) | ($400) |
| Attributable marketing or trade spend | ($47,500) | ($16,500) | ($9,000) |
| Contribution dollars | $54,700 | $17,100 | $31,600 |
| Contribution rate on gross | 21.9% | 11.4% | 31.6% |
Several things in that table run against intuition. Wholesale carries the worst gross margin by a wide distance, taking roughly 47% off the top on price alone, and still finishes with the highest contribution rate. It gets there by avoiding almost every per-order cost that D2C absorbs: no payment fees, minimal outbound freight per unit, almost no returns.
Marketplace is the opposite trap. Its gross margin looks close to D2C, but a 14% commission and a 14% return rate combine to strip more than half the contribution before marketing is counted. This is a channel that can be perfectly rational to operate for reach and discovery while being close to break-even on its own economics, which is a defensible strategy only if you have said it out loud.
Rate is not the decision, dollars usually are
The instinctive read of that table is to push everything into wholesale, which has the best rate. That is usually wrong. Wholesale contribution is capped by the retailer’s order cadence and shelf space; you cannot decide to sell 40% more next month. D2C contribution is elastic to spend within a range, so the marginal dollar often earns more there even at a lower rate.
This is also why the wholesale decision is strategic rather than purely financial. The trade-offs on control, pricing and customer data are laid out in wholesale versus D2C for retail brands adding channels, and a contribution report should inform that choice without settling it on rate alone.
Sanity-check against the wider market
Channel mix shifts across the whole sector, not just inside your business, and it is worth knowing whether your D2C share is moving with the market or against it. The US Census Bureau publishes quarterly e-commerce and total retail sales figures that give a neutral baseline. If your owned-channel share is falling while the national e-commerce share is rising, the cause is competitive rather than structural.
Using the report to decide where the next dollar goes
A contribution report earns its keep at the point of allocation. The rule is straightforward: deploy the next dollar where marginal contribution per dollar is highest, subject to the constraint that the channel can absorb it. Both halves of that sentence matter, and operators routinely apply the first while ignoring the second.
Track marginal, not average
Average contribution rate describes the dollars you have already spent. Marginal contribution describes the next ones, and it is almost always lower, because acquisition costs rise as you extend reach within a channel. A channel averaging 22% might return 12% on incremental spend once you are past the efficient audience, which changes the allocation answer completely.
Estimate it by comparing contribution dollars against spend across the last six months at different spend levels. It is a crude regression and still far better than assuming the average holds. Confirm with a deliberate step-up test in one channel for one month.
Respect the capacity ceiling
Every channel has a limit that money does not move. Wholesale is capped by purchase orders. Marketplace is capped by category demand and algorithmic placement. Even paid social is capped by audience size before frequency rises and efficiency falls. Note the ceiling next to each channel in the report so allocation conversations start with what is achievable rather than what is theoretically optimal.
Run it monthly and keep it on one page
The cadence that works is a monthly close producing a single page: one column per channel, contribution dollars and rate on the bottom two rows, prior month and prior year alongside. Review it in the same meeting every month with the channel owners present. Reports reviewed irregularly get argued with; reports reviewed on a fixed cadence get acted on.
Investors read these numbers the same way, and a brand that can produce a channel-level contribution report without a two-week scramble signals operational maturity well beyond its revenue. That signal matters more in the current funding climate, as the pattern in what retail tech investors are funding in the AI cycle makes clear: diligence has moved toward durable unit economics and away from growth rate alone.
Contribution reporting sits alongside funding, hiring and exit planning as a core discipline, and the wider context is in our guide to the retail business landscape. Build the report before you need it, because the month you need it is the month you have no time to build it.
One note on scope: this article is general information about management reporting practice, not accounting, tax or financial advice. Contribution margin is a management convention rather than a defined figure under US GAAP or IFRS, so your classification choices will not match your statutory accounts exactly. Speak to your accountant or CFO before using any of these figures for statutory reporting, lender covenants or investor materials.
FAQ on contribution margin
What is the difference between gross margin and contribution margin?
Gross margin subtracts only the cost of goods sold from revenue. Contribution margin subtracts every cost that varies with the sale, which adds shipping, payment fees, pick and pack, returns and channel-attributable marketing. A brand can carry a 68% gross margin and a 14% contribution margin, and the second number is the one that tells you whether the channel funds the business.
What is a good contribution margin for a D2C brand?
There is no universal benchmark, because it depends heavily on category, price point and return rate. As a working range, many operators target 25% to 35% contribution on gross revenue for owned D2C, with anything below 15% treated as a channel that needs a plan. Judge your own figure against your fixed cost base rather than against a published average, since the only question that matters is whether total contribution covers overhead with room left over.
Should salaries be included in contribution margin?
Generally no, because salaried headcount does not change with the next order. The useful exception is to show channel-specific salaries in a separate block immediately below the contribution line, giving you a channel operating margin as well. Keep them out of contribution itself so the figure stays valid for marginal decisions such as where to place the next ad dollar.
How should I allocate marketing spend that touches multiple channels?
Split spend into directly attributable and shared. Assign directly attributable spend at full cost to its channel, which usually covers the majority of the budget. For shared upper-funnel spend, either leave it unallocated below the contribution line or allocate by new customers acquired per channel, and disclose which method you used.
Why does my wholesale channel show a better contribution rate than D2C?
Wholesale trades gross margin for cost avoidance. You give up roughly 40% to 50% on price, then avoid payment processing, per-order shipping, per-order pick fees and most returns. Whether that still holds after trade spend, deductions, markdown allowances and retailer chargebacks depends entirely on whether you have captured those deductions, which many brands do not.
How often should the report be produced?
Monthly, as part of the close, with a quarterly reconciliation of the returns and fulfillment provisions to actual invoices. Weekly is too noisy for channel-level decisions and creates false urgency around normal variance. Quarterly is too slow to catch a channel drifting below the line before it has consumed a full quarter of working capital.
What data do I need before I can build one?
At minimum: order-level revenue with a channel tag, landed product cost by SKU, order-level or channel-level shipping cost, processor statements showing effective rates per channel, 3PL invoices with per-order detail, and a returns log with dates and channel. The join between orders and carrier invoices is usually the hardest piece and the one worth building first, since shipping is where revenue-based allocation does the most damage.
Can a channel with negative contribution ever be worth keeping?
Yes, but only for a stated reason with a stated end date. Common valid reasons include buying customer data you cannot get elsewhere, meeting a minimum volume that unlocks better supplier pricing, or holding shelf presence during a category shift. What is not valid is keeping it because revenue would fall, since revenue that destroys contribution makes the business smaller in every way that matters.
How do I handle discounts and promotions in the report?
Record them as a deduction from gross revenue in the channel that ran them, never as a marketing cost. Promotions are a price decision and they belong on the revenue line so that your realized average selling price per channel stays honest. Burying discount depth in a marketing line makes a discount-driven channel look like an efficiently marketed one.