A Mix & Match offer is a Product groups bundle: one slot can hold several products, or a whole collection, and the shopper chooses which one of them they want. Everything else — the discount, the dates, the placement — works the same as on any other bundle.
Typical examples: choose any Product X and Y at a fixed total price; buy any Product X plus a fixed Product Y for 10% off; buy 2 of X or 2 of Y for 5% off; pick 1 product, then buy at least 2 more for 10% 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.
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 the Product groups 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 Mix & Match presets — "Choose any Product X and Y at a fixed total price", "Buy any Product X + fixed Product Y = 10% off", "Buy 2 of X or 2 of Y = 5% off", "Pick 1 product, then buy at least 2 more for 10% off", "Choose any Product X + Y, and get Product Z automatically free", and "Buy 3 different items = 5% off, 6 = 10%, 12 = 15%" — all set the Product groups structure. Several of them start with three empty groups for you to fill.
To build from scratch, pick Product groups on the Bundle structure card. It is available on every plan under current pricing, Free included; a Pro badge on the radio means your shop is on a legacy plan generation. A bundle already built as Product groups keeps that layout either way — the radio shows checked and disabled.
Switching in from Separate products starts you with 2 empty groups and resets the Mix & Match template and the optional-products display mode. Your discount, quantities, minimums, maximums, dates and bundle type are kept. If you switch back in the same editing session your original product list is restored, but reloading the page discards that snapshot for good.
Step 3: Fill the groups
Add products puts specific products into a group; every product you pick becomes an alternative the shopper can choose between in that one slot. + Add product group creates another slot.
Add collections fills a slot with a whole Shopify collection, so the shopper can choose any product inside it. It appears only inside a group that is still empty, and only while the bundle's type is widget-only. Once the group holds a product, or the bundle creates a Shopify product, the button disappears rather than greying out.
A group that already holds a collection will only accept more collections, and a group that already holds products will only accept more products — you cannot mix the two inside one group.
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.
Drag a group by its handle to reorder the slots, or drag a product to move it into another group; while you drag, any group that cannot accept the product dims. Removing the last product from a group empties it rather than deleting it, and an empty group blocks saving with "Add at least one product to the group or remove the group."
Two groups holding the same product or collection merge automatically. While Uncombined quantity is off, adding the same product or the same collection into two different groups merges them into a single slot with a higher Item quantity, with no warning. Tick Uncombined quantity to keep the two slots independent, each with its own product picker, variant selector and cart line.
Product swap
Product swap is what lets the shopper replace a slot's product with another one from the same group or collection. It is on by default on a new group holding more than one product or a collection, and it only appears there — a single-product group has nothing to swap to. Turn it off to lock the slot to one product; the admin then shows the note "Customers will see a default product (configurable below in advanced settings)."
Step 4: Choose how the swap looks
The Mix & Match template sits below the groups on the Bundle products card and chooses how the shopper swaps a product inside a group:
Selector — an inline control on the product title.
Modal — a pop-up list.
List — the full list shown inline in the widget.
The control is not always there. It appears only while the structure is Product groups, every group holds products or is empty, and at least one group holds more than one product. A bundle whose groups each hold a single product has nothing to swap, so the setting is not offered.
One exception is worth knowing before you choose: a group filled with a collection always swaps through the storefront's own resource picker, whatever this setting says. The template you pick here applies to groups of named products.
Step 5: 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.
On a Mix & Match bundle the checkbox also greys out as soon as any group points at a collection or the whole store, with the caption "Not available when a product group applies to a collection." It is unavailable too while a tiered or volume discount is on, while the Quantity selector is on, and while optional products are in pop-up mode.
Step 6: Choose a discount
A 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 options are available on every current plan, Free included.
Type offers Percentage, Sale price and Amount off. Percentage is always available. Sale price and Amount off appear 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.
Maximum items allowed lives in Product settings, not in the Discount card, which is where most people go looking for it. And removing the cap rewrites your discount silently: a bundle saved with Sale price or Amount off is 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, split under "By product group 1 / 2 / …" headings so you can see which slot each price belongs to. 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.
One thing a single bundle cannot do: charge a different fixed total for different quantities — "any 2 for $15, any 3 for $22". A Sale price on the bundle subtotal charges one flat total for any selection that meets the minimum. Build two bundles instead, one per price point, each with its own minimum quantity.
Tiered discount
A Tiered discount gives one percentage per quantity tier and replaces the Applies to / Type / Value row entirely. It appears only once the bundle is widget-only and Optional products or the Quantity selector is on; until both conditions hold it is absent rather than greyed out.
Percentage is the only type a tier can use, taken off each product's own price in the cart rather than off a pooled total. Each tier's Required items must be at least 1 and strictly greater than the tier before it, and once one tier carries a discount, every later tier must carry one too. For fixed per-tier prices, use the Volume discount structure instead.
Free gift
The Free gift group appears when Optional products is off, or on with Customers choose products set to "With checkboxes". Selecting it switches the bundle to per-product pricing and replaces the Type and Value fields with a "Free" tick box on every product row. Tick the gifts and leave the paid items unticked; it also resets every product's discount to 0, except any already at 100%.
Put the candidate gifts in their own product group, so the shopper chooses which one they get. You must tick at least one product, variant or collection as free, or saving fails with "Select at least one product as a free gift".
A second radio with the same "Free gift" label appears only on a bundle already saved with the older free-products discount type, while widget-only and with Optional products off or in checkbox mode. It offers one gift chosen from a separate list of products or collections that are not otherwise part of the bundle, and needs at least one added or saving fails with "No products added". A bundle that has never used it cannot be switched to it.
Step 7: 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.
On a bundle with its own product page, Show the widget on the bundle's own product page stays ticked and locked whenever the bundle offers a choice — which a Mix & Match bundle always does — with the help text "Cannot be deselected if the bundle includes variants, as they will be chosen through this widget". That locked state is correct; there is nothing to change.
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 8: Markets, active period and countdown timer
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; Specific markets reveals an autocomplete, and you must pick at least one or saving is blocked with "Select at least one market".
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. Extend the end date into the future and save to bring it back. 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 9: Advanced settings
Product variant selection. This one is specific to Product groups. Choose which product a group shows pre-selected when the widget loads: "The product from the current product page the customer is viewing," which falls back to the first product in the group when that one is unavailable, or always "The first product in the group list."
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 — a group pointing at a collection has no per-product variant rows to sync.
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 offer 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.
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 offer 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].













