Skip to main content

Create classic bundles

Building the everyday "buy these together and save" bundle, and the one rule that decides whether you can charge a fixed price instead of a percentage.

Written by Andrey Gadashevich

A classic bundle gives shoppers a discount for buying several items together — two of the same product, a pair of related items, or a mix of several. It is the plainest shape the app builds, and both Product bundle layouts produce it.

Typical examples: buy 2 units of the same item and get 10% off; buy X and Y together for a percentage off or a fixed total; buy at least 5 products of your choice and get 15% off.

Testing more than one version

Use Add variant to create up to four widget variants (A–D) of one bundle, each with its own configuration and preview, edited in its own tab. Run A/B test splits shoppers across the active variants; End A/B test shows revenue and purchases per variant, and the variant you pick then receives all the traffic while the rest are archived.

Step 1: Start the bundle and name it

Click Create new bundle on the Bundles page.

Learn how to create product bundles for your Shopify store

Bundle internal name, in the Bundle information card, is required and capped at 255 characters. It is an internal label rather than shopper-facing text — with one exception: if the bundle creates its own Shopify product, this exact name becomes that product's title in Shopify, verbatim.

What shoppers read in the widget comes from Bundle title and Bundle description on the same card. Both are translatable once your shop has more than one widget language.

There is no Active / Draft selector in the form. Publishing is the toggle beside the title in the page header — see Step 10.

Step 2: Choose a preset, or a structure

Four preset tiles show while you are creating a bundle, with a "View more" link revealing ten more. Clicking a preset replaces every offer setting with that preset's full configuration, so pick your preset first and adjust afterwards. Presets only appear during creation.

The presets that build a classic bundle are "Buy 2 units of the same item and get 10% off", "Buy X + Y together and get a % off, or fixed total price", "Buy at least 5 products of your choice and get 15% off", and "Buy at least 2 items = 15% off, 3 = 25% off" — all four set the Separate products structure.

To build from scratch, use the Bundle structure card.

Separate products. One fixed slot per product you add. The shopper cannot exchange a slot's product for another one. This is the layout the classic presets use.

Product groups. One slot holds several products, or a whole collection, and the shopper picks one of them. Product groups is not limited to mix-and-match offers — it carries exactly the same discount groups as Separate products, so a classic "buy these together and save" bundle works there too if you want the shopper to be able to swap an item.

Switching between the two rebuilds the product list and resets the Mix & Match template and the optional-products display mode; your discount, quantities, minimums, maximums, dates and bundle type are kept.

Step 3: Decide whether the bundle gets its own product page

This is a single checkbox at the top of the Bundle type card: Create a product for this bundle additionally to widget. Leave it unticked and the bundle stays widget-only. Tick it and a Physical / Shopify radio appears underneath.

Physical gives each bundle item its own line in the cart and at checkout, and lets you sell the bundle on the Google, YouTube, Facebook and Instagram channels. Shopify gives you a native Shopify bundle product that works with Shopify POS and is split into its components at checkout and on the order.

This choice is made once, while you are creating the bundle, and it is permanently locked after the first save — there is no control anywhere for changing it later. To change a saved bundle's type, open the Bundles list, use the ••• menu on the row → Duplicate, set the type on the copy while it is still unsaved, save the copy, then deactivate or delete the original.

The checkbox is also unavailable while a tiered or volume discount is on, while the Quantity selector is on, while optional products are in pop-up mode, and when a group points at a collection or the whole store. The caption under it names the setting that is blocking it.

Step 4: Add your products

Click Add products in the Bundle products card. On Separate products each product becomes its own slot; inside a Product group each product becomes an alternative the shopper can choose between in that slot.

See most & least selling products opens a picker built from your sales data: "Most selling products" lists the five products with the largest sales over the past 30 days, "Least selling products" the five with the lowest.

Item quantity — the "Qty" box on a Separate products row, or the group footer on Product groups — sets how many units of that slot the bundle contains. It accepts a whole number from 1 to 999, and a value outside that range is ignored when the field loses focus. With Item quantity above 1 and Uncombined quantity off, the shopper sees a single row with an "x3"-style badge and that many units of the chosen variant land in the cart.

A bundle needs at least one product to save — "Add at least one product."

Product settings

