Discount several add-ons with a main product on Shopify
Why Shopify's Buy X get Y discounts only a fixed number of add-ons, what to try natively, and how to tier the discount by add-ons.
Facts checked against Shopify's Help Center on 5 Oct 2026
Short answer: Shopify's Buy X get Y discount is built around a fixed number of "get" items, so it doesn't fit a main product with a variable number of add-ons. To reward every add-on a shopper picks, with a discount that steps up with each extra add-on, up to three steps, you need a discount that counts the add-ons, which means an app that ships a Shopify Discount Function.
I'm Nathan, and I build Cobundle, a bundle app that does this. It's in Shopify's app review and launching on the Shopify App Store, so there are no merchants using it yet and nothing here comes from a customer. Every Shopify claim below links to the page it came from, and there's a section on when you shouldn't use an app like mine.
Shopify is a trademark of Shopify Inc.. Cobundle is an independent app, not made or endorsed by Shopify.
The problem merchants keep hitting
The pattern is the same each time. A store sells a main product with natural extras: boots with polish, laces and a brush, a snowboard with bindings and wax. The merchant wants the extras discounted when the main product is in the cart, however many extras the shopper adds.
Three Shopify Community threads describe it, and none had an accepted answer when I read them on 2026-10-05:
- A boot retailer wanted 50% off accessories bought with boots and found the discount applied to one accessory only (thread, March 2024).
- A store with a "buy 1, get 1 50% off" offer saw only one set of products discounted when shoppers added several (thread, November 2024).
- A jewelry store wanted 20% off any items from selected collections after buying one piece. They reported that setting the "get" quantity to 1 discounted one item, and setting it to 3 needed three items in the cart before anything applied (thread, January 2024).
Most replies across the three pointed to an app or a developer. I'll try to explain the mechanism first instead.
What Shopify's Buy X get Y does here
In Shopify's Buy X get Y discount, you choose what the customer buys and what the customer gets. For the "get" side you set a quantity of discounted items, pick specific products or collections, and choose percentage, amount off each, or free. You can optionally cap the number of uses per order. Customers add every item to the cart themselves; the discounted item is never added for them.
The offer is defined by a quantity. It reads as "get N items", and what the Help Center doesn't document is a rule like "get whatever number of add-ons the shopper chose, and scale the discount with that number." That matches what the threads report. It's a reading of the documentation plus those reports, not something I can promise for every setup, so test it on your own store.
Two more native rules matter if you stack offers:
- Outside Shopify Plus, all products in a Buy X get Y discount are ineligible for further product discounts. On Plus, the product the customer receives can combine with other product discounts, but the product the customer buys can't (discount combinations; the API object is DiscountCombinesWith).
- A store can have a maximum of 25 active automatic discounts, and app-based discounts count toward that total (automatic discounts).
What to try first without an app
None of these is perfect, and each has a catch worth knowing before you build it.
- Set the "get" quantity to the number of add-ons you want, and require the shopper to take them all. It works for an all-or-nothing offer like "boots plus 3 accessories". It's the "set it to 3 and it needs 3" behavior from the January 2024 thread, so it fails for a shopper who wants two.
- Point "get" at the add-on collection with "amount off each". One reply in the March 2024 thread suggested this. The merchant answered that they needed percentages because prices vary, so check it against your own price spread.
- Use a minimum purchase amount instead of a minimum quantity. A reply in the January 2024 thread reported this applies the discount to every item after the first. It counts money, not how many different add-ons were chosen.
- Use separate, simpler offers. Sometimes "10% off any accessory over $X" is the real goal, and a plain automatic discount is enough.
If your offer is "accessory X at a set discount when product Y is in the cart", native Buy X get Y is free and does exactly that. Stop here.
When you need the discount to count the add-ons
The case native Buy X get Y doesn't cover is a tier on how many different add-ons the shopper picked:
| Add-ons chosen | Discount |
|---|---|
| 1 | 10% |
| 2 | 15% |
| 3 | 20% |
A discount that does this has to look at the cart, count the qualifying add-ons, pick a tier, and apply the discount to the right lines. On Shopify that means a Discount Function, a small program that runs inside Shopify's checkout. Stores on any plan can use public apps from the Shopify App Store that contain functions; only Plus stores can use custom apps that contain Function APIs.
You can build your own on Plus with a developer. Otherwise it means an app. Cobundle's anchor plus add-ons bundle does this:
- The merchant picks the main product (the anchor) and the add-ons: up to 3 hand-picked, or up to 50 from a collection or tag.
- The merchant sets up to 3 tiers, so the discount steps up with each add-on, up to three steps. Each tier is a number of add-ons and a discount: a percentage, or an amount off.
- A widget on the main product page lets the shopper tick add-ons and shows the discount growing.
- At checkout, Shopify applies the discount and labels each bundled line, for example "Bundle 15% off". No code is typed.
- Every item stays a real product and variant. Inventory, SKUs and fulfillment are unchanged, and no bundle product is created.
A worked example
Example prices: boots $200, polish $15, laces $10, brush $20, with the tiers above.
| Cart | Subtotal | Discount | Shopper pays |
|---|---|---|---|
| Boots + polish | $215.00 | 10% = $21.50 | $193.50 |
| Boots + polish + laces | $225.00 | 15% = $33.75 | $191.25 |
| Boots + polish + laces + brush | $245.00 | 20% = $49.00 | $196.00 |
Check the last row. The percentage comes off the main product as well as the add-ons: $40 of that $49 is the boots. That's how the anchor type works, and it's the single biggest surprise for merchants who want an accessories-only discount. In the Community thread, the boot retailer wanted exactly that, and this wouldn't give it to them. If the main product has thin margins, use a smaller percentage or an amount-off tier instead. If the shopper raises the main product's quantity to 2, both units get the discount. A second separate main-product line gets none.
Where Cobundle stops
What it doesn't do:
- Tiers count different add-ons, not quantity. Three of the same accessory count as one add-on. So do three sizes or colors of one product. I built it this way on purpose. A bigger basket of different things is what I wanted to reward, and same-product quantity breaks already have good tools. If you want "buy 3 of this, save 10%", use a volume discount app.
- It discounts the set, not the accessories alone. See the worked example above.
- Set price isn't available here. "Boots plus any 2 accessories for $X" isn't supported. A set price works only on fixed sets, where every product in the set must be in the cart.
- Limits: up to 3 tiers per bundle, 3 hand-picked add-ons (50 with a collection or tag), and 10 bundles per store, but all active bundles share a size limit from Shopify's 10,000-byte function input cap (roughly 400 distinct products in total); the app tells you if you hit it.
- Online Store only. There's no POS or headless support.
- Stacking follows Shopify's rules. Cobundle's discount is created so it can combine with product, order and shipping discounts, but the other discount has to allow combining too, and outside Plus a line can take only one product discount. Don't expect it to stack with every code. All your bundles share one automatic app discount, so they use one of your 25 automatic discount slots.
If a bundle discount ever doesn't show, our troubleshooting guide covers the usual causes.
When not to use an app for this
- You want a discount on the add-ons only. For add-ons only with a fixed number of add-ons, use native Buy X get Y. For add-ons only with a variable number, Cobundle's anchor type can't do it.
- You want quantity breaks on one product: a volume discount app.
- You sell one fixed set at one price: Shopify's free Bundles app may be all you need.
- Your warehouse or a marketplace needs a single bundle SKU. A discount-based app never creates one.
Test it before you trust it
Whichever route you take, test in a private window while logged out of your admin. Add the main product only, then each add-on one at a time, and check the discount at each tier boundary in the cart and in checkout. Then add a discount code and check what happens, since that's where stacking surprises show up. For the tiering side, see how to add tiered bundle discounts and how mix and match works.
FAQ
Why does Shopify's Buy X get Y only discount one add-on?
The offer is defined by a quantity of "get" items. Merchants in Shopify Community threads report that a quantity of 1 discounts a single item, and a higher quantity needs that many items in the cart. The Help Center documents the quantity setting but no rule that scales with how many add-ons were chosen, so test your setup.
Can I give a bigger discount for each extra add-on on Shopify?
Yes, up to three steps, but not with the Buy X get Y discount alone. You need a discount that counts the add-ons and picks a tier, which means a Shopify Discount Function. Public apps from the App Store that include one work on every plan.
Do I need Shopify Plus to discount multiple add-ons?
No. Stores on any plan can use public apps that contain Shopify Functions. Only Plus stores can use custom apps that contain Function APIs, so building your own does need Plus.
Will the discount combine with my other discount codes?
Only if both discounts allow it in their combination settings. Outside Shopify Plus, a line item can take only one product discount, and products in a Buy X get Y offer are ineligible for further product discounts. Cobundle's discount is created so it can combine with product, order and shipping discounts, but the other discount must allow it as well.
Does the discount apply to the main product too?
In Cobundle's anchor plus add-ons bundle, yes. The percentage or amount applies to the main product and the add-ons together, not to the add-ons alone. For add-ons only with a fixed number of add-ons, use native Buy X get Y. For add-ons only with a variable number, Cobundle's anchor type can't do it.