Back to blog
Explainer

What an order really costs: getting contribution margin right in an online shop

Product cost is the part everyone counts. Shipping, payment fees, returns, discounts and storage are the part that decides whether growth builds cash or burns it. Here is the whole stack, line by line, and how to model each one.

The Foreqast Team August 25, 2026 9 min read

Ask a shop owner what an order costs and you will usually get the product cost. It is the number on the supplier invoice, so it feels like the answer. It is roughly half of it.

What actually matters is contribution margin: what is left from a sale after every cost that scales with it. That is the cash each order contributes toward rent, salaries, software and profit. Two shops with identical revenue can have completely different bank balances, and this is the number that explains it.

Definition

Contribution margin is revenue minus variable costs. Per order, it is the order value minus everything that rises with each sale — product cost, shipping and fulfilment, payment fees, returns, and the cost of holding the stock. As a ratio, it is that margin divided by revenue.

Only variable costs belong here. Rent, salaries and software do not rise with the next order; they are fixed costs, covered by the margin your orders contribute, not subtracted from each one.

The stack, in full

Here is a real shop's order, with every line that scales. The €50 at the top is the average order value Shopify reports — already net of discounts, which is where most of the surprises start.

B8=B3-B4-B5-B6-B7 (revenue kept − variable costs)
Per orderNote
Average order value (€)50.00after discounts
Returns (€)−4.008% of orders come back
Revenue kept (€)46.00
Product cost (€)−13.80€15.00 on the 92% you keep
Shipping & fulfilment (€)−5.40€5.00 out, plus return labels
Payment fees (€)−1.503.0% blended, kept on refunds
Storage & holding (€)−0.60warehouse ÷ orders
Contribution margin (€)24.7053.7% of revenue kept
What is actually left — the same order, counted properly. Product cost and shipping alone would have said €29.40. The three lines most shops leave out cost another €4.70 an order, or roughly €56,000 a year at 1,000 orders a month.

The rest of this article is those lines, one at a time: what each really is, and how to model it so it moves with your forecast instead of sitting there as a typed number.

Product cost

The easy one — and the only one most shops get right. Either take it per SKU and weight it by mix, or use a blended cost ratio: if your goods cost 30% of what you sell them for, product cost is revenue × 30% and it scales on its own.

The subtlety is returns. If eight orders in a hundred come back sellable, you only bear the product cost of ninety-two — which is why the line above is €13.80 rather than €15.00. If your returns come back unsellable (fashion in the wrong size is fine; opened cosmetics are not), that adjustment does not apply and the cost stays at €15.00. Know which you are.

Shipping and fulfilment

How you model this depends entirely on who packs the box.

If you ship it yourself, the cost is a label per order plus packaging: orders × average label cost. Find the real average by dividing last quarter's carrier invoices by the orders in the same quarter — not by looking at a price list, which will always be optimistic about weight and zones.

B3=B1*B2 (orders × avg label cost)
JanFebMar
Orders8209101,050
Avg label cost (€)5.005.005.00
Shipping (€)4,1004,5505,250
Self-ship — one driver, one rate. Every extra order adds exactly one label.

If a 3PL packs for you, the bill splits in two: a monthly base and storage fee that barely moves, and a pick-and-pack charge that scales per order. Model them separately, because only the second one belongs in contribution margin — the base fee is a fixed cost.

B5=B1+B3*B4 (base + orders × pick & pack)
JanFebMar
Monthly base & storage (€)1,5001,5001,500
Orders8209101,050
Pick & pack / order (€)3.503.503.50
Variable pick & pack (€)2,8703,1853,675
3PL total (€)4,3704,6855,175
3PL — two lines, because they behave differently. Double your orders and only the lower one doubles.
Who pays the postage?

If you offer free shipping over a threshold, the carrier still gets paid — you just stopped charging for it. Free shipping is not a marketing cost, it is a margin cost, and it belongs on this line at its full amount.

Payment fees

Individually tiny, annually real, and almost perfectly predictable because they move with revenue. The fast version is a flat rate times revenue, and it will drift, because you take money through more than one provider and they do not charge the same. Blend them instead, weighted by how much revenue flows through each:

D5=SUMPRODUCT(share, rate) (weighted average)
Share of revenueFee rateContribution
Shopify Payments70%2.9%2.03%
PayPal20%3.4%0.68%
Other (Klarna, Amex…)10%3.0%0.30%
Blended fee rate100%3.01%
Weighted average — each provider's share × its rate, added up. Read the shares off your payment reports; you only need to redo this when the mix really shifts.

Then the monthly line is revenue × blended rate, and it updates itself whenever the revenue forecast changes.

Two details that cost more than they look

Most processors also charge a flat fee per transaction (€0.25–0.30). At a low average order value that is a real percentage — add orders × per-transaction fee rather than folding it in. And on a refund, many processors keep the original fee: you return €50 to the customer and the €1.50 stays gone. That is why the fee line above is charged on all orders, not just the ones you keep.

Returns

A return is the line most shops model as zero, and it is rarely small. It costs you three times: the revenue goes back, the outbound shipping is spent, and you pay for the label coming home. Whether you also lose the goods depends on your category.

B6=B1*B2 (orders × return rate)
Per 100 orders
Return rate8%
Revenue refunded (€)−400
Outbound shipping already spent (€)−40
Return labels (€)−40
Payment fees not refunded (€)−12
Cost of returns (€)−492
Eight returns in a hundred orders — €492, or €4.92 spread across every order you ship, before you count the goods that come back damaged. A shop at a 25% fashion return rate is running a completely different business from one at 3%.