Optional products lets the shopper decide which of the bundle's items to buy, adding an Optional and a Pre-selected checkbox to each slot plus the Minimum items required and Maximum items allowed fields.

Quantity selector is offered on widget-only bundles and gives each row a +/- stepper. It also adds the Minimum and Maximum items fields. The stepper multiplies the quantity of the variant already chosen on that row; it never gives each added unit its own variant selector.

Both are available on every plan under current pricing, Free included. A Pro badge beside either one means your shop is still on a legacy plan generation.

Turning either on has a consequence for pricing — see the next step.

Step 5: Choose a discount

A Separate products or Product groups bundle shows a Discount card with radio buttons for No discount, Standard discount, Tiered discount and Free gift.

Standard discount

Applies to prices the bundle as a whole, with Bundle subtotal amount, or product by product, with Individual product price. Both are available on every current plan, Free included.

Type offers Percentage, Sale price and Amount off — not "Amount discount". Percentage is always available. Sale price and Amount off are offered only once the number of items the bundle can end up containing is pinned down, and there are three ways that counts as pinned:

  • Nothing lets the shopper change the count — Optional products and the Quantity selector are both off.

  • You capped it — Maximum items allowed is set to Limited with a number.

  • You are pricing item by item — Applies to is Individual product price, with the Quantity selector off.

If none of those holds, only Percentage is offered, because the shopper controls the size of the bundle and only a percentage scales with a selection of unknown size.

Two things catch people out here. Maximum items allowed lives in Product settings, not in the Discount card, so it is easy to hunt for the missing discount types in the wrong place. And removing the cap rewrites your discount silently: a bundle saved with Sale price or Amount off is quietly changed back to Percentage the next time you save once the count is unbounded again.

Value applies to the whole bundle when Applies to is Bundle subtotal amount; with Individual product price you type a number on each product row instead. Values are clamped in the field itself, with no blocking error: negative numbers become 0, Percentage is capped at 100, Sale price and Amount off are capped at 999,999,999, and everything is rounded to two decimals.

A sale price can only lower the bundle total. If the products the shopper selected already cost less than the sale price you set, the bundle goes into the cart at the real product price instead.

Tiered discount

A Tiered discount gives one percentage per quantity tier — "at least 2 items = 15% off, 3 = 25% off" — and replaces the Applies to / Type / Value row entirely.

The radio appears only once the bundle is widget-only, with the "Create a product" checkbox off, and Optional products or the Quantity selector is on. Until both conditions hold it is not shown at all; it is absent rather than greyed out. Turning it on also locks the "Create a product" checkbox with the caption "Not available with tiered discounts," and turning both Optional products and the Quantity selector off again clears the tiered discount on save.

Percentage is the only type a tier can use, because the shopper decides how many items go into the bundle. The percentage is taken off each product's own price in the cart rather than off a single pooled total. Each tier's Required items must be at least 1 and strictly greater than the tier before it — "Must be at least 1+ more than previous option" blocks saving — and once one tier carries a discount, every later tier must carry one too.

A Tiered discount offers no Label, Badge, Free gift or pre-selected tier.

For a fixed price per quantity, use Volume discount

If you want "2 for $15, 3 for $22" rather than a percentage, switch the structure to Volume discount. Every option there can be priced with Percentage, Sale price or Amount off, no matter how many products the bundle holds, and each option can also carry a Label, a Badge and a free gift.

The trade-off is that Volume discount counts units of one and the same product. A shopper mixing two different products from your set never reaches a tier. If you need two price points across a mixed selection, build two bundles instead, one per price point, each with its own minimum quantity.

Volume discount is available while you are creating a bundle, and on a saved bundle only while that bundle is widget-only.

The other two groups

No discount bundles the items at their regular price, with any reduction coming from your own Shopify discounts.

Free gift replaces the Type and Value fields with a "Free" tick box on every product row. It appears when Optional products is off, or on with Customers choose products set to "With checkboxes", and it needs at least one product, variant or collection ticked or saving fails with "Select at least one product as a free gift".

Step 6: Decide where the widget appears

Tick Show the widget on product pages of included bundle items in the Advanced tab → Widget placement card to make the bundle appear on the product pages of the products it contains.

Select where the widget will be displayed then lets you pick which of those items show this bundle on their own page. Every item is selected by default, and the button caption reports how many are selected.

