Splitting Shared Costs Without Distorting SKU Margin

If your DTC channel looks more profitable than wholesale only because shared costs landed somewhere convenient, you are not measuring margin. You are measuring allocation. Shared warehousing, team time, software and brand spend do not belong to one channel by default, and the moment those costs are split arbitrarily, SKU margin stops being comparable. This tutorial shows how to build a defensible allocation model for shared overhead across DTC, marketplace and wholesale, using your ecommerce data without inventing precision that does not exist.

First, we establish why your channel comparison is only as honest as your allocation. Then we borrow activity-based costing principles while skipping accounting theatre. You will learn four cost drivers: warehousing and fulfilment, team time, software and the data stack, and brand and market-level spend. We will set rates that survive scrutiny, walk through one SKU across three channels, and define review rules that keep comparisons honest. The goal is not perfect costing. It is defensible costing that supports better product mix, pricing and channel decisions.

Your Channel Comparison Is Only As Honest As Your Allocation

Most brands compare DTC, marketplace and wholesale margin using a contribution figure that loads every channel with the same overhead per order, or none of it at all. Both answers are wrong before you start.

Warehousing, team, software and brand costs are shared. Allocate them by revenue share or order count and you have decided the answer before you asked the question.

Two failure modes follow. Allocate nothing and every channel looks profitable, so nothing gets fixed. Allocate by revenue and your biggest channel absorbs overhead it did not cause. Wholesale looks like the hero, DTC looks like the problem.

Channel dashboards make this worse. They show channel-attributed cost only, so shared overhead disappears from the view exactly where it matters most. That is the Dashboard Illusion, and it survives because your ecommerce data stack is built around transaction events, not profit events.

Get the drivers right and your product profitability report stops ranking channels by visible cost. It tells you which channel genuinely earns its keep.

Borrow Activity-Based Costing, Skip the Accounting Theatre

The fix is not a new dashboard. It is one principle from activity-based costing: overhead follows the activities a product or channel consumes, not the number of units shipped. In 1985, a survey of American manufacturers found overhead averaged 35% of production costs and was climbing while direct labour fell (CPA Journal). That is historical manufacturing evidence, not a modern ecommerce benchmark.

Translate it. In ecommerce, pick, pack and ship labour is a smaller share of cost than the platform fees, storage, team time and brand spend behind each order. A wholesale pallet and a DTC parcel consume different activities, even at identical revenue.

The model rests on four moves:

  1. Identify the activities.
  2. Pick a driver for each.
  3. Set a rate.
  4. Allocate and review.

This is not a replacement for statutory accounts. It does not need to be perfect. It needs to be defensible enough that two people looking at the same SKU agree on the number. For the order-level view that makes those numbers usable, see order-level profitability.

Driver One: Warehousing and Fulfilment

Storage, pick, pack and dispatch are separate activities. The driver is cubic volume held per SKU per month plus picks per SKU, not order count. A bulky slow mover and a small fast mover consume space and handling differently.

Marketplace fulfilment and wholesale pallet out change the mix. One wholesale order of 400 units is one pick and one pallet. Four hundred DTC orders are 400 picks and 400 parcels. Allocating per order hides that asymmetry completely.

Split the cost pool before you allocate. Rent, labour, packaging consumables, and marketplace storage or long-term inventory surcharges do not belong in one bucket at one rate.

For a storage rate: take monthly warehouse cost, subtract the share tied directly to inbound and returns, then divide the remainder by total cubic-metre-days. That gives a rate per SKU.

Honest limitation: cubic volume requires dimension data on every SKU. Most ecommerce data collection starts with incomplete product records. Estimate gaps, label estimates, and tighten them over time.

Get this driver wrong and every downstream channel comparison inherits the distortion. For a related discussion on unit economics, see our Frequently Asked Questions.

Driver Two: Team Time

Team time is the hardest driver to see and the easiest to misallocate. The activity is human attention, and the driver is hours or a percentage of time logged by function: merchandising, marketplace listing management, wholesale account management, customer service, finance.

Do not allocate salary by revenue share. A wholesale account taking three hours a month of account management and a marketplace channel requiring a full-time listing manager are not equivalent cost centres, even at similar revenue. That marketplace channel consumes a salary; the wholesale account consumes a fraction of one.

Set the rate from fully loaded cost divided by available hours, then apply a realistic utilisation factor. If your team is 18 people and half their week is channel-specific, that half belongs to a channel, not to the business as a whole.

Start coarse. Function-level percentages reviewed quarterly beat an unmaintained timesheet system nobody fills in. Precision you cannot sustain is worse than a rough number you trust, and performance marketing data suffers the same problem when attribution is treated as exact.

This is where the Profit Accountability Gap bites. When team time is never allocated, the channels that quietly consume the most internal effort look the most profitable on paper. The margin looks clean because the labour behind it is invisible.

Driver Three: Software and the Data Stack

Team time gets you most of the way. The software stack and the labour of keeping it joined up carry their own distortion. The activity is tooling plus reconciling fragmented sources. Drivers: seat counts, transaction volume, connector count per channel.

Split the stack into three pools: platform-level tools (accounting, ERP, analytics ecommerce reporting), channel-specific tools (marketplace repricing, wholesale portals, DTC subscription apps), and data infrastructure. Only platform-level tools need a shared rule. Channel-specific tools land wholly on their channel. Treating a marketplace repricing tool as shared overhead is cost-shifting, not allocation.