Model it as one driver — a return rate — and let it act on revenue and on shipping. The rate is worth watching monthly: it moves with your product mix, with a sizing change, and sharply after a discount campaign.

Discounts

A discount does not come out of revenue evenly. It comes out of margin entirely — and because margin is the smaller number, the percentages are brutal.

DiscountRevenue per orderContribution marginMargin lost
None€50.00€24.70
10%€45.00€20.0519%
20%€40.00€15.4038%
30%€35.00€10.7556%

A 20% code halves your margin. That can still be the right call — for clearing stock, for a first order that becomes a repeat customer — but it has to be a decision, not a habit, and it has to be made against the margin number rather than the revenue number.

Storage and holding

Stock that sits in a warehouse costs rent, insurance and handling, and it ties up cash you cannot spend on anything else. If a 3PL bills you for storage, that amount is already on your invoice. If you hold the stock yourself, take the warehouse's monthly cost, divide it by orders, and put it on the line — it is small per order and material per year.

The bigger cost is the cash itself. Money in boxes is not money in the bank, which is why a restock is a dated outflow in a forecast and not an afterthought — see planning a restock for how that lands on a specific day.

What the margin then decides

Once the stack is real, two things fall straight out of it.

Your ad ceiling. Break-even ROAS is 1 ÷ contribution margin ratio. At €24.70 on €50 invoiced, that is a 49% margin and a break-even ROAS of about 2.0×. If you had used the naive €29.40, you would have believed 1.7× was enough — and every campaign between the two numbers loses money on every order while looking profitable in the ad account.

Whether growth helps. A shop at 50% margin keeps real cash from each order and can fund its own growth. A shop at 8% needs perfect timing to stay level, and doubling its orders mostly doubles the size of the timing problem. Revenue tells you how big you are; contribution margin tells you whether being bigger is an improvement.

How this looks in Foreqast

Each of these is its own driver row under revenue, fed from the tool that knows it: order value and returns from Shopify, fee rates from your processors, shipping from your own average. Contribution margin is not a side calculation — it is what remains when the model subtracts them, and it moves the moment any driver does.

Forecast Jan 26Feb 26Mar 26
Revenue€48,000€50,000€52,500
Returns 8% of orders−€3,840−€4,000−€4,200
Product cost 30% of revenue−€13,248−€13,800−€14,490
Shipping & fulfilment €5.40 × orders−€5,184−€5,400−€5,670
Payment fees 3.0% of revenue−€1,440−€1,500−€1,575
Storage €0.60 × orders−€576−€600−€630
Contribution margin€23,712€24,700€25,935
The Foreqast forecast — every variable cost is a driver under revenue, and contribution margin is what remains. Change the return rate or a fee and the margin recomputes across every month on its own.
Watching it, not just calculating it

Margin is not a number you work out once. It drifts — a carrier price rise, a mix shift toward a heavier product, a month of discounting. Monitoring margin shows how it is tracked over time, and the Shopify profit tracking comparison covers the tools that do it.

See what an order actually leaves you

Foreqast pulls orders, returns and fees from your shop and payment providers, subtracts them where they belong, and shows the margin behind every month — before you plan the next campaign against it.

Get early access →

No credit card required.

Common questions

What counts as a variable cost for contribution margin?

Anything that moves with the sale: cost of goods, payment processing fees, shipping and fulfilment, per-order packaging, returns, and storage charged on what you hold. Rent, salaries and software do not, even though they are real costs — that is the whole distinction the number is built on.

Should advertising be inside contribution margin?

Both conventions exist and it matters that you pick one. Excluding it tells you what each order contributes before you decide how hard to market; including it tells you what the order actually leaves behind after acquisition. Most e-commerce operators track it excluding ads and check payback separately.

Why is a single blended payment fee rate usually wrong?

Because the rate differs by provider and by method — Shopify Payments, PayPal, cards and local methods all price differently, and international cards cost more again. A blend is fine as long as your payment mix is stable; when the mix shifts, the blend silently stops matching.

Does self-shipping or a 3PL forecast differently?

Yes. Self-shipping is mostly postage plus packaging per order, which is close to linear in order volume. A 3PL adds pick-and-pack fees, storage charged on volume held rather than sold, and often minimums — so cost tracks inventory as well as orders, and a slow month can cost more per order rather than less.

How should returns be handled?

As a cost of the original order, not a separate line. A return usually costs you the outbound shipping, the inbound shipping and the handling, removes the revenue, and often leaves the payment fee behind — which is why a high return rate damages margin far more than the refund figure alone suggests.

What contribution margin do I need?

Enough that your volume covers fixed costs with room left. There is no universal figure — a business with low fixed costs can run happily on a margin that would bankrupt one carrying a warehouse and a team.

How this works in Foreqast

Free online course

Cashflow Forecasting & Financial Modelling for eCommerce Founders

Go from a blank spreadsheet to a working cash-flow forecast for your shop.

Lesson 4 of 7 · Module: Expense Modelling

Open the course

Beginner → Practitioner · eCommerce & Shopify founders

The app

Order your next restock against a number

  • Shopify and accounting synced, orders and fees included
  • See what a restock does to your cash before you place it
  • Ad budget, shipping and payment fees in the same curve
Try it on your shop

No credit card. First forecast in about 20 minutes.

Self-check

How much control do you have over your money?

Twelve questions on what you can see, how far ahead, and what your decisions are based on. About three minutes.

Start the self-check
Contribution MarginUnit EconomicsE-commerceShopifyForecasting