Bundles and Upsells on Shopify: Check the Margin First
Bundles, free-shipping tiers and upsells can lift AOV while profit per order falls. A margin-first test with worked A$ numbers and Shopify page-layout rules.
Quick answer: To raise average order value on Shopify without losing money, work out contribution per order (revenue less product cost, payment fees, packing and any shipping you absorb) for the order you have now and for the order the offer creates, then estimate how many takers would have bought anyway. A bundle, free-shipping tier or upsell is worth running only if contribution per session goes up, not just AOV. In the worked example below, a 25% bundle lifts AOV by about 6% while profit per order falls. On the page, state the offer in plain text near the price, keep the main buy button dominant and show few, relevant suggestions.
Search for how to increase average order value on Shopify and you get app roundups: ten tactics, a list of tools, a promise that AOV will go up. It usually does. That is the problem. Every common AOV lever works by discounting, giving away shipping or adding a low-margin item, so the number on the dashboard can improve while the money left after costs shrinks.
This guide is the other half of the job: a margin test for each lever, a worked example where AOV rises and profit per order falls, the Shopify rules that decide whether an offer behaves as planned, and the page and cart layout that gets an offer seen without costing orders.
I am not quoting any “AOV lift” statistics: the ones that circulate come mostly from the vendors who sell the tools. Every number below is from a primary source I name, is our own split-test rule of thumb, or is labelled illustrative arithmetic.
A note on timing: Black Friday is Friday 27 November 2026 and Cyber Monday is Monday 30 November. If you are reading this in the final week, do not install a new app now; save the bigger project for December. Our Black Friday checklist explains the theme and app freeze.
Why AOV is the wrong scoreboard
Shopify’s definition of average order value, in its analytics field list, is gross sales minus discounts, divided by the number of orders. Nothing in that formula knows what your products cost, what the payment gateway took, or what the carrier charged. A free-shipping give-away never shows up in AOV at all.
ROAS has the same blind spot. To work out what you can afford to pay for a customer, start from break-even ROAS and the contribution margin per order, not AOV.
Shopify’s profit reports make the point from the other side. The gross profit report works only for products that had a cost per item recorded when they sold, and it calculates margin on net sales, so discounts pull margin down. Shopify’s own example is a shirt priced at 20 with a cost of 10: the product page shows a 50% margin, and a 25% discount takes the report’s margin to about a third. The cost field is also static, so the report reflects costs at one point in time, which is a real risk if supplier prices move.
The margin-first test in five steps
Run these for each lever before you build anything.
- Put a cost per item on every product and variant. Without it, Shopify’s profit reports have nothing to work with. Our unit economics spreadsheet walkthrough covers the other costs.
- Write down contribution per order for today’s order. Net revenue excluding GST, minus product cost, payment fees, packing and pick time, and any shipping you absorb.
- Write down contribution per order for the order the offer creates. Same formula, with the discount, the extra items and any new shipping give-away.
- Split the people who take the offer into groups. Some were going to spend less and now spend more (the offer works). Some were already buying everything at full price (the offer gives money away). That mix decides the result, and you cannot know it in advance.
- Find the break-even mix, then judge the live test on contribution per session. A session view counts both a higher order value and any orders the offer cost you.
If your Australian prices include GST, take it out before comparing price and cost. The ATO’s tax invoice guidance refers to GST of exactly one eleventh of a GST-inclusive price, so divide by 11 to find it. Every figure below is GST-exclusive.
A worked example: one illustrative product set
Everything in this section is invented to show the method. It is not a client result, a benchmark or a forecast. Replace every number with your own.
An imaginary skincare store sells three products:
| Product | Price (ex GST) | Product cost |
|---|---|---|
| Serum | A$64 | A$16 |
| Cleanser | A$36 | A$9 |
| Moisturiser | A$50 | A$14 |
Other illustrative per-order costs: a payment fee of 2% of order value, A$5 for picking, packing and packaging, and a carrier cost of A$10 on any order that ships free. Where a shopper pays for shipping, assume the charge exactly covers the carrier cost, so it nets to zero.
Today’s orders, in every 100:
| Order type | Orders | Contribution per order |
|---|---|---|
| Serum only (A$64) | 60 | A$41.72 |
| Serum and cleanser (A$100) | 25 | A$68.00 |
| All three at full price (A$150) | 15 | A$103.00 |
For the serum-only order: 64, less 16 product cost, less 1.28 payment fee, less 5 packing, leaves 41.72. The others use the same formula. Across the 100 orders, AOV is A$85.90 and contribution per order is A$57.48.
Lever 1: a bundle (the three-product routine at 25% off)
The bundle price is 150 less 25%, so A$112.50. Product cost is 39, the payment fee 2.25 and packing 5, so the bundle order contributes A$66.25. Whether that is good news depends on who buys it:
| The buyer would otherwise have bought | Order value change | Contribution change |
|---|---|---|
| Serum only | up A$48.50 | up A$24.53 |
| Serum and cleanser | up A$12.50 | down A$1.75 |
| All three at full price | down A$37.50 | down A$36.75 |
The middle row is the one most bundle plans miss: the order is bigger, the dashboard looks better, and the store makes less. The bottom row is pure give-away.
Now assume a plausible shift in who orders. Twenty serum-only buyers upgrade to the bundle, ten serum-and-cleanser buyers upgrade, and all fifteen full-price buyers switch. That leaves 40 serum-only orders, 15 serum-and-cleanser orders and 45 bundle orders:
- AOV goes from A$85.90 to A$91.23, up about 6.2%.
- Contribution per order goes from A$57.48 to A$56.70, down about 1.4%.
- Across the 100 orders, that is about A$78 less contribution from the same number of orders.
I held the order count constant to isolate the AOV effect. If the bundle also lifts conversion you may come out ahead, which is why step 5 uses contribution per session.
You can estimate break-even before launch. If a bundle buyer is either an upgrader from serum only (gaining A$24.53) or a full-price buyer who would have bought the set anyway (losing A$36.75), the offer breaks even when about 60% of bundle buyers are genuine upgraders (36.75 divided by the sum of 24.53 and 36.75). If you do not know what share of customers already buy the whole routine at full price, you do not yet know whether the bundle pays.
A shallower discount changes the sums: a 15% bundle here sells for A$127.50 and contributes A$80.95, so a full-price buyer who switches costs you A$22.05 instead of A$36.75.
Lever 2: a free-shipping threshold
Say free shipping starts at A$100. A shopper who adds a A$36 cleanser to a A$64 serum to reach the line pays no shipping, but you absorb the A$10 carrier cost. That order contributes A$58.00 (68.00 less 10) against A$41.72 before, a gain of A$16.28.
The cost sits elsewhere. The 40 orders in every 100 that already cleared A$100 now ship free, so you absorb A$10 on each: A$400 before a single extra item is sold. To cover that, 25 of the 60 serum-only buyers (about two in five) must add the cleanser. If fewer do, the threshold is a discount for people who did not need one.
The rule: count last month’s orders already above the line, multiply by the shipping you will now absorb, and divide by the gain per upgrader. That is how many upgraders you need. In my judgement, set the line above where most orders already land, at a basket reachable by adding one sensible item.
Lever 3: a cart add-on
An A$15 travel-size cleanser with a A$3 cost and a 2% payment fee contributes A$11.70, assuming it ships in the same parcel at no extra carrier cost. If one in ten orders takes it (illustrative), contribution rises from A$57.48 to A$58.65 per order.
But every extra decision in the cart is a chance to leave. A fall of about 2% in orders (a store converting 2.00% of sessions slipping to about 1.96%) wipes out the entire gain, because 57.48 divided by 58.65 is about 0.98. Small add-ons earn small amounts, so a small conversion cost cancels them. That is the case for a quiet, relevant add-on over a pop-up.
Lever 4: a post-purchase upsell
An offer shown after the first payment should not lose the order you just won, so the conversion risk is small. The margin test is the same: contribution on the offered item, after any discount and fee, must be positive. The catch is reach, covered next.
| Lever | How it loses money | Check before launch |
|---|---|---|
| Bundle | Discounts shoppers who would have paid full price | Break-even share of genuine upgraders |
| Free-shipping tier | You absorb shipping on orders already above the line | Share of orders already above it |
| Cart add-on | A small conversion drop cancels a small gain | Break-even order drop |
| Post-purchase offer | Low reach; discount given away | Reach by payment method |
Check the Shopify rules before you build
These are the rules as read on Shopify’s help pages and developer documentation on 31 October 2026. Shopify changes them, so confirm against the live pages.
Bundles. Shopify’s free Bundles app handles fixed bundles and multipacks on all plans. Mix-and-match needs a third-party app or, on Shopify Plus, a custom build with the Bundles APIs. Your store needs an upgraded checkout, because stores with checkout.liquid customisations are incompatible. Bundles are not compatible with subscriptions or pre-orders, availability is set by the component with the least stock, and a bundle cannot be used in an exchange. The one that matters for margin: the bundle price does not update when a component price changes. If a supplier cost or component price moves, you update the bundle by hand, and the discount percentage drifts until you do. The app supports discount codes and automatic discounts, but a discount aimed at specific products or collections must include the bundle product itself.
Buy X get Y. Shopify’s Buy X get Y discounts never add the “get” item to the cart for the shopper. They must add it themselves, and a free item with no stock shows as sold out and cannot be claimed. Your product page and cart have to say what to add and give them a button.
Stacking. Shopify applies product discounts first, order discounts to the revised subtotal, and shipping discounts last. Discounts combine only where each one’s own setting allows it. The limits are 25 active automatic discounts, and per order up to five product or order codes and one shipping code. Where discounts conflict, the best one for the customer applies. Before launch, place test orders that combine your bundle, sitewide code, welcome code and shipping rate. The stacked price can fall below cost.
Free-shipping tiers. Shopify supports price-based shipping rates and free shipping over a minimum order amount. Its help page does not say whether that amount is before or after discounts, so a test order is the only way to find out whether a discounted cart still qualifies.
Post-purchase offers. As at 31 October 2026, Shopify’s developer documentation describes post-purchase checkout extensions as in beta, with access requested for live stores. The post-purchase page does not appear when the customer pays with an instalment or wallet service (the documentation lists Klarna, Affirm, Afterpay, Apple Pay, Amazon Pay and Google Pay), when the first purchase used a gift card or anything other than a credit card, for local delivery, or for orders with duties and multiple currencies. Orders must come through the Online Store channel. A customer can accept up to three offers per checkout. Shopify holds fulfilment while the flow runs. Third-party analytics that rely on the order status page can show incomplete conversion data, and Buy X get Y discounts and amount-off automatic discounts created in the admin do not apply on the post-purchase page.
If many of your Australian orders use Afterpay or a wallet, count them over the last month: those orders will not see the offer, so real reach is smaller than your order count suggests.
Make the offer visible without hurting conversion
A margin-positive offer nobody sees earns nothing, and a loud one can cost orders. I date each Baymard Institute article I cite, because some are old, and I have not read Baymard’s paywalled guidelines. The rest of this section is my own judgement, so test it.
On the product page
- Put the offer in text near the price and buy button. Baymard found 32% of the sites it benchmarked show free shipping only in a banner or site-wide header, which many shoppers miss (Baymard article, August 2017). It recommends spelling out any qualifying condition, such as a minimum spend, next to the message. The same applies to a bundle: say what is included, the set price, the separate prices and the saving in dollars, so it adds up when a shopper checks.
- Keep the main buy button first. Show the bundle or add-on under or beside the primary action, not above it. One offer per product page is plenty.
- Fix the page first. Our product page CRO checklist covers the basics.
- Use Shopify’s recommendation block deliberately. The Search & Discovery app lets you pick up to 10 complementary products per product, allows one complementary block per product page, hides items already in the cart, and shows only complementary products that are in stock. Shopify’s guidance favours add-ons priced at or below the main item.
In the cart
- Show the free-shipping gap in the cart summary. Baymard recommends putting free-shipping information in the cart summary (Baymard article, May 2026), updated dynamically with wording such as “Spend $35 more to qualify” and hidden when it does not apply (Baymard article, August 2017). Test the wording on a phone against our guidance on shipping and returns messaging for Australian stores.
- Fewer, more relevant suggestions. Baymard’s January 2021 article found 52% of the desktop sites it benchmarked showed cross-sells in the cart or the added-to-cart confirmation that were irrelevant or based only on what other customers bought, and observed that one questionable recommendation made users lose faith in all of them. It advises against a fixed number of slots and recommends labelling why items are suggested.
- Keep the checkout button the most visible thing. Baymard’s May 2026 cart-abandonment article says promotions should stay visually secondary to the checkout actions.
- Do not force a decision. Baymard’s checkout benchmark says cross-sells that make users accept or reject an offer before continuing are often seen as aggressive. In its checkout testing, 66% of users who had to go through a separate cross-sell step at Amazon showed extreme frustration (the page gives no date). That is one site, but it is why I prefer a passive add-on in the cart, or an offer after payment.
- Check the cart on a phone after adding anything. An extra block can push the checkout button below the fold. Our guide to mobile conversion on Shopify lists what to look at.
Speed
Shopify’s web performance page says each feature added to a store can affect its Core Web Vitals and recommends weighing the benefit against that cost. Compare load times before and after installing any offer app.
Pricing claims in Australia
If your bundle page shows a crossed-out total or the word “save”, the claim has to be true. On 14 August 2023 the ACCC announced that the Federal Court had ordered Dell Australia to pay A$10 million, after Dell admitted it misled customers about the price of add-on monitors offered with desktops and laptops. According to the release, the monitors were often shown with a higher strikethrough price and were not sold at that price for most of the relevant time. In many cases consumers paid more than if they had bought the monitor alone, and more than 5,300 monitors were sold with overstated discounts.
The ACCC’s Commissioner said in the release that “consumers rely on accurate information about prices and discounts to make purchasing decisions”. My reading for a Shopify bundle is to check that each “was” price is one you really charged and that the set does not cost more than the parts. Whether your wording is acceptable is a question for the ACCC’s guidance or a lawyer. This is general information, not legal advice.
Run it, then call it on profit per session
- Pick one lever and one product set.
- Record a 30-day baseline: conversion rate, AOV, contribution per order, and contribution per session (contribution per order multiplied by conversion rate).
- Set a stop rule before launch, such as switching the offer off if conversion falls by more than your break-even drop.
- Split traffic if you have the volume; measure before and after if you do not. Our rule of thumb is that a clean split test needs a few hundred conversions per version, and low-traffic stores should read A/B testing on low traffic first.
- Check returns after a few weeks. Shopify says you cannot mark a bundle as final sale and that its return eligibility follows its component products, so compare the return rate on bundle orders with single-item orders before you call the margin settled.
If AOV rose and contribution per session did not, you learned that cheaply.
Where this fits in the bigger system
Profit per order feeds the maths behind every paid and email decision: what you can pay for a customer and whether a first order covers its costs. Prism3 does not run ads or email, but an offer that lowers profit per order shrinks the room you have to buy traffic. Our piece on how paid, organic, conversion and email fit together is a map for deciding what to fix first.
Key takeaways
- Shopify’s AOV formula ignores product cost, fees and shipping, so AOV can rise while profit per order falls.
- Test each lever on contribution per order and ask who takes the offer. Buyers who would have paid full price make a discount costly.
- In the illustrative example, a 25% bundle lifted AOV about 6% and cut contribution per order about 1.4%. The free-shipping tier needed about two in five serum-only buyers to add an item just to cover shipping already given away.
- A small add-on earns little, so an order drop of about 2% can erase it.
- Bundle prices do not update when component prices change, discounts stack only where allowed, and post-purchase offers skip wallet and instalment payers.
- On the page, state the offer in text near the price, keep the buy button dominant, show few relevant suggestions and never force a decision.
- Any “save” claim must be true. The Dell case shows what overstated bundle discounts cost.
FAQs
What is a good average order value for a Shopify store?
There is no number I would trust across stores. A good AOV comes with a healthy contribution per order and an unchanged conversion rate. Compare against your own last 30 days and judge changes on contribution per session.
Are bundles or upsells better for raising AOV?
Neither wins by default. Bundles add order value by discounting, so they risk paying people who would have paid full price. Add-ons and post-purchase offers add smaller amounts, but add-ons can cost conversion if they get in the way. The margin test tells you which fits.
Does the free Shopify Bundles app support mix-and-match?
According to Shopify’s help pages as at 31 October 2026, the free app covers fixed bundles and multipacks on all plans. Mix-and-match needs a third-party app or, on Shopify Plus, a custom build with the Bundles APIs.
Will a post-purchase upsell reach customers who pay with Afterpay?
Not according to Shopify’s developer documentation as at 31 October 2026, which says the post-purchase page does not appear for instalment or wallet payments and names Afterpay, Klarna, Affirm, Apple Pay, Amazon Pay and Google Pay. Count how many of your orders use those methods before estimating reach.
Can I show a “was” price on a bundle in Australia?
The ACCC’s Dell case (August 2023) involved strikethrough prices on bundled add-on monitors that were mostly not the prices they sold at, and Dell admitted it misled customers. Check any “was” price against what you really charged, and ask the ACCC’s guidance or a lawyer about your exact wording. This is general information, not legal advice.
Want a second opinion on which offer is worth building?
Upsell, cross-sell, bundle and AOV optimisation is part of our Shopify CRO service, and the sensible first step is seeing where your store loses buyers today. To start, book a free 30-minute diagnostic or tell us about your store: we share your Shopify store on screen and name two or three conversion leaks live, and tell you whether they are worth fixing. No pitch.
Free 30-min diagnostic
Seen enough?
Book a free diagnostic.
We'll identify exactly what's breaking your conversion rate 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.