For platform-level tools, order volume is the fairest driver, with a floor so a small channel still carries its seat cost. Name the real cost: the labour of reconciling fragmented sources. If someone spends a day a week rebuilding the same product profitability report, that is a cost driver and it belongs in the model. That manual rebuild is how brands end up growing into a problem they can’t see.

Driver Four: Brand and Market-Level Spend

The activity here is demand creation and brand equity, and its drivers blend: attributed sessions or reach for awareness spend, new customer counts for acquisition spend, and a deliberate fixed share for pure brand work.

Be blunt with your team about this pool. It is the least precise and the most politically loaded. Wholesale and marketplace routinely benefit from brand spend without paying for it, while DTC carries the whole bill. That gap is one reason DTC brand unit economics look worse than they are.

Split the pool in two. Allocate acquisition spend to the channel that generated the customer. Allocate brand spend by a stated rule, such as revenue share, agreed in advance and not renegotiated when a channel looks weak.

Never let brand spend hide inside a blended CAC. Blunt-Instrument Budget Cuts start here, because a channel-level CAC carrying unallocated brand cost makes the wrong channel look expensive.

Record the assumption in writing beside the number. A stated rule everyone accepts beats a precise-looking figure nobody can explain.

Setting Rates That Survive Scrutiny

Every rate is a division: cost pool divided by driver volume. Document three things alongside it, the pool definition, the driver, and the period the rate covers. Without that period, a rate from March gets applied to July volume and nobody notices.

Rebuild on a fixed cycle. Monthly for high-volatility pools, fulfilment labour and marketplace storage, where rates can shift materially inside a quarter. Quarterly for team time and brand, where function-level percentages move slowly and rebuilding them more often wastes the effort. The same discipline applies to how you calculate lifetime profit instead of lifetime revenue, where cohort assumptions need a stated review date or they quietly age.

Do not chase precision. Two decimal places on an allocation that moves 20% month to month is invented precision. It makes the model look more reliable than it is.

Test sensitivity. Move any rate by 15% and see whether a channel flips from profitable to unprofitable. If it flips, that channel is marginal, and the model is telling you something real.

Keep one page of assumptions. Anyone in the leadership team should be able to read it and reproduce the allocation for a single SKU by hand.

Worked Example: One SKU, Three Channels

With rates set, run one SKU. Landed cost £9. Sell at £34 DTC, £29 marketplace, £17 wholesale. DTC uses 0.04 m³ for 40 days, one pick per order, £1.40 packaging, 6% payment fee. Marketplace uses same storage plus 15% referral and 3% fulfilment, no DTC pick. Wholesale uses pallet storage, one pick per 400 units, minimal packaging, and 30 days’ credit. That credit carries a working capital cost most models omit. Allocate shared pools by drivers. Wholesale can show the highest gross margin percentage. After storage, account management and credit cost, it earns less contribution per unit. That is the distortion. The same blindness makes PPC for Ecommerce: Why ROAS Is Lying to You so costly: revenue metrics flatter channels hiding real cost.

The Review Rules That Keep Comparisons Honest

The worked example only holds if the model is governed. Five rules keep it that way.

Rule one: no rate changes without a written reason. A rate moved to make a channel look better is a decision, and decisions get logged beside the number. Log the change, the reason, and who signed it off.

Rule two: review drivers when the business changes shape, not on a fixed calendar alone. A new marketplace, a warehouse move or a wholesale tier change invalidates the old driver before the quarter ends. Reorganisation is the trigger, not the quarter.

Rule three: publish channel margin after shared allocation and before it, side by side. The gap between the two is the story. Showing only the post-allocation figure is how the Dashboard Illusion survives.

Rule four: flag any SKU where allocated overhead exceeds 25% of gross contribution. Treat that as a management threshold, not a standard. These SKUs are where the model earns its keep, and usually the ones nobody has examined properly.

Rule five: revisit the model when it stops changing decisions. If allocation has not altered a single pricing, channel or range decision in two quarters, either the business is genuinely clean or the drivers have gone stale.

Defensible Beats Perfect

Those review rules are what keep the model honest. Without them, allocation becomes an accounting exercise that confirms whatever the loudest voice in the room already believed.

You do not need perfect drivers. You need drivers you can explain to your leadership team, rates you can rebuild from source data, and review rules that stop the model drifting into fiction. Precision beyond that is invented.

The shift in thinking: a channel is not profitable because its margin percentage is highest. It is profitable because it covers the warehousing, team, software and brand cost it actually causes. A wholesale account with a flattering gross margin can still earn less contribution per unit once storage, account management and credit terms are loaded.

Build the model once. Keep the assumptions on one page. Let it tell you where margin is real and where it is arithmetic. That is Commercial Clarity, and it is the only version of channel margin worth acting on.

Conclusion

Splitting shared costs is not about perfect precision. It is about honest drivers you can explain, rebuild, and defend. Focus on the four cost drivers: warehousing and fulfilment, team time, software and data, and brand or market spend. Then set rates that survive scrutiny and review them with rules, especially flagging SKUs where allocated overhead exceeds 25% of gross contribution. This turns channel margin from an arithmetic comfort into a decision tool.

Build the model once. Keep assumptions on one page. Review it when it stops changing pricing, channel, or range choices. Do not chase invented accuracy. Chase Commercial Clarity. Start with one SKU, three channels, and the next decision you need to make. That is margin you can act on.