How to Calculate SKU Profitability
SKU profitability is contribution margin per unit: price, less that unit's cost of goods, less its share of shipping, payment fees and packaging. The allocation method decides the answer. Splitting shipping evenly across units flatters heavy products and penalises light ones, which is why bestsellers and best-margin products so rarely match.
Written by Deepa Swaroop · Co-founder, NetNet
Updated September 6, 2026 · 4 min read
Every catalogue contains products that lose money, and almost every store is surprised by which ones.
The reason is structural. Gross margin is easy to calculate and gets calculated. Contribution margin per unit requires allocating costs that were never incurred per unit, so it gets skipped — and the gap between the two is where the losing products hide.
Why gross margin ranks the catalogue wrongly
Gross margin per product is straightforward: price minus cost of goods. It is also blind to everything about the product that affects what it costs to sell.
A lightweight accessory and a heavy homeware item can both carry a 63% gross margin. Ship them and the resemblance ends. The accessory adds almost nothing to parcel weight and rides along inside a box that was already going. The homeware item drives the box size, pushes the parcel into a higher dimensional band, and attracts an oversize surcharge on remote deliveries.
By the time both have paid for their own delivery, one is at 55% contribution margin and the other is at 18%. Nothing in the gross margin column suggested a difference.
The allocation problem, stated honestly
Shipping, packaging and payment fees are incurred per order, not per unit. Pushing them down to SKU level requires an allocation, and every allocation is a judgement.
Three bases are defensible, and they are not interchangeable:
Even split per unit. Simple, and wrong in the specific way that matters. It charges every unit the same delivery cost regardless of what it contributed to the parcel, which systematically flatters heavy products.
By weight or volume share. The best default for shipping and packaging. A unit that is 60% of a parcel’s billable weight carries 60% of the label.
By revenue share. Correct for payment fees, which genuinely do scale with order value, and wrong for shipping, which does not care what anything cost.
The important discipline is not picking the perfect basis. It is picking one, writing it down, and using it consistently — because the value of these numbers is comparative. A ranking produced by a consistent method is useful even if any individual figure carries an error bar.
Variant level, not product level
Run this on variants rather than parent products.
Sizes differ in cost and in shipping weight. Colours can differ in supplier price and in return rate. A parent product showing a healthy blended margin routinely contains one variant that loses money on every unit and another that carries the whole line.
Apparel is the clearest case: the largest sizes often cost more to make, weigh more to ship, and return at higher rates. Averaged into a parent product, all three effects disappear.
Two numbers, not one
Contribution margin per unit answers whether the item earns its place. It does not tell you how much the store depends on it.
Multiply by units sold and you get total margin contribution — how much of the store’s contribution margin this SKU is responsible for. The two together drive different decisions.
High margin per unit, low total contribution: a good product nobody knows about. A merchandising and promotion problem.
Low margin per unit, high total contribution: the product carrying your revenue at a rate you cannot really afford. Usually the most dangerous position on the list, because volume disguises it and any correction touches the store’s biggest line.
High on both: protect the stock position. This is the product you cannot afford to run out of.
Low on both: discontinue, unless basket effects justify it.
Basket effects, and when not to cut
The one thing per-unit analysis cannot see is what a product does for the orders it appears in.
An accessory with thin margin that appears in a third of orders may be lifting average order value across the whole store. Removing it improves the SKU-level table and reduces total margin — a decision that looks correct in the spreadsheet that prompted it and is wrong in the accounts three months later.
Before cutting a weak SKU, check two things: what proportion of its units ship alone, and what the average order containing it is worth compared to the average order without it. If it rarely ships alone and the orders containing it are larger, it is doing a job the per-unit figure was never going to show.
Where the numbers usually break
Missing landed cost. Supplier price recorded, inbound freight and duty ignored. On imported goods this understates cost materially, and it does so unevenly across the catalogue.
Bundles. A bundle SKU with no cost of its own reports as pure margin. Every bundle must explode into components before any of this works.
List price instead of realised price. Any product regularly discounted sells below list, and the difference lands entirely in the margin figure. This one compounds, because the products that get discounted most are usually the ones already under margin pressure.
Stale costs. A supplier price rise applied retroactively recosts historical orders and changes last quarter’s rankings. Cost changes need effective dates.
Returns left out. A product returning at twenty percent carries the full cost of those returns, and none of it appears in a per-unit calculation built from sales alone. On apparel and anything with fit or colour expectations, this is frequently the largest single correction — and it moves the ranking most on the products that look best before it is applied.
Costing a single SKU
Work at the variant level rather than the product level, because size and colour variants frequently differ in both cost and shipping profile.
About 60 minutes the first time
- 01
Start from realised price, not list price
Use the average price the variant actually sold at over the period, after discounts. List price overstates margin on anything that regularly appears in promotions.
- 02
Attach the variant's own cost of goods
Cost per unit at variant level, with landed costs included where you pay duty or freight on inbound stock. A catalogue-wide average makes every product look identically profitable.
- 03
Allocate shipping by weight or volume
Divide the period's shipping cost across units in proportion to what each contributes to parcel weight or size, rather than splitting it evenly per unit.
- 04
Allocate payment fees by revenue share
Payment fees scale with order value, so revenue share is the correct basis. This is the one allocation where an even split by value is genuinely right.
- 05
Allocate packaging by parcel occupancy
A product that fills a box carries more of its cost than one that ships as an add-on inside the same parcel.
- 06
Read contribution margin per unit and per unit sold
Per unit tells you whether the item earns its place. Multiplied by volume it tells you how much of the store's total margin depends on it.
One variant, costed properly
A mid-catalogue item selling at $34 after typical discounting, allocated its share of the period's fulfilment costs by weight.
- Realised price per unit
- $34.00
- Contribution margin per unit
- $13.79
- Share kept
- 40.6%
| Line | Relative size | Amount |
|---|---|---|
| Realised price per unit After average discount | $34.00 | |
| Cost of goods, landed | $12.60 | |
| Gross profit 63% gross margin | $21.40 | |
| Allocated shipping, by weight share | $6.10 | |
| Payment fee share | $1.09 | |
| Packaging share | $0.42 | |
| Contribution margin per unit 41% of realised price | $13.79 |
A 63% gross margin becomes 41% once the item carries its own fulfilment costs. That twenty-two point drop is where product decisions actually get made — and it varies enormously across a catalogue, because shipping share depends on weight while gross margin does not.
Where the numbers come from
Every figure above traces to a specific field in a specific system. These are the ones that matter, and where each one goes wrong.
| Figure | Source | Where it breaks |
|---|---|---|
| Realised price | Line item revenue divided by units sold over the period | Bundles and multi-buys distort this unless the bundle is exploded into its components first. |
| Landed cost per variant | Supplier invoices plus inbound freight and duty | Most stores record only the supplier price, understating cost on anything imported. |
| Shipping allocation basis | Parcel weights and dimensions from carrier records | Allocation is an estimate by definition, so the method must be stated and kept consistent. |
What this does not tell you
- Every allocation of a shared cost is a judgement rather than a measurement. Two defensible methods can rank the same catalogue differently, so the method matters more than the precision of any single figure.
- Per-unit profitability ignores basket effects. A weak product that reliably appears alongside strong ones may be earning its place through the orders it joins rather than the margin it carries.
Frequently asked questions
Why is my best-selling product not my most profitable?
Bestsellers are usually priced attractively, discounted often, and frequently heavier or bulkier than the catalogue average. Volume and margin are driven by different things, so the two rankings agreeing would be the surprise.
How should I allocate shipping across products?
By weight or volume share, not evenly per unit. An even split charges a lightweight accessory the same delivery cost as a heavy item shipped in the same period, which reverses the ranking on exactly the products where it matters.
Should I use list price or the price it actually sold at?
The realised price, averaged across the period. Any product that appears regularly in promotions sells well below list, and using list price will show margin that never existed on a single order.
What should I do with an unprofitable SKU?
Check basket effects before removing it. If it usually ships alone, raise the price, reduce its packaging footprint, or discontinue it. If it usually rides along with profitable items, the order is working even when the line is not.
Keep reading — Product, order & customer profit
Order-level profitability
The same question asked per order.
Shopify contribution margin
The layer this calculation lands on.