Restrictions & limiters with discounts, auto-add & gifts
How cart-validation rules collide with offers and discounts — and how to design the two sides so they never block a cart you created.
Restrictions and the Products Limiter are cart-validation features: they decide what a shopper is allowed to keep in the cart and check out with. Campaigns, Auto-Add, and discounts are offer features: they add products and adjust prices. Because the two sides run at different moments, an offer can build a cart that a restriction or limiter then refuses — and the shopper hits an error they did not create. This page is the narrow, hands-on conflict guide for those collisions.
This page goes deeper than the general How features interact guide, which covers campaign ordering and precedence across the whole app. Here we focus only on cart-validation features (restrictions and limiters) hitting offer features (Auto-Add, Gift with Purchase, and discounts). Read the general guide first if you want the big picture.
The timing model in one table
Every conflict on this page comes from one fact: offers act on the live cart, but restrictions and limiters enforce later, at the cart or checkout stage. Nothing checks a restriction or limiter before an offer adds a product — so an offer can happily create a cart that validation then blocks.
| Stage | What runs here | Acts on |
|---|---|---|
| Live cart (shopper browsing) | Campaign conditions, Auto-Add, Gift with Purchase, campaign/tier/shipping discounts | Adds products, recalculates the live cart, fires more offers as the cart changes |
| Cart stage (add / update line) | Restrictions with Run on cart enabled, Products Limiter | Blocks the add/update action if a rule is violated |
| Checkout | Restrictions with Run at checkout enabled (on by default), Products Limiter | Blocks completing the order if a rule is violated |
The app never stops an Auto-Add or a gift just because a restriction or limiter would later block the resulting cart. Validation is a separate system that runs after the offer. If you want the two to agree, you have to design them to agree — the rest of this page shows how.
Auto-Add x limiter
The Products Limiter is a pure quantity check. At checkout it groups cart lines by product and variant, then compares each group's quantity against its cap: a maximum violation fires when quantity is greater than the max, a minimum violation when quantity is below the min. SKU-level limits win over variant-level, which win over product-level.
Auto-Add does not consult those caps before adding. If an Auto-Add campaign pushes a variant's quantity above its limiter maximum, the cart looks fine in the drawer — the block only appears at the cart or checkout stage, with the limiter's maximum message (by default "You can only select a maximum of {max} {product}").
Failure walkthrough
You set a limiter
A variant limiter on "Travel Mug" with a maximum of 2.
The shopper already holds 2
The shopper manually adds 2 Travel Mugs. The cart is valid — exactly at the cap.
An Auto-Add fires
An Auto-Add campaign ("add 1 Travel Mug when subtotal is over $40") triggers and adds a third Travel Mug. The Auto-Add does not check the limiter, so the unit is added.
Checkout is blocked
At checkout the limiter sees quantity 3 against a max of 2 and blocks the order with the maximum message. The shopper is stuck with a cart they did not knowingly break.
The fix
Keep the Auto-Add target quantity and any quantity the shopper can plausibly already hold within the cap.
- Lower the Auto-Add target so the combined quantity cannot exceed the limiter max.
- Or raise the limiter max to leave headroom for the auto-added units.
- Or scope the limiter to a variant or SKU the Auto-Add never touches.
A limiter maximum of 1 plus an Auto-Add that adds that same item is the classic trap: the shopper only needs the item in the cart once for the auto-add to push it to 2 and block checkout. Either don't auto-add a max-1 item, or enforce the "only 1" rule with the offer itself (see the recipe below).
Auto-Add / Gift with Purchase x restriction
Restrictions are richer than limiters — they evaluate AND/OR rule groups over products, cart values, country, and customer tags. But like limiters, they run after the offer. Any offer that raises a quantity or adds a restricted product can trip a restriction the shopper never asked for.
A common failure: a "max 1 free sample" restriction (a Filtered products quantity rule of "is greater than or equal to 2" on the sample variant) firing because two different campaigns each auto-added the same sample. Each campaign adds one unit independently — neither knows the other ran — so the cart ends up with 2 samples and the restriction blocks checkout.
Designing non-contradicting rules
List every offer that can add the restricted product
Include Auto-Add, Gift with Purchase, and any campaign whose offer products overlap the restriction's filter. Two offers adding the same SKU is the usual culprit.
Make the offers mutually exclusive
If only one free sample is ever allowed, make sure only one campaign can add it. Use campaign conditions so the second campaign cannot fire once the sample is already in the cart — for example, condition the second campaign on the sample not being present.
Align the restriction threshold with the maximum the offers can produce
If two offers can each add one unit, a "block at 2 or more" restriction will fire. Either reduce the offers to a single source, or relax the restriction threshold to match what your offers can legitimately create.
A gift or sample that adds a restricted SKU (not just extra quantity) trips the restriction the same way. If a Gift with Purchase hands out a SKU that another restriction blocks by country or customer tag, the gift appears in the cart but checkout fails for the targeted shoppers. Exclude that SKU from the gift pool for those shoppers, or narrow the restriction so it does not catch the gifted line.
Discounts x restrictions — the subtotal trap
This is the subtlest collision, and it comes down to which cart value a restriction reads.
| Restriction rule | What it reads |
|---|---|
| Cart subtotal | The cart amount after discounts |
| Cart total | The cart amount before discounts |
A minimum-spend gate built on Cart subtotal measures the post-discount number. So a discount code can drop the subtotal below your threshold and block a cart that was, by sticker price, well over the line.
Worked example
The gate
A restriction: block checkout when Cart subtotal is less than $50 ("minimum order $50").
The cart
The shopper has $60 of product. Above the gate — so far so good.
The discount
The shopper applies a 20% code. Cart subtotal is now $48 — after the discount.
The block
The restriction reads the $48 subtotal, sees it is under $50, and blocks checkout. The shopper had $60 of goods but is told they are below the minimum.
The fix
If discounts are common in your store and your gate is about how much product the shopper is buying (not how much they will pay), build the minimum-spend gate on Cart total (the pre-discount amount) instead of Cart subtotal. The $60 cart stays above a $50 Cart-total gate no matter what code is applied.
Use Cart subtotal only when you genuinely want to gate on what the shopper pays after discounts. For "they must buy at least $X of product" rules, Cart total is almost always what you mean.
Discounts x limiter
The Products Limiter is pure quantity — it compares unit counts, never money. Discounts of any kind have zero effect on a limiter:
- A 50%-off code does not change how many units count toward a limiter max.
- A BOGO promotion that adds a free second unit still adds a unit, and that unit counts toward the cap.
- An Auto-Add free unit counts toward the cap exactly like a paid unit.
"Free" never means "free of the limiter." If a BOGO or Auto-Add hands the shopper a complimentary unit and that pushes the variant over its max, checkout is blocked just as if they had paid for it. Size your limiter to include the free units your promotions can produce.
Tier & shipping discounts compute independently
Tier discounts and shipping discounts are calculated on their own, independently of campaign discounts and independently of any restriction or limiter. Two consequences worth calling out:
- A cart that is blocked by a restriction or limiter can still show earned discounts — the tier discount, the free-shipping threshold, the campaign discount all still display.
- The block is about completing checkout, not about discount math. The discounts are real; the shopper simply cannot finish the order until they resolve the validation error.
Don't read "discounts still showing" as "the cart is fine." Earned discounts and a blocked checkout coexist happily. Always confirm against the validation rules, not against whether a discount rendered. For how each discount type is configured, see Applying discounts, Tier discounts, and Shipping discounts.
Filtered (smart-filter) restriction rules — same trap, product-scoped
Restrictions can also evaluate rules over just the products matched by a product filter. These filtered rules read price the same way the cart-level rules do:
| Filtered rule | What it reads |
|---|---|
| Filtered products subtotal (discounted) | The discounted price of the filtered products |
| Filtered products total (original price) | The original price, ignoring discounts |
| Filtered products quantity | The unit count of the filtered products |
So the exact same gotcha applies one level down: a "filtered subtotal at least $X" rule uses the discounted price, and a discount on those filtered products can drop the value under the threshold and block a cart that was over the line at sticker price. When the rule is about how much of a product group the shopper is buying, use Filtered products total (original price); use the discounted subtotal only when you mean the post-discount amount.
Decision matrix: campaign condition, restriction, or limiter?
The same need can often be solved three ways. Pick the tool that matches what you actually want to control.
| You want to… | Use a… | Why |
|---|---|---|
| Decide whether an offer appears based on the cart | Campaign condition | Conditions gate offers on the live cart; they never block checkout |
| Cap how many units of a product/variant/SKU a shopper can buy | Products Limiter | Pure min/max quantity, enforced at cart and checkout, no rule logic needed |
| Block or warn at checkout based on cart values, country, customer tags, or product combinations | Restriction | Flexible AND/OR rules over subtotal, total, quantity, country, and customer |
| Enforce a per-SKU quantity rule combined with other conditions | Restriction (Per-SKU quantity rule) | Limiters can't combine with other logic; restrictions can |
A campaign condition controls what the shopper sees. A restriction or limiter controls what the shopper can do. If you need a hard stop at checkout, a campaign condition alone will not deliver it — pair it with a restriction or limiter.
Recipes
Troubleshooting
Key takeaways
- Offers act on the live cart; restrictions and limiters enforce later — so an offer can build a cart that validation then blocks.
- Auto-Add and gifts don't check caps or restrictions first. Keep auto-added quantities within limiter maxes and keep gifted SKUs out of conflicting restrictions.
- Cart subtotal is post-discount; Cart total is pre-discount. For product-value minimum-spend gates, use Cart total so discount codes can't defeat them. The same applies to filtered subtotal (discounted) vs filtered total (original price).
- Limiters are pure quantity — discounts never change the count, and free or BOGO units still count toward the cap.
- Tier and shipping discounts compute independently; a blocked cart can still show earned discounts. The block is about completing checkout, not discount math.
- Pick the right tool: campaign conditions gate what shoppers see; restrictions and limiters gate what they can do.
Related
How features interact
Campaign ordering, precedence, discounts, and metafield syncing across the whole app.
Cart restrictions
Block or warn shoppers at the cart and checkout based on cart conditions.
Products limiter
Set per-product, per-variant, or per-SKU minimum and maximum quantity caps.
Applying discounts
Automatic product discounts and how they combine with Shopify discounts.
Restrictions & limiters with express checkout
How cart restrictions and product limiters enforce on Shop Pay, Apple Pay, Google Pay, PayPal and other express buttons.
Widgets & Llama Cart overview
How storefront widgets and the Llama Cart slide-out drawer display your offers, and what you can customize.
