Short answer: net profit per order = the amount actually collected − (product cost + packing and fulfilment + the shipping you paid + payment or cash-collection fees + discounts + the ad cost attributed to that order + that order's share of returns and failed delivery attempts). The result can be negative on an order that looks perfectly successful — which is exactly why it has to be calculated per order, not per month.

Why gross profit misleads you

Most stores have two numbers: revenue, and a gross margin calculated as sale price minus product cost. Both make everything look fine, because the things that actually consume profit are in neither of them.

What happens in practice: the month closes with higher revenue than the last one, your gross margin is flat, and there is less cash in the bank. The growth came from orders that each take more from you than they leave behind — and gross profit cannot see that.

The rule I work by: any number that is not calculated at order level cannot be used to decide on spend. Averages hide losses inside growth.

Every line that comes off the sale price

These are the lines that have to come off a single order. The ones above the break are in every store; the ones below it are the ones that get forgotten:

LineHow it is calculatedCommon mistake
Sale priceWhat was actually collected, after discountsUsing the listed price, not the collected one
Product costLanded unit cost in your warehouseFactory price without freight, duty or spoilage
Packing and fulfilmentBox, filler, print + labour to packTreated as overhead instead of an order cost
ShippingWhat you actually pay the courierDeducting only what the customer paid
Collection feeCOD percentage or payment-gateway feeIgnored because the percentage looks small
Ad costChannel spend ÷ orders from that channelCalculated per campaign, not per order
Returns and failed deliveryThe order's share of what came backBooked as a separate loss, not a line in every order
Customer serviceCost of calls and follow-up per orderKept as a monthly salary and never allocated

The line that flips the calculation: what never arrived

This is the most important section here, and the most frequently skipped one. When an order comes back, you did not just lose its profit — you paid:

  • Shipping out, and usually shipping back as well.
  • The full packaging cost, most of which cannot be reused.
  • Packing time and customer-service time across the delivery attempts.
  • The ad cost that produced that order — spent and gone; it does not come back with the product.
  • Cash locked in stock for the whole trip, until the item is back in the warehouse and inspected.

So that cost has to be spread across the orders that did arrive, not recorded on its own at month end. The successful order is what pays for the one that failed.

The simple calculation: cost of returns in a period ÷ number of orders delivered in the same period = the line you add to every successful order. If one channel returns at a higher rate, run this per channel — because that is precisely the difference that makes a cheaper-looking channel the expensive one.

The full calculation, step by step

  1. Start from what was collected, not what was listed: the sale price after any discount or coupon, and after the gateway or collection fee.
  2. Take off the direct costs: landed product cost + packing and fulfilment + the shipping you paid (not what the customer paid).
  3. Attribute the ad cost: channel spend in the period ÷ orders from that channel in the same period. If you do not know the channel, the whole calculation is an estimate — and that is a problem to fix first.
  4. Add the order's share of what never arrived, as above.
  5. Add the order's share of indirect costs: rent, salaries and subscriptions ÷ orders in the period. This line is what turns the number from operating profit into actual net profit.
  6. What is left is net profit per order. If it is negative, that order cost you money — and adding spend to the same channel scales the loss at the same rate.

One trap catches a lot of people: with a free-shipping offer the cost has not disappeared, it has moved entirely onto your line. The offer looks on the campaign like it improved conversion, and on the order like it ate the margin. Both are true, and the second one decides whether the offer continues.

The same calculation at product level

Once the order is done, repeat the work per product. An order contains several products, so a profitable order can carry a loss-making product pulled along by a profitable one. Over months that becomes a wrong assortment decision: you buy more of the product that appears to sell well, and it is the one consuming the profit.

How to allocate in practice: costs tied to the product (its own cost and its own packaging) are charged to it directly, and costs tied to the order (shipping, collection, packing) are spread across the order's products by value or by weight — pick one and keep it, because month-to-month comparison breaks if you change the basis halfway.

From the calculation to the decision

This is not an accounting exercise. It is what makes three decisions possible:

  • Where to add spend: on the channel with the higher net profit per order, not the higher ROAS.
  • How to price: once you know the gap between your cheapest and most expensive order, you know the lowest price you can go to without selling at a loss.
  • What to stop: a product, offer or channel with negative net profit over a month is a stop decision, not an optimisation one.

Takeaway

If you only get to build decisions on one number, make it net profit per order. Gross profit tells you that you are selling, ROAS tells you the advertising works, and net profit per order is the only one that tells you this business deserves to get bigger.

This calculation is the reason I built Rabehni: an operations system that computes net profit for every order and every product automatically from your store's data, instead of a spreadsheet you rebuild every month.