Fashion stores run three bundle offers more than any others: "3 for 2" on basics, "any 3 for $60" on a collection, and "complete the look" on an outfit. They look alike on a banner and are built differently underneath. Shopify's native Buy X get Y discount handles the first and stops at the storefront; the second needs a mix & match offer that counts sizes and colours as one product and discounts the cheapest units; the third is a bought-together row or a fixed outfit bundle. This guide walks through each mechanic, what a refund of one item from a 3-for-2 looks like, and badges on collection cards.
The three mechanics side by side
| Offer | What the customer sees | Build it as | Shopify native? |
|---|---|---|---|
| 3 for 2 on tees | Add 3, the cheapest is free | Buy X get Y across the collection, 100% off the cheapest | Yes |
| Any 3 for $60 | Pick any 3 from the collection, pay $60 | Mix & match with a set price | No |
| Complete the look | Jacket page shows the jeans and belt from the photo | Bought-together row or fixed outfit bundle | Partly (theme sections, no discount) |
3 for 2 across a collection
A 3-for-2 is a Buy X get Y where X and Y are the same collection. In Discounts, create an automatic Buy X get Y: Customer buys 2 items from "Basics", Customer gets 1 item from the same collection at 100% off. Shopify applies the discount to the lower-priced item the customer chose; six tees in the cart, two free. For a plain 3-for-2 the native discount is correct and free.
Where it stops is the storefront:
- No cart bar and no running count ("2 of 3"): a customer with 2 tees sees nothing that says "add one more and it is free".
- No auto-add. The native discount never adds the third item; the customer has to go back and pick it.
- No badge on product cards unless you edit the theme.
- One product discount per line item, and combinations with other discounts are opt-in per discount.
The gap is not the maths; it is the number of customers who reach the third item. Auto-adding a free gift on Shopify covers the difference between a discount that waits and a cart bar that asks.
Any 3 for $X: mix & match
"Any 3 tops for $60" is not a Buy X get Y: there is no free item, there is a set price. Build it as mix & match on the collection with set sizes (any 3 for $60, any 5 for $90). Three rules keep it fair:
- Sizes and colours are one product. A medium black tee and a large white tee are two units of the set. An app that counts them as separate products gives no discount to the customer who picks the same style twice, which is exactly what a basics buyer does.
- The cheapest units carry the discount. Two $28 tees and a $45 shirt cost $60, with the saving on the tees; a fourth unit above the set stays at regular price until the next full set.
- Page and checkout must agree. The page says $60, the cart bar says "2 of 3, add 1 more", checkout charges $60. A discount built in theme JavaScript and recalculated by another system at checkout drifts; discounts that run as Shopify Functions calculate the same number in the cart, in Shop Pay and at POS. Why a bundle discount does not apply at checkout lists the usual causes.
Mix & match bundles on Shopify goes through set sizes, percent versus set price, and the builder block on the collection page.
Complete the look
- Bought-together row when the customer should choose. Under the jacket, the jeans and belt from the photo (hand-picked for a lookbook, or learned from orders for the rest of the catalogue) with an "Add all" button and a small discount on the extras. Each product keeps its own size selector.
- Fixed outfit bundle when you want one price and one cart line: "The weekend look, $149" with jacket, jeans and belt as components, each left open so the customer picks a size inside the bundle. Inventory is deducted per component, so the outfit disappears when the jeans sell out in that size. How fixed bundle inventory works has the details.
Variants and sizes
Volume tiers ("2 for $50") should count all variants of a product together, so 1 small + 1 medium reaches the tier. Mix & match counts units whatever the size or colour, and a fixed bundle with open components lets the customer pick the size inside the widget. The native Buy X get Y counts variants of the same product as items of the collection. Check your app on a product with 20 variants before launch.
Returns: refunding one item from a 3-for-2
A customer bought three $25 tees with the cheapest free, paid $50, and returns one of the paid tees. Shopify records discounts per line: the free tee is a line with a $25 discount allocated to it, the paid tees are lines at $25. On the refund page you refund the returned line at the amount paid for it, $25; the free tee stays free. Shopify does not re-run the promotion on a partial refund, so the customer keeps two tees for $25 and you have effectively given a 2-for-1.
The refund page lets you apply or change a discount on a line item before completing the refund, applied to the full quantity of that line. Decide the policy in advance and write it into the returns page: either the promotion is honoured as paid (simplest, and what most fashion stores do), or returning an item re-prices the remaining ones, which you apply by hand on the refund page. Confirm how the allocation shows for your own discounts on a test order in your admin.
Badges on collection cards
A 3-for-2 that customers only learn about on the product page converts worse than one they see while browsing. Badges on product cards, "3 for 2", "Any 3 for $60", "Bundle & save", in collections, search results and recommendations, one badge per card, do that job. Shopify has no badge system for discounts; it is a theme edit or an app feature, and badges should match cards by product handle so they survive infinite scroll and filters.
The native Shopify route and where it stops
- Discounts › Buy X get Y: 3 for 2 and buy 2 get 1 free, lower-priced item discounted, applied in checkout and POS. No cart bar, auto-add or badges.
- Discounts › Amount off products with a minimum quantity: approximates "2 for $50" on a product, one tier per discount.
- Shopify Bundles app (free): fixed outfit bundles and multipacks with component inventory. No mix & match, no set price across a collection.
Creating bundles on Shopify without an app lists what each native tool can do.
With MixMaxer
- 3 for 2: Offers › Create offer, the "Buy 2 get 1 free" template or Buy X get Y on the Basics collection, condition Buy 2, reward 1 from the same collection at 100% off. The cart bar shows "Add 1 more to get the cheapest free" with a one-click button; auto-add is optional.
- Any 3 for $60: Create offer › Mix & match on the collection, set sizes any 3 for $60 and any 5 for $90. Add the Mix & match block to the collection template for a builder with a live counter. The checkout Function discounts the cheapest units and counts every variant as a unit.
- Complete the look: Create offer › Frequently bought together on the jacket, Manual source for lookbook pairs or Automatic for learned ones, 5% off the extras. Or Create offer › Fixed bundle for "The weekend look" with every component on "Any variant (customer picks)".
- Variants: on a volume tier, switch on "count all variants together".
- Badges: enable the card badges embed (Growth plan).
- Prices per market: "3 for $60" in USD, "3 for €55" in EUR, "3 for £48" in GBP, set per Shopify Markets currency.
- Test at checkout with a sample cart (two $28 tees and a $45 shirt) to see which units are discounted before publishing, then A/B test $60 against $65 and read profit per variant.
Discounts are Shopify Functions, so they apply in Shop Pay, accelerated checkouts and POS and keep working if MixMaxer's servers are down. Two prices never stack on one item; the offer order decides which offer prices a product that is in several.
FAQ
Can I do 3 for 2 on Shopify without an app?
Yes. Discounts › Buy X get Y with the same collection as X and Y, 2 items bought, 1 at 100% off, applies the discount to the lower-priced item. What you do not get is a cart bar, auto-add or badges on the collection cards.
How do I set up "any 3 for $60" on clothing in Shopify?
With a mix & match offer on the collection: set sizes (any 3 for $60), sizes and colours counted as units, and the cheapest units discounted so the set costs $60. Shopify's native discounts have no set price across a collection; an app is needed.
Do bundle tiers count different sizes and colours together?
They should: 1 small + 1 medium should reach "2 for $50", and a mix & match set counts every unit whatever the variant. Check this setting in your app before launch.
What happens when a customer returns one item from a 3-for-2?
Shopify refunds the amount paid for the returned line; the free item stays free, because the promotion is not re-run on a partial refund. You can apply or change a discount on a line from the refund page if your returns policy re-prices the remaining items.
How do I show a "3 for 2" badge on product cards in collections?
Shopify has no badge system for discounts; it is a theme edit or an app feature. MixMaxer's card badges embed adds "3 for 2" or "Any 3 for $60" to product cards in collections, search and recommendations, on the Growth plan and up.
MixMaxer builds 3 for 2, any 3 for a set price and complete-the-look offers for fashion stores, with sizes counted as units, badges on collection cards and A/B tests with profit per variant. Install from the Shopify App Store · Mix & match: any N products from a set. Last checked 2 November 2026.