The store-wide setting is checked first: if "Widget on product pages" in Widget customization → General tab → Global display is set to No, no bundle's widget appears on any product page. Saving that store-wide setting also writes the same Yes/No onto every bundle's own tick, so flipping it to No and back resets your per-bundle exceptions.

The widget's own layout is set per bundle in the editor's live preview panel, not on the Widget customization page: beside a Product images checkbox there is a two-button icon toggle with tooltips reading "Horizontal layout" and "Vertical layout".

Step 7: Set the active period and countdown timer

Set Start date and Start time in the Offer tab → Bundle active period card. They default to the moment you opened the form, so leaving them alone puts the bundle live as soon as you save. Set a future moment and the bundle saves as Scheduled and goes Active at that time, invisible on your storefront until then.

Tick Set end date and time to give the bundle an expiry. When the end moment passes the badge changes to Expired and the bundle disappears from every placement and from the automatic discount immediately. To bring an Expired bundle back, extend the end date into the future and save — the bundle was never switched off, so there is nothing else to switch back on.

There is no validation on either date. You can save a start date in the past, and an end date earlier than the start date.

To show shoppers a countdown, tick Show countdown timer on the Advanced tab and pick one of four conditions:

  • Follow end date and time set for bundle — the default. It needs "Set end date and time" ticked; with no end date, or one already past, no timer is drawn.

  • Fixed duration — a Duration (min) field appears beside the select, seeded to 15, giving each shopper their own countdown of that length.

  • Ends at midnight (user's local time) — no further field to fill in.

  • Custom end date — End date and End time fields appear, seeded to one hour from now. Saving is blocked on a past or missing value with "End date and time must be in the future".

The countdown is a display element only. None of the four conditions starts, stops or expires a bundle.

Step 8: Limit the bundle to specific markets

The Markets card on the Advanced tab appears only once your store has more than one Shopify market; with one market or none, the card is absent entirely.

All markets is the default for a new bundle. Specific markets reveals an autocomplete where you pick one or more, and you must choose at least one or saving is blocked with "Select at least one market".

Step 9: Advanced settings

Display discount to customers from Compare-at price. The saving shoppers see is measured against the compare-at price, while the discount itself is still calculated from the product's actual price.

Pre-select the first available product variant in the widget. Leave it ticked for the widget to arrive with a variant already chosen. Untick it to force the shopper to choose one before Add to cart works.

Add new product variants to product bundle automatically. Only on widget-only bundles built from individual products. Leave it ticked so variants you create later join this bundle automatically.

Enable integration with subscription apps. On widget-only and Physical bundles; it is removed for Shopify bundles. Tick it when the bundle's products are sold on a subscription or selling plan.

Enable custom property field. Adds a free-text input to the widget. Field title is both the shopper-facing label and the property name printed on the order; Field help text is the hint under the input; Make the field required blocks Add to cart until it is filled in.

Exclude B2B customers. Hides the bundle from shoppers signed in to a company account, removing it from both the widget and the automatic discount.

Bundle priority

Bundle priority decides which bundle wins when several compete for the same product page. The higher the number, the earlier the bundle is shown — so give your flagship bundle a larger number, not a smaller one. Bundles that share a number are ordered by their bundle ID, highest first.

A bundle whose own product is the page being viewed always comes first, whatever its priority number.

This setting is on Separate products, Product groups and BOGO bundles; Volume discount bundles do not have it. It is greyed out on the non-primary variant of a running A/B test, along with the bundle's internal name, the active period, the countdown timer, Markets, the whole Widget placement card, "Enable integration with subscription apps" and "Exclude B2B customers".

Step 10: Publish and test

Publishing is the toggle beside the title in the page header. Switch it on to publish and off to keep everything you have configured while stopping the bundle from being served to anyone. If the bundle is beyond your current plan's limits, clicking the toggle opens an upgrade modal instead of saving.

To check the bundle before shoppers can see it, turn on the "MBC Bundles App" embed in a draft theme and open that theme's preview from Online Store → Themes. Draft, Scheduled and Expired bundles all render there while staying invisible on your live theme. The discount will not apply in preview, so place a real test order once the bundle is Active if you want to confirm the price.

Need Help?

If you have any questions, please contact our support team.

📩 Contact Support: Reach out to us via live chat or send an email to [email protected].

Did this answer your question?