How to create product bundles on Shopify
Four ways to build a bundle, and they differ on the thing that matters: whether inventory decrements correctly.
7 min read · Store setup ·
Bundles look simple and aren't, because of one thing: inventory. Selling three products as one item has to decrement three stock levels, and the naive approaches don't.
There are four ways to do it, and choosing correctly comes down to whether the components are also sold individually.
Approach 1: a bundle as its own product
Create a product called "Starter Kit", price it, stock it separately.
Works when the bundle is assembled and held as its own unit — you physically box them and count boxes.
Fails when the components are also sold individually, because the two stock pools drift immediately. Sell the kit, and the individual product's stock is now wrong.
Simplest option, and the source of most bundle-related oversells.
Approach 2: a bundle app
The App Store has many. Good ones create the bundle as a product and handle component inventory correctly, decrementing each part on sale.
Works when you want bundles without development, and the app's model fits.
Check before installing: does it decrement component inventory? Does it work with your 3PL or fulfilment system, which needs to see the components to pick them? Does it survive on your theme? Several bundle apps are storefront-only illusions that fall apart at fulfilment.
Approach 3: Shopify's native bundles
Shopify supports bundles as a product type where a parent product is made up of component variants, with inventory tracked on the components. This is the correct model — the bundle exists as a purchasable product, and stock is deducted from each part.
Works when your bundles are fixed sets of existing products. This is the right default for most stores now, and it's worth checking availability on your plan before reaching for an app.
Approach 4: Shopify Functions
A cart transform function that merges line items, or a discount function that applies a bundle price when the right combination is in the cart.
Works when the logic is conditional — "any three from this collection for £45", "buy the frame and get 20% off any lens". The customer adds items normally and the function does the maths at checkout.
Needs an app to deploy the function, and remember a function has no network access: everything it decides from must be in the cart or in metafields.
Build your own bundle
The "pick any three" experience is a different problem again. It needs:
- A storefront UI for choosing components, which is theme or app work.
- Validation that the selection is allowed — a cart validation function.
- Correct pricing, usually a discount function.
- Inventory decremented per component.
- The components visible to fulfilment.
That's a real build. Several apps do it; a custom version makes sense when the rules are specific to your catalogue.
Pricing bundles
Two ways, and they behave differently:
- A fixed bundle price. Clear, easy to display, and it hides the individual prices.
- A discount on the components. Shows the saving explicitly — "£60, save £15" — which converts better, and it works naturally with discount codes and cart logic.
Most stores should show the saving. "Save £15" is the reason people buy bundles.
What to check before you commit
- Does component inventory decrement? The question that eliminates most options.
- Can fulfilment see the components? A picker needs three lines, not "Starter Kit".
- What happens when one component goes out of stock? The bundle should become unavailable, not sell anyway.
- Do returns work? Returning one item from a bundle needs a decision.
- Does reporting show what you need? Bundle revenue and component movement are different questions.
Question three is where most bundle setups quietly break — see inventory and multi-location.
Bundles are an inventory problem wearing a merchandising costume. Every approach that ignores that works fine until the first oversell.
Is this the problem you’re looking at?
Send me the link to your store and a line about what is going wrong. You get a straight answer within one business day — no pitch, no obligation.
mario@clicksandcarts.coOr see what I do around Shopify: services, work beyond the theme, selected work.