What this checker models
This is a pre-launch planning tool for the native discounts a merchant creates in Discounts. Configure two or three offers, give each one a type (Order, Product, or Shipping), a method (Automatic or Code), a percentage or fixed value, an optional product scope, and the types it is allowed to combine with. The checker then tests the documented type rules, reciprocal permissions, the five-code and 25-automatic limits, and the same-line product gate.
It is not Shopify's validator. It does not connect to a store, read live discounts, or know your customer segments. When the rules block a pair, the estimate applies the highest-saving valid set, because Shopify also applies the best allowed combination. The real result is the one your customer sees at checkout.
The Shopify combination matrix
Every native discount belongs to one type: Product (items or collections), Order (cart subtotal), or Shipping (shipping cost). Combinations are type-to-type. Both discounts in a pair must allow the other type in their own Combinations section.
| Combination | Supported? | Condition |
|---|---|---|
| Product + shipping | Yes | Both discounts allow the other type. |
| Order + shipping | Yes | Both discounts allow the other type. |
| Product + product on different line items | Yes | Both product discounts allow product combinations. |
| Product + order | Yes, if eligible | No checkout.liquid customizations or features, and no Licensify app. |
| Order + order | Yes, if eligible | Same store eligibility as product + order. |
| Product + product on the same line item | Shopify Plus only | Reciprocal discount tags and Product combinations on both discounts. |
| Shipping + shipping | No | Only one shipping discount can apply per order. |
Source: Shopify Help: Combining discounts, checked 2026-11-03. The same page lists the eligibility conditions and the Discount codes FAQ covers invalid or non-combinable messages.
Why a stack still fails
One-sided permission
A product discount that allows order discounts does not make the order discount allow product discounts. Both sides must allow the other type. The checker marks the missing side by name instead of saying only “cannot combine.”
Store eligibility for product + order and order + order
These two pairings are not universal. Shopify only offers them when the store has no checkout.liquid customizations or features and is not using Licensify. If those options never appear in the discount editor, confirm the checkout setup before rewriting the campaign.
Same-line product stacking
Two product discounts on different items can combine for all merchants. Two product discounts on the same line are Plus-only and need reciprocal tags. The product scope in this checker is there to expose that difference: “both product lines” overlaps with “line 1 only,” while line 1 and line 2 do not overlap.
Code and automatic limits
A customer can use up to 5 product or order discount codes and 1 shipping discount code on one order. The store can have at most 25 active automatic discounts, including app-created ones, and no more than 25 automatic discounts can apply to one order. If you test with codes already on the cart, count those too.
Sales channel
Native combinations work on the Online Store, Storefront API, and Shopify POS. They are not available on Facebook, Instagram, Google, or other external checkouts. A stack that passes on your online store can still fail when the same offer is promoted through an external checkout.
Rules outside the type matrix
- Buy X get Y: on non-Plus plans, products in a BXGY discount are ineligible for further product discounts. Plus has an exception for the free item the customer receives. The checker does not model BXGY carts.
- App discounts with multiple types: a single discount that includes product, order, or shipping savings can combine only with discounts that allow every included type. Allowing order but not shipping is enough to block it.
- Best-value replacement: if discounts cannot combine, Shopify keeps the best discount or best allowed combination for the cart. The customer may not get every code they typed.
- Customer eligibility and minimums: segments, markets, minimum purchase amount, minimum quantity, usage limits, active dates, and subscription purchase types all sit outside the type matrix. The checker asks you to confirm store eligibility but does not read these rules.
- Scripts, custom discounts, and checkout apps: Shopify Scripts and manually applied custom discounts can bypass other discounts' combination settings. Checkout apps may also change behavior.
Application order and the math
When combinations are allowed, Shopify applies discounts in this order:
- Product discounts on individual items.
- Order discounts on the revised subtotal after product discounts.
- Shipping discounts last.
An order percentage runs on the subtotal after product discounts, not on the original merchandise total. If two percentage order discounts apply, each percentage is calculated on that same revised subtotal; they do not shrink each other's base. A percentage order discount is applied before a fixed-amount order discount. On a Plus same-line product pair, Shopify's examples apply the percentage before the fixed amount as well.
The checker uses cents for the arithmetic, clamps a fixed discount to the remaining base, and never lets the total go below zero. A fixed product amount is modeled as one amount off the eligible subtotal, which matches the “Only apply discount once per order” behavior. If your fixed product discount applies to every eligible item, the real amount can be higher, so treat that number as a lower-bound planning estimate.
Worked example
Cart: $60 on line 1, $40 on line 2, $12 shipping. Discount 1 is a 20% Product automatic discount for both lines. Discount 2 is a 10% Order code. Discount 3 is a $12 Shipping code. All three allow the types they need, and the store is eligible for product + order.
| Step | Base | Discount | Left |
|---|---|---|---|
| Product 20% | $100.00 | $20.00 | $80.00 |
| Order 10% | $80.00 | $8.00 | $72.00 |
| Shipping $12 | $12.00 | $12.00 | $0.00 |
Total: $72.00. Savings: $40.00. If the store is not eligible for product + order, the product and order pair conflict. The highest-saving valid set becomes product + shipping: $20 + $12 = $32 saved, and the order code is blocked. That is exactly the kind of result the checker is meant to expose before launch.
The limits to check before launch
- 5 product or order discount codes + 1 shipping code per order.
- 25 active automatic discounts per store, including app-created ones.
- Only one shipping discount per order, automatic or code.
- Same-line product stacking: Shopify Plus plus reciprocal tags.
- Supported channels: Online Store, Storefront API, Shopify POS. Not external checkouts.
- A 0% or $0 discount may not behave correctly at checkout. Use at least 1% or $0.01 for a minimum-value test.
For code-level limits such as one use per customer and unfinished-checkout holds, read Shopify unique discount codes. Combination rules do not override a code that has already been used.
Before launch, walk one representative cart through checkout. The type-by-type retest order, including the BXGY and app cases above, is inShopify discount combinations.
Sources
- Shopify Help: Combining discounts— type matrix, eligibility, limits, application order, and same-line tags; checked 2026-11-03.
- Shopify Help: Discount codes FAQ— multiple-code carts, invalid-code messages, channels, and usage holds; checked 2026-11-03.
- Shopify Help: Amount off discounts— fixed product amounts and the “Only apply discount once per order” setting; checked 2026-11-03.