Take the sale price before tax and subtract everything the order costs you because it exists: products, payment, fulfillment, shipping, its share of returns, and the ad spend that brought it in.
What's left pays your fixed costs, and it's often less than your dashboard shows.
The benchmark
Here are two made-up orders. Redo them with your own numbers. Payment fees follow the Shopify Payments rate on the Basic plan for a European card: 1.5% plus €0.25, applied to the tax-inclusive amount the card is charged.
| Line item | Order at €80 excl. tax | Order at €30 excl. tax |
|---|---|---|
| Basket excluding tax | €80.00 | €30.00 |
| Cost of products | €28.00 | €10.50 |
| Payment fees | €1.69 | €0.79 |
| Fulfillment and shipping | €7.00 | €7.00 |
| Returns provision | €3.00 | €1.10 |
| Margin before acquisition | €40.31 | €10.61 |
| Acquisition cost | €18.00 | €18.00 |
| Contribution margin | €22.31 | −€7.39 |
All these items get filed under variable costs, yet several of them don't move with the basket amount.
The box, the fulfillment, the carrier and the fixed 25 cents of the payment fee cost the same on a €30 order as on an €80 order, and the ad platform doesn't check your receipt before billing the click.
So the small order carries almost the same shipping costs, with revenue nearly three times lower to cover them.
The authors came across this case at a brand they work with, which sells small accessories with an average basket under €30 excluding tax.
While preparing a test on its free shipping threshold, they found that the most natural combination in the catalog fell twenty cents below the threshold.
And their own test sheet included the instruction given here: enter the cost of products in Shopify first. Otherwise they would have judged the threshold on revenue, with no idea whether lowering it would make or lose money.
The rule
Decide your promotions, your free shipping and your ad budgets based on the last line of the table, in euros per order and per basket tier. Gross margin rate is reassuring in meetings, but contribution margin is what pays the salaries.
The steps
- Costs per order. List them with their source, whether it's the carrier's invoice or the payment provider's statement.
- Cost of products. Fill in the "Cost per item" field for every variant in Shopify, because margin reports only count sales whose cost was entered at the time of sale.
- Returns provision. Calculate it from your actual return rate, adding return shipping and restocking to the refund.
- Basket tiers. Redo the table for three tiers, for example under €40, €40 to €80, and above.
- Channels. Redo it by acquisition channel, since an order that came from an email cost almost nothing in advertising.
- The sentence for leadership:
"Our orders under €40 lose us €X each once the ads are paid for, and here is the free shipping threshold that brings them back to break-even."
The trap
First, there's the average. Your average order is profitable, great, but your small baskets shipped for free and acquired through ads may be losing money on every shipment, and the average dilutes them among the big ones.
Then the tool adds its own blind spot. Shopify calculates its gross margin only on sales whose cost was entered, and files the others separately in the finance report.
On a half-filled catalog, the displayed rate therefore covers only part of your sales. Before quoting it to your bank, check what share of revenue it covers.