Bundle Pricing Strategy for Shopify
When bundle pricing beats separate-item sales
A bundle pricing strategy beats selling the same SKUs separately when the combined offer raises contribution per order enough to cover the discount, and no scarce component runs out sooner than it would have sold alone. If either test fails, keep the products unbundled and sell them at full price.
Pricing practice usually distinguishes three offer shapes. Pure bundling sells the components only together. Mixed bundling lets customers buy the package or each item alone. Price bundling makes the discount the main reason to take the set. Most Shopify stores should start with mixed bundling. Pure bundling hides a component that still has independent demand, and a discount with no complementary reason trains buyers to wait for a lower price.
The commercial case is narrower than customers like a deal. Bundle when at least one of these is true:
- Two products already appear together in orders, so packaging them reduces a decision the shopper already makes.
- A slow SKU rides along with a product people already search for, and the slow SKU has enough cover that attaching it does not create a new stockout.
- The combined cart raises average order value enough that the lower unit price still leaves more contribution than two separate checkouts, after refunds and shipping.
Before you treat a larger order as a win, compare the kit page with each component using product conversion rate. That rate shows whether the offer turns its own traffic into orders. It does not replace the stock or contribution tests below.
Do not bundle just because a plugin can build one. Shopify documents two native paths. You can group separate products with the Shopify Bundles app, which keeps each component as its own inventory item. Or you can sell a multi-pack of the same product as a variant, which is a quantity break, not a complementary offer. Fixed bundles suit a stable kit. Multipacks suit buy 2, save 10% on one SKU. Mix-and-match suits a category where the shopper picks components, and that type needs a stock check on every selectable SKU, not just the hero.
Recommendations are a different decision. Complementary product suggestions, covered in the Shopify product recommendations guide, surface related items without locking a discount. Use recommendations when you only want exposure. Use a priced bundle when you are willing to give up margin for a larger order, and only after the stock and cost gates below pass.
Choose complementary products without depleting scarce stock
Start from orders, not from a theme section. Shopify's Items bought together report lists product pairs that appeared in the same orders, with the number of orders containing each pair. Open it from Analytics, then Reports, then search for Items bought together. Use a date range that matches how you reorder, often the last 30 to 90 days if that window covers a full replenishment cycle for these SKUs. Treat that window as a review choice, not a benchmark. A pair that already co-occurs is a better bundle candidate than two products that merely share a collection. Then check whether each component can survive the extra demand the bundle will create.
If the report is not in your plan, export recent orders and count which product IDs share an order ID. Either method answers the same question: which SKUs already travel together, and how often.
Stock cover is the gate. For each component, divide available units by recent daily unit sales. If the hero sells 4 units a day and you have 28 available, cover is 7 days before the bundle even exists. A bundle that adds 2 units a day of that hero cuts cover to about 4.5 days. These figures are a worked example, not a store result. If supplier lead time is longer than the new cover, the discount is buying a stockout of the product that already sells on its own.
Reject or delay the offer when any of these is true:
- The fastest component has less cover than its replenishment lead time plus whatever extra days you already hold as safety stock for demand spikes. That extra days figure should come from your own lead-time misses, not a fixed percentage.
- The scarce SKU is already a bestseller with independent search demand. Discounting it inside a kit trades full-price sales for a smaller blended margin.
- One component is a preorder or frequently unavailable. Shopify's bundle inventory follows the components, so a missing piece can block the offer or oversell if inventory is not tracked on each component. Confirm the current behavior in Shopify's bundle inventory documentation before you publish the kit.
- The slow item is aged, but the fast item is not. Pairing them can clear dead stock only if the fast item's cover stays healthy. If it does not, markdown the slow SKU alone.
Aged inventory is a legitimate reason to build a bundle, with a limit. The inventory aging report turns receipt age into a promote, bundle, markdown, or stop-reorder action. Use that report to pick the slow component. Do not use it as permission to consume a hero that still turns at full price. A useful test: if you removed the hero from the store tomorrow, would the slow SKU still deserve a discount on its own? If yes, markdown it. If the only path to a sale is attaching it to a scarce winner, the bundle is subsidizing a bad buy with a good one.
Also match pack size to how the products are actually used. A cleanser and a moisturizer can be a kit of one each. A consumable that lasts half as long as its pair should not be forced into a 1:1 bundle unless you can replenish the short-lived item without touching safety stock. Multipacks of one SKU avoid this mismatch, but they also train a lower reference price on that SKU, so keep the single-unit price visible.
Set a price floor using actual costs and refunds
The floor is the lowest bundle price that still beats doing nothing. It is not a round percentage copied from another store. Build it from merchant records: product cost, packaging, pick-and-pack, payment fees, expected shipping subsidy, and the refund rate on each component. Shopify sales reports will not calculate this floor for you.
Work in contribution, not in the sticker discount. Contribution margin per unit already defines how to treat refunds, variable costs, and multi-item orders. Apply that result here. Do not rebuild the formula on this page.
A labeled example, not a store result: a serum costs $8 and sells for $32. A cream costs $6 and sells for $24. Variable cost beyond product cost is $3 per unit (packaging, pick, and payment fees). For this illustration only, assume historical refunds of 4% of serum units and 8% of cream units. Expected contribution if each sells once, after those assumed refunds, is:
- Serum: ($32 − $8 − $3) × (1 − 0.04) = $20.16
- Cream: ($24 − $6 − $3) × (1 − 0.08) = $13.80
- Separate total: $33.96
- Bundle at 15% off the $56 combined price ($47.60), sharing one pick: product costs $14, variable cost $4 instead of $6. Do not blend the two refund rates into one kit rate unless your return records show that customers return both items together. In this example, assume a hypothetical 6% only to show the arithmetic. If customers can return one component, use the actual refund rate on each returned unit instead. Contribution under the 6% assumption ≈ ($47.60 − $14 − $4) × 0.94 = $27.80
In this example the bundle contributes about $6 less than two separate full-price sales under those assumptions. It only wins if it creates orders that would not have happened, or if it replaces a cream sale that was not going to occur while the serum still sells at full price often enough to protect its own margin. If most bundle buyers would have bought both items anyway, the 15% discount is a giveaway. Cut it, or drop it.
Pull the refund inputs from your own records before you reuse this shape. In Shopify admin, open the Returns report (Analytics, then Reports) and filter to the bundle product and to each component over the same period. Count returned units against units sold for the kit, and separately count partial returns where only one component came back. If the kit is new and has no return history, keep the component rates separate and recompute after the first returns land. A single blended rate is only valid when your returns show both items coming back together.
Three pricing rules keep the floor honest:
- Price the bundle from the sum of component contribution, then subtract only the discount you can fund. Do not start from 10% off and hope the math works.
- Never discount below the sum of product cost, incremental fulfillment, and a refund reserve. A free gift with purchase can still fail this test if the gift's cost plus extra shipping exceeds the lift in contribution on the paid item.
- Keep the single-item prices published. Mixed bundling lets a shopper who only wants the hero pay full price, which protects the reference price the bundle is discounted against.
- Recompute the floor when a supplier cost, shipping rate, or refund rate moves. A bundle approved in January can be underwater after a freight increase even if the storefront price never changed.
Compare the bundle with selling the SKUs separately
Run this comparison on a fixed window, the same dates you used for co-purchase and refunds. You need four numbers from your own store, not from the example above: sessions and orders for the bundle page, sessions and orders for each component page, contribution per bundle order, and contribution per separate sale of those SKUs.
Order counts cannot prove that a kit buyer would have purchased both SKUs without the discount. A both-item order is context about how often the pair already travels together. Substitution is a counterfactual. The cleanest read is a holdout: keep the bundle off for a matched set of sessions, or off for a later window with similar traffic, and compare total contribution on these SKUs. If you cannot hold traffic out, label the order mix as directional and do not treat it as proof the discount cannibalized sales.
- Conversion. From Analytics, open the product conversion view your store already uses, or divide orders by sessions on each product for the same dates. Calculate the kit page rate and each component rate with the product conversion rate method. A higher kit rate only means that page turns its own traffic. It does not mean the discount beat selling the SKUs alone.
- Separate-sale context, not proof of substitution. For the same dates, count orders that contain the hero without the bundle, orders that contain the slow SKU without the bundle, and orders that contain both components without the bundle product. The third count shows how often the pair still sells unbundled. It does not identify which kit buyers would have bought both anyway. Use it only to see whether unbundled pair orders are still happening alongside the kit.
- Holdout. Turn the bundle off for a share of sessions, or pause it for a window with similar traffic to the live period. Apply contribution margin per unit to kit orders and to separate sales of the same components, using actual product cost, fees, shipping subsidy, and the refund rates from the Returns report. Compare total contribution on these SKUs with the offer on versus off. The bundle wins on economics only if contribution with the offer on is higher than contribution in the holdout. A before-and-after window is weaker than a simultaneous holdout, so treat a sequential pause as directional unless traffic and season are comparable.
- Decision. Keep the price only if the holdout shows higher total contribution with the offer on, and no scarce component's cover falls below its lead time. If you have no holdout, do not decide that the discount cannibalized sales from order counts alone. Raise the price or end the offer if the holdout contribution is lower, if a scarce component's cover falls below its lead time, or if actual returns make the floor higher than the live price. Leave the products on sale separately.
Recheck after two replenishment cycles, or sooner if a component's available units drop faster than the cover math predicted. Stop the discount the week the holdout comparison fails. Leave the products on sale separately.