Discounts

Discount stacking, limits & conflicts

The definitive reference for how Llama Upsells discounts combine, the exact ceilings that exist, and why a new discount may silently fail.

This is the reference page to open whenever a discount won't save, won't apply, or won't stack the way you expected. It explains the exact limits that govern how many discounts you can run, how the app and Shopify decide whether two discounts combine, and the precise reasons a new discount can fail to create. Read it before you delete anything or file a support ticket.

The two layers of discount limits

There are two completely separate sets of limits at play, and confusing them is the single most common source of "why won't this create?" tickets.

Layer A — Plan limits (per subscription)

Your Llama Upsells plan caps how many discounts of each kind you may keep active at one time. These limits scale with your plan tier and are documented in full on the billing and plan pages. The active-count caps are:

PlanActive tier discountsActive shipping discounts
Free11
Starter33
Growth66
Pro1010
Enterprise2020

Plan limits are about what your subscription entitles you to. Upgrade your plan and the limit rises.

Layer B — Hard app + platform ceilings

Underneath the plan limits sit fixed technical ceilings that apply regardless of your plan — even on Enterprise. These come from the app's internal constants and from Shopify's own platform cap. You cannot raise them by upgrading.

CeilingLimitWhat it caps
App automatic (offer) discountsNo fixed app capOffers are packed into discount metafield nodes (split at ~9,990 characters); bounded only by the Shopify 25 below
App tier discounts20Total tier discounts the app will sync to Shopify
App shipping discounts20Total shipping discounts the app will sync to Shopify
Shopify store-wide automatic discounts25Automatic discounts across all apps on your store — Shopify's hard platform cap

The Shopify 25 ceiling is store-wide. It counts every automatic discount on your store, including those created by other apps and any you set up manually in the Shopify admin — not just Llama Upsells discounts. This is the budget everything below has to share.

Cart restrictions have their own parallel pair of ceilings (app 20 / Shopify 25), but they are a different mechanism and are covered separately. See Cart restrictions — do not assume the discount numbers and the restriction numbers are the same budget.

How each discount type consumes the Shopify 25-discount budget

Every discount you run ultimately becomes a Shopify automatic discount node backed by a Shopify Function. That node is what counts toward Shopify's store-wide cap of 25. Three things consume the budget:

  • Each tier discount becomes one Shopify automatic discount.
  • Each shipping discount becomes one Shopify automatic discount.
  • The app's merged automatic-offer discount(s) — the discounts the app creates for your offer funnels — consume slots too, but with an important optimization described below.

The multi-campaign merge optimization

The app does not create one Shopify discount per offer campaign. Instead, when several campaigns point at the same underlying discount configuration, the app merges them into a single Shopify automatic discount to conserve the 25-discount budget. Internally it combines the discounts map (dsm) and the conditions map (csm) from all the campaigns into one node.

The practical effect: 8 offer campaigns may consume only 1 Shopify slot. This is why deleting a campaign does not always free up a Shopify discount slot, and why your Shopify admin shows far fewer automatic discounts than you have campaigns.

The merge is automatic and invisible. You manage campaigns; the app manages how many Shopify discount nodes those campaigns collapse into. You never create or name these nodes yourself.

combinesWith: who decides stacking

Stacking is governed by a combinesWith setting on every discount, which tells Shopify which other discount categories it is willing to sit alongside. There are three categories — order discounts, product discounts, and shipping discounts — and the three Llama Upsells discount types treat them very differently. This is the heart of the page.

Offer (automatic product) discounts — fixed, always combine

The discounts the app creates for your offer funnels are hardcoded to opt in to every category: order, product, and shipping. They always say "yes, combine me." Merchants cannot change this — there is no toggle, by design, because an upsell discount that refused to combine would block the very order-level promotions merchants run alongside it.

Tier discounts — three merchant toggles

Each tier discount exposes its own combinesWith controls for all three categories: order discounts, product discounts, and shipping discounts. You decide, per discount, which it will stack with. All three toggles default to on, so a new tier discount combines with everything until you opt out.

