Shopify automatic discounts: how they work, and when they silently do not
How Shopify automatic discounts work — eligibility, combinations, markets, scheduling — plus the failure modes that cost real sales and a pre-flight checklist.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
An automatic discount in Shopify is a discount with no code: you define it once in Discounts, set its eligibility and schedule, and it applies itself at checkout to every cart that qualifies. That "applies itself" part is the promise and the trap. A code that fails is visible — the customer types it, sees an error, and emails you. An automatic discount that fails looks exactly like a store that is simply not on sale, and you find out weeks later from a revenue report.
This guide covers what automatic discounts actually evaluate, where they diverge from codes and buy-X-get-Y, and the conditions under which they silently stop applying. If a discount is live right now and nothing is discounted, the ordered diagnosis lives in Shopify discount not showing; this is the mechanics underneath it.
What an automatic discount is, mechanically
In the admin, Discounts → Create discount gives you four families: amount off products, amount off order, buy X get Y, and free shipping. Each can be issued as a discount code or as an automatic discount. The type decides what gets discounted; the method decides how the customer claims it.
The important consequence: an automatic discount and a code built from the same settings are not the same object. They have different combination permissions, different visibility (codes can be advertised, automatic discounts can't be typed in), and different failure modes.
| Discount code | Automatic discount | Buy X get Y | |
|---|---|---|---|
| How it applies | Customer enters it at checkout | Applied automatically when cart qualifies | Automatic or code, based on a trigger item |
| Can be advertised with a unique code | Yes | No — it's store-wide logic, not a link | Yes, if issued as a code |
| Combination control | Set per discount in the Combinations section | Set per discount, same section | Set per discount |
| Typical best use | Trackable campaigns, influencer and email offers | Site-wide sales, tiered thresholds | Bundle-style promotions, gifting |
| Typical silent failure | Code expired, case-sensitive typo, usage limit hit | Eligibility, market, or combination mismatch | Trigger quantity or item not in cart |
BXGY deserves its own note because it is the type merchants misconfigure most. It has two halves — what the customer must buy and what they get — and both must be satisfied by the same cart. A "buy 3 tees, get 1 free" rule where the free item is a tee works; the same rule where the free item is a hat works only if the hat is already in the cart, and the customer has no idea the hat was supposed to be there.
Eligibility: the part that does the quiet work
Every automatic discount carries four independent eligibility layers. All four must pass.
- Item eligibility. Specific products, specific collections, or all products. If you pointed the discount at a collection, membership is evaluated live — a product that left the collection yesterday is not discounted today, and nothing emails you about it.
- Minimum requirements. A minimum purchase amount or quantity. Amount thresholds are evaluated against the cart subtotal after line-level discounts and before shipping and taxes, so a "spend $75" rule on a cart of $74.99 with $4 shipping does not fire. Quantity thresholds count eligible items, not lines.
- Customer eligibility. All customers, specific segments, or specific customers. Segment-based discounts fail for guests who aren't identifiable, which is common on a first order.
- Market eligibility. As of writing, Shopify scopes a discount to all markets or to specific ones. A discount scoped to one market is invisible in another, and fixed-amount discounts behave awkwardly across currencies because the amount has to mean something in each.
Layers 1 and 4 account for most silent failures, and both are configuration decisions made months earlier by someone who has since left.
Combinations: where two good discounts make one dead cart
The Combinations section of a discount asks, in effect: may this discount stack with other product discounts, other order discounts, and shipping discounts? Each discount carries its own answer, and Shopify only combines two discounts if both permit it.
That symmetry requirement is the failure people miss. You create a 20% automatic product discount that permits order combinations, and a 10% order discount that permits nothing. The cart shows 20%, the customer expects 28%, and the 10% never appears. Nothing is broken; the algebra was never satisfied. The full matrix is in can you stack discounts on Shopify.
One structural fact worth holding onto: combination is a permission, not an entitlement. Both sides must opt in, and because product discounts reduce line prices before an order discount computes its percentage, 20% plus 10% is not 30% off the original — it's 10% off the already-reduced subtotal.
Scheduling: dates, times, and the timezone you didn't choose
Automatic discounts take a start date and an end date, interpreted in your store's timezone — not the customer's, and not yours if you work remotely. Two habits prevent most scheduling surprises: set the end time explicitly (a date with no time runs to the end of that day in store time), and test on the boundary (a discount starting at 9am should be verified at 9:02am on a real cart, not the night before).
A discount that has ended but still sits in your admin's list stays visible to you and invisible to customers — a recurring cause of "the sale is live, why is nobody buying at the sale price."
The failure modes, in plain language
- The product is not published to the channel the customer is shopping on. Discount eligibility is layered on top of product availability. A product available only through POS cannot be discounted in an online checkout.
- The item is in the cart but not in the discount. Line-level discounts only touch eligible lines; a cart with one eligible and one ineligible product shows a partial discount that reads as a bug.
- A bundle or cart transform rewrote the lines. Apps using Shopify's cart transform capability can replace cart lines before discounts settle; the discount was evaluated against products that no longer exist as separate lines. Test your actual bundle in a real checkout.
- A gift card is in the cart. Gift cards are generally excluded from discounts; a cart that is 90% gift card won't hit a spend threshold the way the customer expects.
- The discount is scoped to a market the customer isn't in. Painful to debug because the person testing is usually in the market where it works.
- Draft orders bypass automatic discounts. At the time of writing, automatic discounts do not apply to draft orders — the merchant applies one manually. Wholesale and phone orders built as drafts therefore miss every automatic promotion you run.
The pre-flight checklist
Run this before you announce any automatic discount. Eight minutes catches most of the list above.
| # | Check | Where | Fails as |
|---|---|---|---|
| 1 | Discount is Active, not Draft | Discounts list | Nothing applies, ever |
| 2 | Start/end times set in store timezone, end time explicit | Discount schedule | Sale starts late or ends early |
| 3 | Every product in the rule is published to the online store channel | Product → Sales channels | Items missing from the discount |
| 4 | Collection membership matches what you think — open a few products | Collection | Silent partial coverage |
| 5 | Minimum amount/quantity threshold is reachable by an average cart | Discount requirements | Discount effectively never fires |
| 6 | Combination flags agree on both discounts you intend to stack | Combinations, on both | One discount never appears |
| 7 | Market scope includes every market you sell in | Discount markets | Entire countries see full price |
| 8 | Compare-at price set where you want a struck-through anchor | Variant pricing | No visible "was" price beside the discount |
| 9 | Test order placed as a guest, in a private window, in your main market | Storefront | Badge shows, price doesn't change |
| 10 | Any bundle/cart-transform app retested with the discount live | Storefront | Bundle lines lose eligibility |
Row 9 is the one people skip. A logged-in test from your own IP tells you almost nothing — use a private window, a guest checkout, and a card that isn't on file.
When a discount engine is the wrong tool
Automatic discounts are built for promotions — bounded, advertised, measured. They are a poor instrument for clearing aged stock, because eligibility is a static list you maintain by hand and the products that need the discount change weekly. When the job is "mark down everything past 90 days by the amount its margin can bear," you're describing a rule that reads stock runway and velocity, not a promotion. That's the case ClearStock is built for — rule-based markdowns with a discount cap, exclusions, and price restoration. If your problem is a weekend sale, the native tool is the right one.
Common questions
Why is my automatic discount not applying? In order of likelihood: the cart items aren't in the discount's product or collection list, the market is excluded, the minimum threshold isn't met, a combination permission mismatch suppressed it, or the product isn't published to the channel being shopped. Check the item list first — it's wrong more often than any other setting.
Can customers combine an automatic discount with a code? Only if both discounts permit the combination in their Combinations settings — permission is required on both sides. At the time of writing the checkout takes a single code field, so the code plus the automatic discount is the pairing to test.
Do automatic discounts apply to draft orders? Not automatically, at the time of writing. Draft orders carry their own discount entry that you set manually, which is why B2B and phone orders need a separate process from your storefront promotions.
Next step: pick the automatic discount that is live right now and walk it through the ten-row checklist above. If everything passes and the storefront still shows full price, move to the ordered causes in Shopify discount not showing — the answer is usually in the first three rows.