Contribution Margin per Order: A Shopify Worked Example
Shopify contribution margin per order, worked line by line in AUD: GST, discount, shipping, payment fees and returns to CM1, CM2, CM3 and break-even ROAS.
Quick answer: Contribution margin per order is what one order leaves after the costs that move with it. This post splits it into three layers: CM1 (revenue after discount and GST, minus product cost), CM2 (CM1 minus shipping, pick and pack, payment fees and a return allowance) and CM3 (CM2 minus the ad cost of winning the order). In the illustrative example, two A$132 orders leave A$66.86 and A$29.29 at CM2, so their break-even ROAS is 1.97 and 4.51, yet an ad dashboard would show the same ROAS for both at the same ad cost.
Average order value (AOV) is the number most Shopify founders watch, and it hides what decides whether an order was worth winning. Two orders can both come to A$132 at checkout and leave very different amounts once the product, the parcel, the card fee and the chance of a return are taken out.
This guide walks one order line by line, from the price on the product page to what is left, then puts a second order of the same size beside it. It is the order-level build underneath break-even ROAS: the break-even ROAS guide takes the contribution figure from here and turns it into a target, so I keep this post on the order itself.
Every dollar figure for the two orders is illustrative. The products do not exist, and the costs were chosen so the arithmetic is easy to follow. They are not benchmarks, targets or results from any store. The inputs I could check at a primary source (Shopify’s Australian card rates, Australia Post’s listed parcel prices, the GST rules) are named where they appear, and I read them on 31 October 2026. Currency is Australian dollars.
A note on scope. Prism3 does not run ads or email. We work on what happens after the click and on measurement you can trust. The sums here are yours to run whoever manages your ads, and the last sections show where they meet conversion and tracking.
The convention: CM1, CM2 and CM3
There is no single agreed meaning for these labels. Definitions of contribution margin vary between sources, and the place where returns, shipping or the ad bill sits changes from one tool to the next. Even Shopify’s own blog is loose: one post (10 November 2022) calls contribution margin “also called the gross margin”, while another (21 October 2022) separates the two and says contribution margin strips out variable expenses such as sales commissions and marketing campaigns.
So here is the convention for this post. Use it, or move the lines to suit your own books, but write down where you drew them.
| Layer | The question it answers | What it takes off |
|---|---|---|
| CM1 | Does the product earn its place? | GST on the discounted price, then product cost |
| CM2 | What does the order leave to pay for marketing and overheads? | Shipping you pay, pick and pack, payment fee, return allowance |
| CM3 | Did the order pay for the ad that won it? | The ad cost attributed to the order |
Fixed costs stay out of all three: rent, salaries, your Shopify subscription and software. They get paid from what CM2 and CM3 add up to across the month.
The order we will walk
A Shopify store in Australia, registered for GST, with GST-inclusive prices and free shipping on orders over A$100. The customer buys a two-item set that lists at A$165.00 and is on a 20% sale.
| Input | Value | Where the number comes from |
|---|---|---|
| List price (incl. GST) | A$165.00 | Your product page |
| Discount | 20% | Your sale |
| Product cost, landed | A$30.00 | Supplier invoice plus freight and duty |
| Parcel | Under 500g, Australia Post Parcel Post | Carrier price list or your account rate |
| Pick, pack and packaging | A$4.00 | Your own packing time, or your 3PL’s price list |
| Card rate | 1.55% + 30¢ (Shopify Grow plan) | Shopify’s Australian pricing page |
| Return rate | 5% (illustrative) | Your own refunded orders over the last 90 days |
Call this Order A. Now take it one line at a time.
Step 1: price, discount and GST
The customer pays 165.00 less 20% (A$33.00), which is A$132.00 including GST.
GST is not your revenue. The ATO describes GST as a broad-based tax of 10% on most goods, services and other items sold or consumed in Australia, and says registered businesses generally include GST in the price they charge and claim credits for the GST included in what they buy for the business (ATO, “How GST works”, last updated 14 September 2026). The ATO’s tax invoice page, last updated 18 September 2026, treats a GST amount of exactly one-eleventh of the total price as a special case that can be written as “Total price includes GST”. At 10%, the GST in a fully taxable sale is one-eleventh of the GST-inclusive price (that is my arithmetic from the ATO’s one-eleventh rule).
So on A$132.00, GST is 132.00 ÷ 11 = A$12.00, and net revenue is A$120.00.
Three limits. The ATO says you need to register if your GST turnover is A$75,000 or more, so a store with A$150,000 or more a year in sales will usually be past it; if you are not registered, there is nothing to strip out. The ATO also says some things are GST-free, so a mixed catalogue needs a split. And US sales tax works differently, which I have not covered: the principle is the same, take out tax you collect for someone else before you measure anything. This is general information, not legal or tax advice, so check the GST treatment of your shipping, fees and ad spend with your accountant.
In the sheet I treat every cost as a net cost, after any GST credit you can claim on it. If you are not registered, your costs include whatever GST you paid.
Step 2: product cost, and CM1
Product cost is what the item cost landed in your warehouse, including inbound freight and duty. For the set, A$30.00.
CM1 = 120.00 − 30.00 = A$90.00, or 75.0% of net revenue.
CM1 answers one question: given the price the customer actually paid, does the product leave a sensible amount? Note that it is on the discounted price. The list price of A$165.00 would have given you a CM1 of A$120.00. The sale took A$30.00 of that away before anything else was counted, which is the first thing to see about discounts.
Step 3: getting the order to the door
Three costs happen on every order that ships.
Shipping you pay. This is the carrier’s charge to you, not what the customer paid. If your customers pay for shipping, add the shipping charge (ex GST) to net revenue and keep the carrier bill here as a cost. In this order shipping is free to the customer, so only the cost shows.
For the parcel, I used the listed Australia Post Parcel Post price for postage only on a parcel over 250g and up to 500g, which was A$11.70 on Australia Post’s business Parcel Post page when I read it on 31 October 2026. For 500g to 1kg the same page lists A$16.00, and for over 1kg to 3kg A$20.25. Four cautions on that:
- The page does not say whether those prices include GST. I use A$11.70 as the net cost as it stands, which is a simplification.
- It says postage uses the greater of actual or cubic weight and varies by destination, so a bulky light parcel can price as a heavier one. The page also lists the same figures under its flat-rate packaging sizes, so check the price for the way you actually pack.
- Your own rate may differ. Shopify’s help centre says the shipping rates you are charged through its Australia Post integration are based on your account with Australia Post (a MyPost Business account is required; eParcel accounts are not currently supported), and its carrier-calculated rates page says you can use discounted rates you negotiate with Australia Post directly. Shopify also says Sendle is no longer available as a Shopify-supported carrier in Australia and had ceased shipping operations as of 11 January 2026, so a pre-2026 Sendle rate is no longer a guide.
- Australia Post’s business pricing updates page says price changes applied to its eParcel domestic and international parcel rates from 1 July 2026. Its Peak Fee page said, as at 31 October 2026, that a Peak Fee will not be applied in 2026, and that any future Peak Fee comes with 30 days’ notice. That covers the Peak Fee only, so before you finalise a sale sheet, check your own account for other surcharges.
So shipping for Order A is A$11.70.
Pick, pack and packaging. The satchel or carton, inserts, label, and the labour or 3PL fee for packing it. A$4.00 here. This one is yours to measure: time a few orders, or read your 3PL’s price list.
Payment fee. Shopify’s Australian pricing page lists Shopify Payments online card rates in AUD, which I read on 31 October 2026 (the page does not date them):
| Plan | Standard online card | Amex online |
|---|---|---|
| Basic | 1.7% + 30¢ | 2.9% + 30¢ |
| Grow | 1.55% + 30¢ | 2.8% + 30¢ |
| Advanced | 1.35% + 30¢ | 2.7% + 30¢ |
The same page lists online international cards at 3.5%, 3.4% and 3.3% + 30¢ on Basic, Grow and Advanced.
On the Grow plan, a standard card on A$132.00 costs 132.00 × 1.55% + 0.30 = A$2.35 (2.046 plus 0.30, rounded). I apply the percentage to the full amount the customer pays, GST included. That is my assumption, because the pricing page does not say how GST affects the fee. Your Shopify Payments activity report, which Shopify’s help centre describes as a reconciled breakdown of balance activity, fees and payouts, shows the real fee on a real order, so check one.
Two details people miss. The 30¢ is fixed, so a low-value order pays proportionally more. And a different card changes the line: the same A$132.00 on an Amex costs A$4.00 on Grow, and on an international card A$4.79.
The running total, before returns, is 90.00 − 11.70 − 4.00 − 2.35 = A$71.95 on an order the customer keeps.
Step 4: the return allowance, and CM2
An allowance is not “revenue lost to returns”. A return costs you more than the refund, because most of the costs above have already been spent.
Shopify’s help centre says that on Shopify Payments the original credit card transaction fee is not refunded when you issue a refund, and that processing the refund adds no further fee. The outbound parcel and the packing are gone. If you pay for return postage, that is a new cost. The one thing you may recover is the product, if it can be resold.
So take a returned order of Order A, assuming the product goes back on the shelf in resaleable condition and you pay return postage equal to the outbound cost:
- Revenue: 0 (refunded)
- Product cost: 0 (back in stock)
- Outbound shipping 11.70, pick and pack 4.00, payment fee 2.35, return postage 11.70
- Result: −A$29.75
A kept order leaves A$71.95. A returned one loses A$29.75. The gap is 101.70. At a 5% return rate the expected cost is 5% × 101.70 = A$5.09 per order.
CM2 = 71.95 − 5.09 = A$66.86, which is 55.7% of net revenue (and 50.7% of the A$132.00 the customer paid).
If returned goods cannot be resold (opened cosmetics, or a faulty batch), or you add restocking labour, the allowance is bigger. If most of your returns are exchanges, treat the exchange postage as the cost and keep the revenue. Use your own return rate from the last 90 days: refunded orders divided by orders. For how to talk about delivery and returns on an Australian store, see shipping and returns messaging for Australian Shopify stores.
Step 5: the ad cost, and CM3
CM2 is the amount the order has available to pay for the marketing that brought it in. To get CM3, take off the ad cost attributed to the order.
Say the ads that brought this customer cost A$45.00 per purchase in Meta (an illustrative figure, not a benchmark). Then CM3 = 66.86 − 45.00 = A$21.86.
Meta’s Business Help Centre defines website purchase ROAS as website purchases conversion value divided by amount spent, based on purchase events recorded by the Meta pixel or Conversions API and attributed to your ads. Meta adds that in some cases the metric may be estimated or statistically modelled. On that definition the reported ROAS here is 132.00 ÷ 45.00 = 2.93, assuming your pixel sends the GST-inclusive total. Place a test order and compare the value Meta shows with the Shopify order before you rely on any ratio.
CM3 on one order is a snapshot. Real ad costs are averages per purchase, they differ for new and returning customers, and a negative CM3 on a first order is not automatically a bad sign if the customer buys again. That depends on repeat behaviour, which the CAC payback period guide and the customer lifetime value guide cover. If your first orders keep landing below zero and repeat purchases are not closing the gap, what to do first when CAC is high and lifetime value is low is the next read.
Here is Order A in one place.
| Line | A$ | Running |
|---|---|---|
| Customer pays (A$165.00 less 20%) | 132.00 | 132.00 |
| GST (÷ 11) | −12.00 | 120.00 net revenue |
| Product cost | −30.00 | 90.00 CM1 |
| Shipping you pay | −11.70 | 78.30 |
| Pick, pack, packaging | −4.00 | 74.30 |
| Payment fee | −2.35 | 71.95 |
| Return allowance (5%) | −5.09 | 66.86 CM2 |
| Ad cost per purchase | −45.00 | 21.86 CM3 |
Same order value, different profit: Order B
Now a second order. It also comes to A$132.00 at checkout. The customer pays the same, Meta records the same A$132.00 purchase value, and it cost the same A$45.00 in ads. But it is a different kind of product: bulkier, lower margin, and the sort of thing that comes back more often (think homewares or apparel).
| Line | Order A | Order B |
|---|---|---|
| Customer pays (incl. GST) | 132.00 | 132.00 |
| Net revenue (ex GST) | 120.00 | 120.00 |
| Product cost | −30.00 | −58.00 |
| CM1 | 90.00 | 62.00 |
| Shipping you pay | −11.70 | −16.00 |
| Pick, pack, packaging | −4.00 | −5.00 |
| Payment fee | −2.35 | −2.35 |
| Return allowance (5% vs 12%) | −5.09 | −9.36 |
| CM2 | 66.86 | 29.29 |
| Ad cost | −45.00 | −45.00 |
| CM3 | 21.86 | −15.71 |
Order B sells at full price with no discount. It has the same AOV, the same GST, the same card fee and the same ad cost. Its parcel is the 500g to 1kg Parcel Post price from the same Australia Post page (A$16.00), its pack cost is higher, and its 12% return rate is an illustrative figure chosen to show the effect. Returns follow the same assumptions as Order A: the product goes back on the shelf and return postage equals the outbound parcel (A$16.00).
The result: A leaves A$21.86 after the ad. B loses A$15.71. The Meta dashboard shows a ROAS of 2.93 on both.
Where does the A$37.57 gap at CM2 come from? Product cost accounts for A$28.00. The other A$9.57 comes from costs after CM1: A$4.30 more shipping, A$1.00 more packing and A$4.27 more return allowance. Most of the gap is the product, but more than A$9 of it only appears when you build CM2.
Break-even ROAS is the reported order value divided by CM2, so it is 132.00 ÷ 66.86 = 1.97 for A and 132.00 ÷ 29.29 = 4.51 for B. If your pixel sends the value without GST (A$120.00), divide A$120.00 by the same CM2 and you get 1.79 and 4.10. Either way you keep the numerator and the contribution on the same basis. The break-even ROAS guide walks through that rule, and ROAS, MER and blended CAC shows how it fits with the other measures.
The practical point: a blended ROAS target of, say, 3.0 is comfortable for A and impossible to clear on B. A single target across a mixed catalogue will keep funding the orders that lose money, while the totals look fine.
What the discount really cost
Order A was on a 20% sale. Run the same order at full price, A$165.00:
- GST 15.00, net revenue 150.00, CM1 120.00
- Payment fee 165.00 × 1.55% + 0.30 = 2.86
- Kept order: 120.00 − 11.70 − 4.00 − 2.86 = 101.44
- Return allowance: 5% × (101.44 + 30.26) = 6.59
- CM2 = A$94.85, break-even ROAS 165.00 ÷ 94.85 = 1.74
The sale took the customer’s price down by A$33.00 but took A$27.99 off CM2 (94.85 − 66.86). The difference is the A$3.00 of GST you never kept, the A$0.51 smaller card fee and A$1.50 less expected return cost. So the cost of a discount is not the headline figure, but it is large.
Now the part that matters for a sale. With an A$45.00 ad cost on each order, CM3 at full price is 94.85 − 45.00 = A$49.85, against A$21.86 on sale. To end the weekend with the same total CM3, the sale needs 49.85 ÷ 21.86 = 2.3 times as many orders. Remove the ad cost from the sum (if the extra orders come from email or direct traffic) and the bar falls to 94.85 ÷ 66.86 = 1.4 times as many. Neither number says you should not run the sale. It says what the sale has to achieve, and Black Friday is Friday 27 November 2026, so now is the time to run your own version. If your offer is a bundle rather than a straight percentage, the bundles and upsells margin check applies the same sums to what a bundle does to margin.
Which line is worth fixing first
Back to Order B. Change one thing at a time and see what moves. Every row below is illustrative arithmetic on the same A$132.00 order.
| Change to Order B | CM2 (A$) | Break-even ROAS |
|---|---|---|
| None (baseline) | 29.29 | 4.51 |
| Return rate 12% to 6% | 33.97 | 3.89 |
| Ship and return a 500g parcel at A$11.70, not A$16.00 | 34.11 | 3.87 |
| Product cost A$58 to A$53 | 33.69 | 3.92 |
| Price A$132 to A$143 incl. GST | 37.92 | 3.77 |
| All of the first three together | 43.23 | 3.05 |
Three things to take from it.
First, no single lever rescues B. Even all three cost-side changes together leave a break-even ROAS of 3.05 and a CM3 still slightly negative (−A$1.77) at A$45.00 of ad cost. That tells you something a ROAS chart cannot: the issue may be this product at this ad cost, not the campaign.
Second, the lines you control differ by order. Return rate is partly a product-page question (size guides, photos, clear description), which overlaps with conversion rate optimisation. Shipping is a carrier and packaging question, product cost is a supplier question and price is a positioning question.
Third, price is worth more than it looks. An A$11 price rise on B adds A$8.63 to CM2, because most of the extra revenue falls through, apart from the GST and a slightly larger card fee. Whether the customer still buys at that price is the test, so test it rather than guess.
What conversion rate each order needs
Here is where the sums meet the work I do. If every click costs the same, the ad cost per purchase is the cost per click divided by the conversion rate. Suppose a click costs A$1.35 (illustrative). The A$45.00 above is a 3.0% conversion rate (1.35 ÷ 0.03).
For the first order to cover its own ad cost, the ad cost per purchase can be no more than CM2. For A, that is a conversion rate of 1.35 ÷ 66.86 = 2.0%. For B it is 1.35 ÷ 29.29 = 4.6%. A store converting at 3.0% is comfortable on A and losing money on B, on the same traffic.
That does not mean raising conversion is easy, and I would not promise a number for any store. It means that for a low-CM2 product, conversion after the click is one of the few levers that moves the economics without touching the product. The first questions are where visitors leave, and whether the purchase value your ad platform records matches what Shopify shows. Our CRO audit starts with a quantitative analysis that includes a tracking check.
Where to find each number in Shopify
- Price and discounts: the order in your Shopify admin, or your sales report. Use the average after discounts, not the list price.
- Product cost: the cost per item field on the product variant. Shopify’s help centre says its profit reports show profit only for products and variants that had a cost recorded at the time they were sold, so an empty field can leave orders out of the report.
- Shipping: your carrier invoices or label purchases, not the rate you charge customers.
- Pick and pack: your 3PL’s price list or your timed packing.
- Payment fees: the Shopify Payments activity report, which shows fees.
- Returns: refunded orders over the last 90 days, plus return postage.
One warning about Shopify’s own profit reports. As I read the Profit reports page on 31 October 2026, the gross profit reports calculate margin as net sales minus cost, divided by net sales. The profit margin by order and by market reports also list shipping costs and duties paid by your store, but I did not find payment fees, packing or a return allowance mentioned on the page. So treat the reports as a partial view, check what they include for your store, and do the rest in a sheet. The unit economics spreadsheet guide shows how to lay the whole thing out.
Mistakes that make the number look better than it is
- Mixing GST bases. Dividing a GST-inclusive price by costs that exclude GST. Pick one basis and label it.
- Using one blended margin for every product. A and B above have the same AOV, and B’s CM2 is less than half of A’s. Calculate per product or per category.
- Counting a return as just a refund. The outbound parcel, the packing and the card fee are already spent.
- Treating one order’s CM3 as a verdict. It is one ad cost on one order. Repeat purchases change the answer.
Key takeaways
- Define CM1, CM2 and CM3 once and write the convention down. In this post: CM1 is net revenue less product cost, CM2 subtracts shipping, pick and pack, the payment fee and a return allowance, and CM3 subtracts the ad cost.
- Strip out GST first. At 10%, it is one-eleventh of a GST-inclusive price (ATO).
- A return costs more than the refund, because Shopify Payments does not refund the original card fee and the outbound parcel is already spent.
- In the illustrative example, two A$132 orders left A$66.86 and A$29.29 at CM2, a break-even ROAS of 1.97 against 4.51, on the same reported ROAS of 2.93.
- A 20% discount on an A$165 order cost A$27.99 of CM2, not the A$33.00 on the price tag, and needed 2.3 times as many orders to leave the same CM3.
- Fix the line that moves the number: returns, shipping, product cost or price. Check your own rates, because list prices are a stand-in for your account.
FAQs
What is contribution margin per order in ecommerce?
It is the amount one order leaves after the costs that change with each order: GST, product cost, shipping, packing, payment fees, returns and, at the last layer, the ad cost of winning it. Fixed costs such as rent, salaries and your Shopify subscription are left out. It is a cash figure per order, so you can compare it with what you pay for ads.
What is the difference between CM1, CM2 and CM3?
In this post, CM1 is net revenue (after discount and GST) minus product cost, CM2 also subtracts shipping, pick and pack, payment fees and a return allowance, and CM3 also subtracts the ad cost. These definitions are the post’s convention: sources differ on where returns and shipping sit, so check the definition before you compare your numbers with anyone else’s.
Is contribution margin the same as gross margin?
Not in the way most people use the terms. Gross margin usually stops at product cost, while contribution margin takes off all the variable costs of the order. Shopify’s blog is inconsistent: one post calls them the same thing, while another separates them. When you decide how much you can spend on ads, use the version that takes off shipping, fees and returns.
Should returns go in CM2 or CM3?
Either works, as long as you pick one and stay with it. I put the return allowance in CM2 because a return happens whether or not the order was won through an ad, so CM2 is then the number you divide into the order value to get break-even ROAS.
What is a good contribution margin for a Shopify store?
I do not have a verified benchmark to give you, and a generic percentage would mislead because shipping, returns and product cost differ so much by category. The useful target is your own: the CM2 at which your ad cost per purchase leaves something after overheads. Work backwards from your break-even ROAS and your fixed costs.
How do I get from contribution margin to break-even ROAS?
Divide the order value your ad platform reports by CM2. In the example, 132.00 ÷ 66.86 = 1.97. Keep the numerator and the contribution on the same basis, both with GST or both without. The break-even ROAS guide covers the discount, return and GST cases in more detail.
Does GST go in the calculation?
For a store registered for GST, yes: take out one-eleventh of the GST-inclusive price before you measure anything, then treat your costs net of GST credits. If you are not registered, there is no GST to strip out. Confirm the treatment with your accountant. This is not tax advice.
Keep reading
- Break-even ROAS for Shopify: work it out from margin
- Shopify unit economics spreadsheet: build it step by step
- CAC payback period for Shopify stores
Is your first order paying for the ad that won it?
Contribution per order is one half of what a visit is worth; how many visitors buy is the other half. Book a free 30-minute diagnostic: we look at where your store loses buyers after the click, using your own numbers, and tell you what to fix first. We do not run ads or email. No pitch. No email gate.
If conversion and tracking are the weak spot, see how our Shopify CRO service works.
Free 30-min diagnostic
Seen enough?
Book a free diagnostic.
We'll look at where your store loses buyers after the click and what to fix first. No pitch. No email gate. 30 minutes.
More from Prism3
Afterpay vs Zip vs Shop Pay Instalments: Shopify AU
Afterpay, Zip and Shop Pay Instalments compared for Australian Shopify stores: merchant fees, payouts, approval, checkout placement and a worked margin example.
AI-Referred Orders on Shopify: What Is Real and What Is Hype
What Shopify has disclosed about AI-referred orders, why the 13x headline needs context, how to find AI traffic in GA4 and Shopify, and what to do now.
AI Visibility Tools for Shopify: What They Measure and Miss
What AI visibility tools for Shopify stores really count: mentions, share of voice and citations, where the data is sampled or unstable, and how to use them.