Shipping discounts — two merchant toggles

Each shipping discount exposes combinesWith controls for order discounts and product discounts only. There is no shipping-with-shipping toggle, because two shipping discounts cannot meaningfully stack on the same shipment. Both toggles default to off, so a new shipping discount stacks with nothing until you opt in — the opposite of tier discounts.

Stacking matrix

Discount typeCombine with order?Combine with product?Combine with shipping?Who controls itDefault
Offer (automatic product)YesYesYesFixed by app (always on, no toggle)Always combines
Tier (volume)ToggleToggleToggleMerchant toggle (per discount)All three on
ShippingToggleTogglen/aMerchant toggle (per discount, no shipping+shipping)Both off

"Order discounts" means cart/subtotal-level discounts (including most coupon codes that take a percentage or amount off the whole order). "Product discounts" means line-item discounts. "Shipping discounts" means discounts on the shipping rate.

Both sides must agree

A combinesWith setting is a permission, not a guarantee. Shopify only stacks two discounts when both of them allow the combination. If either side opts out, Shopify applies one discount and silently drops the other.

This matters most with discount codes the shopper enters. Suppose your tier discount is set to combine with order discounts, but the shopper applies a Shopify coupon code whose own settings say it does not combine with other discounts. Shopify honors the code's refusal: it applies one discount and drops the other, even though the app's discount said "yes."

When a coupon code and an app discount do not both appear, check the coupon code's own "Combinations" settings in the Shopify admin before assuming the app is broken. A code set to "cannot be combined" will always win the tie and suppress the other discount. This is standard Shopify behavior, not an app bug, and the app cannot override it.

Why a new discount won't create

When a discount silently fails to save or sync, it is almost always one of these exact failure modes. Work through them in order.

Hit an app ceiling

You may be at the app's hard ceiling for tier or shipping discounts: 20 tier discounts or 20 shipping discounts. There is no fixed app cap on automatic offer discounts — the app packs offers into discount metafield nodes (splitting at ~9,990 characters), so offers are bounded only by Shopify's 25 (below), not by a per-type app limit. Delete or deactivate an existing tier or shipping discount to make room.

Hit Shopify's 25 across all apps

If your store already has 25 automatic discounts across all sources, Shopify rejects the next one outright. The new discount cannot be created until something frees a slot. Remember the merge optimization: deleting one offer campaign may not free a Shopify slot if other campaigns still share that merged node.

Exceeded the 9,990-character title limit

Shopify caps an automatic discount's title at 9,990 characters. The app builds the discount node from your merged campaigns and conditions, and the generated title and payload grow as more conditions merge into one node. When that generated value would exceed 9,990 characters, the app splits the conditions across additional discount nodes rather than producing an oversized one — which in turn consumes more of your Shopify 25-discount budget. If the budget is also tight, the create can fail.

Recognize the app's internal titles

The app names the nodes it creates itself — you'll see titles like Llama Upsells - DO NOT NOTIFY or Llama Upsells - 1 - DO NOT MODIFY in your Shopify admin's automatic discounts list. Do not rename, edit, or delete these manually. They are managed by the app; editing them breaks sync and can cause discounts to stop applying.

A failed create is usually silent — the discount simply doesn't appear or apply. There is no error popup at checkout. Always check the ceilings above first; the cause is structural, not a transient glitch.

Three app discount types run independently

Tier discounts, offer discounts, and shipping discounts are three independent systems. All three can apply to the same order at once, and one not showing up is never caused by another being present.

If your tier discount isn't applying, do not blame your shipping discount or your offer funnel — they don't compete for the same slot and they don't suppress each other. Diagnose each type on its own terms using the failure modes above and the troubleshooting guide.

Worked recipes

Where to go next

This page covers limits, stacking, and create-failures only. For why a discount that exists isn't applying at checkout, see Discount not applying. For how discounts interact with other app features and the order in which things evaluate, see How features interact — that page owns evaluation order, so it isn't repeated here.

On this page