Shopify Discount Stacking in 2026: What Combines, What Doesn't, and How to Work Around Every Limit
A simple-to-understand breakdown of Shopify's discount combination rules — which discount types can coexist, why 'combining' isn't the same as 'stacking', and the workarounds merchants actually use when they hit the wall.
Shopify discount combining in 2026: the complete rules, limits, and workarounds
Shopify allows discounts of different classes to coexist on the same order, but does not truly “stack” multiple discounts on the same line item — the largest wins. This distinction between combining (selecting the best discount) and stacking (cumulative application) is the single most misunderstood and complained-about aspect of Shopify’s discount system. Since 2023, Shopify has offered a “Combinations” toggle that lets merchants configure which discount classes can coexist on an order, but when two product discounts target the same item, only the biggest one applies. A Discount Function API enhancement planned for early 2026 may finally allow true multi-discount stacking on individual line items, though it will require app development rather than working natively in the admin.
The three discount classes and how they interact
Shopify organizes all discounts into three classes: product discounts (targeting specific items or collections), order discounts (targeting the entire order subtotal), and shipping discounts (targeting shipping rates). Every discount — whether it’s a percentage off, a fixed amount, Buy X Get Y, or free shipping — falls into one of these three buckets. BXGY discounts belong to the product class. Free shipping discounts belong to the shipping class. Amount-off discounts belong to either the product or order class depending on whether they target specific products or the whole order.
Two discount methods exist within these classes. Discount codes require customers to enter a code at checkout, while automatic discounts apply whenever cart conditions are met without any code entry. Both methods follow the same combination rules, and automatic discounts can coexist with discount codes on the same order — provided each discount’s combination settings allow it.
The combination matrix works as follows:
| Discount Pair | Can Combine? | Notes |
|---|---|---|
| Product + Product (different items) | ✅ Yes | Each discount targets separate items |
| Product + Product (same item) | ❌ No | Largest discount wins on that item |
| Product + Order | ✅ Yes | Requires no checkout.liquid customizations |
| Product + Shipping | ✅ Yes | — |
| Order + Order | ✅ Yes | Requires no checkout.liquid customizations |
| Order + Shipping | ✅ Yes | — |
| Shipping + Shipping | ❌ Never | Only one shipping discount per order, period |
| BXGY + Product (same items) | ❌ No | BXGY items are ineligible for additional product discounts |
| BXGY + Order | ✅ Yes | On eligible stores |
| BXGY + Shipping | ✅ Yes | — |
| Automatic + Code | ✅ Yes | When configured to combine with each other’s class |
Two critical prerequisites apply: combining product discounts with order discounts, or order discounts with other order discounts, requires the store to have no checkout.liquid customizations and to not use the Licensify app.
How the combination toggle, code limits, and calculation order work
Every discount in the Shopify admin has a Combinations section where merchants check boxes for which other discount classes it can combine with. This setting is bidirectional — both discounts in a pair must allow combining with each other’s class, or the combination won’t work. If Discount A allows combining with order discounts but Discount B (an order discount) does not allow combining with product discounts, the pair will not combine. In the admin’s discount table, combination eligibility is displayed as icons with black outlines indicating which classes each discount can pair with.
Code limits per order are strict. Customers can apply a maximum of 5 product or order discount codes per order and 1 shipping discount code per order. These limits include codes applied via shareable links. Stores can have up to 25 active automatic discounts simultaneously (including app-based discounts), and all 25 can potentially apply to the same order. The store-wide ceiling is 20 million unique discount codes.
When multiple discounts apply, Shopify follows a fixed calculation sequence: product discounts apply first to individual items, order discounts apply second to the revised subtotal, and shipping discounts apply last. Within the same class, multiple percentage or fixed-amount discounts are calculated additively, not compoundingly. For example, a 10% code and a 20% code on a $100 order subtract $10 and $20 respectively for a total of $30 off — not 10% then 20% of the remainder. However, across classes, the math is sequential: a product discount reduces the item price first, and then the order discount calculates against the already-reduced subtotal.
When discounts cannot combine because of mismatched settings or same-item conflicts, Shopify automatically applies the best discount for the customer’s cart. The customer sees a message like “Some discount codes couldn’t be used together. We applied the best combination.”
BXGY restrictions and draft order gotchas
Buy X Get Y discounts carry special restrictions that catch many merchants off guard. Products receiving the BXGY benefit are ineligible for any additional product discount — this is hardcoded to prevent unintended stacking. If a customer enters a product discount code that targets items already in an active BXGY promotion, the BXGY discount is removed entirely and only the entered code applies. The workarounds are to ensure BXGY and other product discounts target completely different products, or to use order-level discounts (which can combine with BXGY) instead of product-level ones.
Draft orders have their own limitations. They support up to 5 discount codes, but shipping discount codes and BXGY discount codes are not supported on draft orders. Automatic discounts do not apply to draft orders by default — merchants must manually opt in. There is also a risk of over-discounting when both the merchant and customer apply codes to the same draft order.
Discounts that always apply regardless of combination settings include custom discounts manually applied by staff (in POS or draft orders) and discounts added via the legacy Scripts API.
Shopify Plus capabilities and the developer toolchain
Shopify Scripts — the Ruby-based customization engine exclusive to Shopify Plus — historically gave Plus merchants the power to write arbitrary discount logic, including true stacking. However, Scripts reached end-of-life on August 28, 2025, and the Script Editor app is no longer available for download. The replacement is Shopify Functions, a WebAssembly-based framework available to all plans but with advanced features limited to Plus.
The new unified Discount Function API (introduced in API version 2025-04) replaces three separate legacy APIs and allows a single function to apply savings across all three discount classes simultaneously. Up to 25 discount functions can be active per store. Each function runs concurrently with no knowledge of other active discounts. The combinesWith GraphQL field controls combination behavior programmatically:
combinesWith.productDiscounts: BooleancombinesWith.orderDiscounts: BooleancombinesWith.shippingDiscounts: Boolean
The most significant upcoming feature is the Discounts Allocator API, which has been in developer preview since January 31, 2024 and remains there as of March 2026. When generally available, it will be Shopify Plus-only and allow exactly one allocator function per store. The Allocator sits between discount proposal and final application — while discount functions propose discounts, the allocator distributes them. This enables use cases impossible with native settings:
- Capping total discount amounts across a cart
- Allowing multiple discounts on the same line item (beyond default rules)
- Multiplicative stacking (10% then 20% = 28% instead of additive 30%)
- Proportional distribution of order-level discounts across line items
- Custom priority ordering of discount application
Shopify staff confirmed in a September 2025 Scripts Deprecation AMA that enhancements to the Discount Function API to support multiple product discounts on the same line are planned for Q1 2026.
What merchants actually struggle with and how they cope
The community frustration around discount combining is among Shopify’s longest-running pain points, dating back to at least 2017. The core complaint, articulated across dozens of threads, is that Shopify’s “Combining Discounts” feature is misleading. As one highly-upvoted merchant put it: “It says ‘if an item is eligible for multiple discounts, only the largest discounts apply.’ This wouldn’t be classified as ‘combining,’ then would it?” Merchants report abandoned checkouts when customers attempt to apply multiple codes and receive error messages, with one February 2025 merchant noting it was “leading to abandoned checkouts, as customers are trying to apply discount codes but turning away.”
The most common scenarios merchants want but cannot achieve natively include: volume discount plus email signup code on the same product (two product discounts on one item), affiliate code plus volume discount plus free shipping (complex three-way stacking), and selective combining where Discount A works with C but not B (combination settings are binary and symmetric, not selective).
Merchants have developed several workaround strategies:
- Restructure discount types across classes — configure volume discounts as order discounts instead of product discounts, set loyalty/affiliate codes as product discounts, and configure free shipping as a shipping discount, then enable cross-class combining. This is the most recommended native approach.
- Use compare-at pricing for sitewide sales — set the compare-at price to show sale pricing, then allow discount codes on top of the already-reduced price. Limitation: strikethrough pricing only appears on product and collection pages, not in cart or checkout.
- Third-party apps — tools like Stack Discounts Ninja, RM Combinable (specifically for fixing Klaviyo-generated code combination settings), and Dollarlabs Ultimate Discounts are commonly recommended. The app ecosystem exists precisely because native functionality falls short.
- Custom Shopify Functions apps — for Plus merchants or those willing to invest in development, building a custom discount function using the unified Discount Function API provides the most flexibility, especially once the Allocator API reaches general availability.
A persistent secondary frustration involves Klaviyo-generated discount codes, which do not inherit combination settings by default. Merchants must either create combinable codes manually and upload them to Klaviyo, or use an app like RM Combinable to automatically adjust settings on Klaviyo-generated codes.
Timeline of key changes from 2024 through 2026
The discount system has evolved significantly over the past two years, with Shopify steadily expanding capabilities while migrating away from Scripts. In January 2024, the Discounts Allocator API entered developer preview. The Summer 2024 Editions brought custom discounts to POS and added discount code support for draft orders. November 2024 saw a major operational change: the automatic app-based discount limit jumped from 5 to 25, enabling viable migration from Scripts to Functions.
In April 2025, the unified Discount Function API launched, consolidating the three separate legacy APIs (which must be migrated before API version 2026-04). Scripts officially ended on August 28, 2025. The Summer 2025 Editions enabled customers to apply discount codes directly in the cart (not just at checkout) using the Horizon theme and Ajax Cart API — a meaningful UX improvement.
Looking ahead, the Q1 2026 enhancement to support multiple product discounts on the same line item via the Discount Function API represents the most significant upcoming change, directly addressing the community’s core complaint. The Discounts Allocator API remains in feature preview with no public GA date, though its Plus-only positioning suggests Shopify views advanced discount allocation as a premium capability.
Conclusion
Shopify’s discount system operates on a class-based combination model that is more flexible than it was three years ago but still fundamentally limited by a single constraint: only one product discount can apply to any given line item. The workaround landscape divides cleanly into free strategies (restructuring discount types across classes, using compare-at pricing) and paid strategies (third-party apps, custom Shopify Functions development). The Discounts Allocator API, when it reaches general availability, will be the first mechanism to truly override default allocation logic — but it will require Plus pricing and developer resources. For most merchants in 2026, the practical advice remains the same: design your discount architecture around the class boundaries rather than fighting them, and use order-level discounts wherever possible to avoid same-item conflicts.
Simply Smarter Shopify Discounts.
Install Discount Spark and start controlling discount usage fairly and automatically.