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).
The discounts list
Section titled “The discounts list”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.
Margin guards
Section titled “Margin guards”The first section of the right rail is Margin guards — protections that apply to the whole discount, whatever the offers below it do:
| Guard | What it does | Default |
|---|---|---|
| On-sale items | How the discount treats products with a compare-at price above their current price. Three options, explained below. | No discount |
| Skip gift cards | Gift card products never receive this discount. | On |
| Cap total discount | A 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 |
On-sale items
Section titled “On-sale items”| Option | What a sale item gets |
|---|---|
| Shopify default | The code applies on top of the sale price. Sale and code both apply, exactly as a native discount would. |
| Sale or code | Whichever saves more, not both. 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. |
| No discount | Sale items are skipped entirely. |
Sale or code 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 — No discount for sale items, Skip gift cards on — mean a fresh PromoLock discount already avoids the most common leak, discounting a discount, before you configure anything.
What customer gets? — offers
Section titled “What customer gets? — offers”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).
Conditions
Section titled “Conditions”With no conditions, the offer always applies. Add conditions from the Condition menu — all conditions in an offer must be true together:
| Condition | Checks | Operators |
|---|---|---|
| Cart subtotal | Cart subtotal (optionally of one cart group) | Greater than / Less than / Equal to |
| Cart quantity | Total units in the cart (or group) | same |
| Unique products | Number of different products | same |
| Unique variants | Number of different variants | same |
| Customer tag | Tags on the customer | Any 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.
Discounts
Section titled “Discounts”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).
- 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
- Shipping discount — Percentage off or Amount off shipping.
Cart groups
Section titled “Cart groups”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 No discount — under No discount, 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.
Purchase types
Section titled “Purchase types”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.
Discount strategy
Section titled “Discount strategy”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.
Usage limits
Section titled “Usage limits”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.
Combines with
Section titled “Combines with”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.)
Active dates
Section titled “Active dates”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.
Saving
Section titled “Saving”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.
Related guides
Section titled “Related guides”- Create a tiered discount with a cap
- Launch a bulk code campaign
- Offers with caps — the capped-offer strategies built on this editor
