Skip to content

Discounts

The Discounts tool creates real Shopify discounts — codes or automatic — with guardrails the native editor doesn’t have. The philosophy: an offer shouldn’t just say what it gives; it should state the most it is ever allowed to give.

Open Discounts in the app nav. The page has two tabs — Discounts (this page) and Bulk codes (its own chapter).

Each row shows the code (or the title, for automatic discounts), its Method (Code / Automatic), and a status badge — Active, Scheduled (start date in the future), or Expired. Search by title or code, and use the row menu to Edit, Activate/Deactivate, or Delete. Deleting is permanent — the confirmation says so, believe it.

Create discount opens the editor. Everything below is the editor, in the order you’ll see it.

Choose Code (customer types it at checkout — enter your own or hit Generate for a random one) or Automatic (applies by itself when its conditions are met; you give it a title customers see in their cart). The type is fixed once the discount is created.

The first section of the right rail is Margin guards — protections that apply to the whole discount, whatever the offers below it do:

GuardWhat it doesDefault
On-sale itemsHow the discount treats products with a compare-at price above their current price. Three options, explained below.Exclude sale items
Skip gift cardsGift card products never receive this discount.On
Cap total discountA hard ceiling (Max amount) on everything this discount gives across the whole order. If the offer’s parts would add up to $128 and your cap is $100, the discount gives $100 — proportionally trimmed, never more.Off
OptionWhat a sale item gets
Stack on sale priceThe discount applies to eligible sale items, on top of their sale price. Sale and code both apply, exactly as a native discount would.
Best price onlySale price or discounted full price, whichever is cheaper. The markdown the sale already gave counts toward the discount, so a sale item only gets the part of the code that beats its sale.
Exclude sale itemsThe discount skips anything already on sale.

Best price only in numbers, on a $10 item marked down to $7: a 20% code gives nothing more (20% off $10 is $8, and the sale already beat it); a 50% code gives $2 more (down to $5); a $5-off code also gives $2 (down to $5). Fixed price discounts aren’t affected, since they name an absolute price. Full-price items are never made worse off — they get the full code first, and when a product discount is limited to a number of items, full-price items take those slots ahead of sale items.

The defaults — Exclude sale items and Skip gift cards both on — mean a fresh PromoLock discount already avoids the most common leak, discounting a discount, before you configure anything.

An offer is a package of conditions (“when does this apply”) and discounts (“what does it give”). Most discounts need exactly one offer; add more with + Add another when you want tiers (see Discount strategy).

With no conditions, the offer always applies. Add conditions from the Condition menu — all conditions in an offer must be true together:

ConditionChecksOperators
Cart subtotalCart subtotal (optionally of one cart group)Greater than / Less than / Equal to
Cart quantityTotal units in the cart (or group)same
Unique productsNumber of different productssame
Unique variantsNumber of different variantssame
Customer tagTags on the customerAny of / All of / None of

The numeric conditions can each point at a cart group — so “subtotal of the Apparel group is greater than $120” is a valid gate, not just the whole cart.

Add what the offer gives from the Discount menu — one Order discount, one Shipping discount, and as many Product discounts as you need:

  • Order discount — Percentage off or Amount off the order. Percentage orders get an optional Max discount amount cap.
  • Product discount — Percentage off, Amount off, or Fixed price, aimed at a cart group (or the whole cart). Its own caps:
    • Applies to — All items, Cheapest, or Most expensive. Choosing cheapest/most-expensive reveals Item limit: how many lines (starting from that end) get the discount. “Cheapest item only” is Cheapest + limit 1.
    • Quantity limit — max units discounted per line (“20% off up to 2 per item”).
    • Max per item — a money cap on how much any single line can be discounted (percentage discounts only).
  • Shipping discount — Percentage off or Amount off shipping.

When an offer holds more than one discount, up/down arrows on each discount’s header let you reorder them. Order matters in one case: if a product qualifies for two product discounts in the same offer, the one higher in the list applies to it.

Cart groups split the cart into named parts so one discount can treat them differently — 15% on Accessories, 10% on Apparel, 5% on everything else, one code.

Open the group picker on any product discount or condition and hit Create/Manage groups. A group is:

  • Include / Exclude selections — collections, products, or specific variants. No include selection = the whole catalog (minus exclusions).
  • Optional Filters to narrow which lines qualify: Purchase type (regular vs. subscription), Line item price (min/max per unit), Quantity (min/max per line), and Sale status (Only items on sale / Only full-price items).

One interaction to know: the Sale status filter only appears while the discount’s On-sale items guard is set to something other than Exclude sale items — under Exclude sale items, sale items are dropped before groups are built, so the filter would have nothing to do. The controlled sale discounts strategy is built on this filter.

Groups are shared across the discount — define “Apparel” once, use it in offers and conditions alike.

Which purchases the discount applies to: One-time purchases (on by default), Subscriptions, or both. Ticking Subscriptions asks one more question — apply to the First payment only (default), All recurring payments, or a specific number of payments. At least one purchase type must be selected before you can save.

With two or more offers, the strategy select decides which one a cart gets:

  • Apply first eligible offer — offers are checked top to bottom; the first that applies wins. Order is yours to arrange (move offers up/down). This is the classic tier ladder: put the best-qualifying tier first.
  • Apply highest-value eligible offer — every eligible offer is evaluated and the customer gets the one worth the most.

Only one offer ever applies — offers don’t stack on each other.

Code discounts only:

  • Limit total uses — a global ceiling across all customers (Total uses).
  • One use per customer — Shopify’s per-customer limit. Worth knowing: Shopify counts this per code and account — someone with a second email is a new customer in its eyes. Closing that hole is Fraud Guard’s job.

Shopify’s native combination flags — whether this discount may stack with other Product discounts, Order discounts, or Shipping discounts. All off by default, which is the safe setting: a discount that combines with nothing can’t be part of a surprise stack. (Your Controller stacking lock polices code combinations on top of this.)

Discounts start immediately by default. Edit the start, or add an + End date — dates use your store’s timezone, shown next to the time picker.

A save bar appears when anything changes; nothing is live until you hit Save. The editor blocks saves that can’t work — no purchase type selected, an offer with no discount in it — with a message telling you which offer to fix.