Product, order & customer profit

Order-Level Profitability

Order-level profitability means costing each order individually rather than applying a store average. Orders of identical value routinely differ by their entire margin, because weight, destination, payment method and discount all vary per order. Averaging is the operation that destroys exactly the variation you are looking for.

Deepa Swaroop, Co-founder, NetNet

Written by Deepa Swaroop · Co-founder, NetNet

Updated September 6, 2026 · 4 min read

A store-level margin is an average, and an average is a summary of variation that has been thrown away. For most operating questions, the variation was the answer.

Order-level profitability keeps it. The arithmetic is identical to any other profit calculation — the difference is only that it runs once per order instead of once per month, and that single change alters what the data can tell you.

What varies between two identical-looking orders

Two orders can take exactly the same amount of money and differ by their entire contribution margin. The mechanisms are all mundane:

Weight and parcel size. The largest single driver. A heavy or bulky order can cost three times as much to deliver as a light one at the same value.

Destination. Remote-area and extended-delivery surcharges apply per parcel, and they are invisible at checkout.

Free-shipping thresholds. An order at $92 with free delivery over $75 is carrying its own label. The same basket at $70 with delivery paid is not.

Discount code. Different codes carry different depths, and stacking rules mean the effective discount is sometimes deeper than intended.

Payment method. Card, wallet, cash on delivery and buy-now-pay-later carry different rates, different fixed components, and materially different failure rates.

Split shipments. An order fulfilled from two locations pays two base rates and two sets of surcharges against one sale.

Returns. The single largest swing, and it arrives weeks later.

None of these is a mistake. They are ordinary properties of ordinary orders, and each one moves margin independently.

Why the average is the problem

In the example above, the three orders averaged $20.13 of contribution margin. Not one of them was close to it.

This is not a quirk of the numbers chosen. It is what averaging does to a distribution with real spread: it produces a figure that describes the middle of a range in which few actual orders sit. A store reporting 22% average contribution margin might have most orders at 40% and a long tail below zero, or every order clustered tightly at 22%. These are entirely different businesses and they report the same number.

The distribution is the finding. The average is what is left after the finding has been removed.

What per-order costing surfaces

Sorted by margin ascending, the bottom of the list is unusually informative, and the patterns repeat across stores:

A weight band where delivery consistently exceeds what was charged. Fixed by weight-based pricing, a revised free-shipping threshold, or smaller packaging.

A cluster of postcodes carrying surcharges on orders priced as though they were metro deliveries. Fixed by regional rates or a second carrier.

A discount code performing below store-average margin — usually one that stacks with an existing promotion, or one that disproportionately sells the cheapest products.

A product that ships badly. Healthy gross margin, poor contribution margin once its parcel profile is charged to it.

Orders with no cost of goods attached, appearing at the top of the list as implausibly profitable. This is a data problem masquerading as a finding, and it is worth checking first.

Each of these is a specific change with a known cost. None of them is visible in a monthly total.

How much precision is needed

Less than most people assume, provided the estimates are consistent.

Shipping costs can be estimated from weight bands before carrier invoices arrive. Packaging can be a per-parcel constant. Payment fees follow a formula. None of these will be exact per order, and it does not matter — the purpose is to rank orders and expose patterns, and a consistent estimate ranks correctly even when it is a few percent off in absolute terms.

Precision becomes important later, when the P&L goes to an accountant or when a specific order is being investigated. For finding the orders that lose money, consistency beats accuracy, and waiting for perfect cost data is the most common reason this analysis never gets run at all.

Reading it without overreacting

Two cautions keep this useful.

Recent orders are incomplete. Carrier adjustments, disputes and returns settle over weeks, so the last fortnight of orders is systematically overstated. Judge patterns on periods that have had time to settle.

One bad order is noise. A single negative-margin order might be an oversized parcel, a one-off remote delivery, a support gesture. The signal is a repeated pattern — the same weight band, the same region, the same code — across enough orders that it cannot be coincidence.

The instinct to fix the first negative order you find is strong and usually a waste of an afternoon. The value is in the tenth one that looks exactly like it.

What to do with an unprofitable segment

Once a pattern holds, the responses are narrower than they first appear, and they rarely involve refusing orders.

Reprice the delivery, not the product. Most loss patterns are shipping patterns. Weight-based rates, a regional surcharge, or excluding a weight band from free-shipping eligibility fixes the economics without touching the price customers compare against competitors.

Change the parcel, not the policy. Dimensional weight is often the entire gap. A smaller box on one product line can move every future order of it into a cheaper band.

Restrict the discount, not the catalogue. If a code is the pattern, exclude the products it damages rather than withdrawing it, which preserves whatever conversion benefit it was bought for.

Accept it deliberately. Some segments are worth serving at a loss — a region you are building, a product that anchors baskets. The distinction that matters is whether the loss was chosen and sized, or simply never noticed.

Declining the orders outright is almost always the wrong answer, and it is the one most often reached for first.

Three orders, one average, no resemblance

Three orders that each took $92.00 after discount, in the same week, from the same catalogue.

Three orders, one average, no resemblance
Line Amount
Order A — two light items, metro address $92.00
Order A contribution margin 49% — nothing went wrong $45.08
Order B — one heavy item, remote postcode $92.00
Order B contribution margin 20% — surcharges and dimensional weight $18.40
Order C — heavy item, remote, cash on delivery $92.00
Order C contribution margin Negative — COD fee and a failed first attempt −$3.10
Average across the three Describes none of them $20.13

The average of $20.13 is arithmetically correct and operationally useless. It hides that a third of these orders lost money, that the cause is identifiable, and that the fix — pricing delivery by weight and postcode — is available immediately.

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.

Data sources and their caveats
Figure Source Where it breaks
Order value and discounts Shopify order records, net of tax and shipping charged Partial refunds issued later change the order's profit after it was first calculated.
Shipping cost Carrier invoice matched by tracking number Orders shipping in multiple parcels carry multiple labels against one sale.
Payment method costs Gateway records, including cash-on-delivery and failed attempt fees Alternative payment methods carry different rates and different failure profiles.

What this does not tell you

  • Recent orders are always partially costed, because carrier adjustments and disputes settle over weeks. Reading last week's order-level margins as final overstates them systematically.
  • A single unprofitable order is not a problem. The finding only becomes actionable when a pattern is visible across enough orders to rule out coincidence.

Frequently asked questions

Why calculate profit per order instead of monthly?

Because the useful findings are differences between orders, and averaging removes differences. A monthly total can look healthy while a quarter of orders lose money, and nothing in the total will reveal it.

What makes one order less profitable than another of the same value?

Weight and parcel size, destination postcode, whether it crossed a free-shipping threshold, which discount code applied, payment method, whether it shipped in one parcel or two, and whether any of it came back.

How do I find unprofitable orders?

Sort orders by contribution margin ascending and look at the bottom of the list. Patterns emerge quickly — usually a weight band, a set of postcodes, a discount code, or a product that ships badly.

Do I need every cost to be exact before this is useful?

No. Consistent estimates for shared costs are enough to rank orders and expose patterns. Precision matters for the accounts; consistency is what matters for finding the orders that lose money.

Keep reading — Product, order & customer profit

All profit guides

Scale profitably.

Know what every order made you.

Install Free on Shopify