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.

Right next to the name sits the SafeGuards panel — protections that apply to the whole discount:

Guard What it does Default
Skip on-sale items Products with a compare-at price above their current price never receive this discount. On
Skip gift cards Gift card products never receive this discount. On
Cap total discount amount 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

The two skip guards being on by default means 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:

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.

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

  • Order discountPercentage off or Amount off the order. Percentage orders get an optional Max discount amount cap.
  • Product discountPercentage off, Amount off, or Fixed price, aimed at a cart group (or the whole cart). Its own caps:
    • Applies toAll 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 discountPercentage off or Amount off shipping.

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 Skip on-sale items SafeGuard is off — with the guard on, 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.