SafeSale · Blog

Shopify's 25 automatic discount limit: plan sales around it

Shopify allows 25 active automatic discounts at once, app discounts included. How stores run into the ceiling in Q4, how to count what you have, and how to run more sales without it.

There is a number buried in Shopify's discount documentation that almost nobody reads until it stops them: a store can have 25 active automatic discounts at a time. For most of the year it is invisible. Then November arrives, the marketing calendar has a Black Friday collection sale, a free-shipping threshold, a buy-two-get-one on socks, a loyalty tier discount from one app and a bundle discount from another, and somebody tries to switch on the twenty-sixth. Shopify says no, and the first anyone hears of it is a failed launch at nine in the morning.

This post is about that number: where it comes from, what counts toward it, how to see how close you are, and how we built SafeSale so a store can run as many sales as it likes without the limit deciding for it.

Where the 25 comes from

Shopify's help page on automatic discounts states the rule plainly: you can have a maximum of 25 active automatic discounts at a time, and the count includes automatic discounts created by apps. The developer side says the same thing from the other direction. The Discount Function reference lists a maximum of 25 active discount functions per store. An app-created discount and a hand-made one are the same kind of object on the Discounts page, and they share one ceiling.

Codes are different. A discount code is not active in the same sense; it only does anything when a customer types it, and Shopify allows a great many of them. So a store that leans on codes can look like it has hundreds of promotions and still be nowhere near the limit, while a store that prefers the smoother “discount applies itself” experience can hit it with a dozen campaigns and a couple of apps.

What quietly eats the slots

When merchants count their discounts they count the ones they made. The ones they did not make are usually the problem.

  • Loyalty and VIP apps that give each tier its own automatic discount. Four tiers, four slots.
  • Bundle and volume-pricing apps that create a discount per bundle or per rule, sometimes one per product.
  • Free-shipping thresholds that were set up as automatic discounts rather than shipping rates, often one per market.
  • Old promotions that ended in the shopper's eyes but were never deactivated, because “active” means switched on, not currently applying to anything.
  • Sale apps that implement each sale as an automatic discount, which is exactly what SafeSale does in Functions mode.

That last point deserves honesty. In Functions mode SafeSale creates one automatic discount per sale. It uses one slot while the sale is active and gives it back when the sale ends and the discount is deleted. A store running three SafeSale sales in Functions mode has three fewer slots for everything else. We think that is the right trade for most sales, for reasons we set out in our comparison of automatic discounts and price rewrites, but it is a trade, and you should know you are making it.

Counting what you have

Open Discounts in the admin and filter by method Automatic and status Active. That list is your count. Add anything with status Scheduled that starts before your next launch; we treat scheduled discounts as occupying a slot until a store's own admin has shown otherwise, because the cost of being wrong is a failed launch. Then look at the app column. A discount created by an app usually names the app, and that is where you will find the tiers and bundles nobody remembers creating.

  1. Note the total of active plus soon-to-start automatic discounts.
  2. Deactivate anything that has served its purpose. Deactivating keeps the discount for reuse; only deletion is permanent.
  3. For each app discount, decide whether the app really needs an automatic discount for that feature or whether a setting can turn it into something else.
  4. Write down how many slots your Q4 calendar needs on its busiest day, and compare.

What SafeSale does at the ceiling

When a Functions-mode sale starts, SafeSale calls the Admin API to create its discount. If Shopify refuses because the store is at 25, the refusal comes back as an error and SafeSale stops there. The sale does not go live, Shopify's message is recorded on the sale so you can see why, and after the usual retries the sale is marked Failed. No variant price was touched and no partial state exists to clean up, because in Functions mode there is nothing to write until the discount exists. You free a slot, or switch the sale's mechanism, and start it again.

SafeSale also sets its discounts so that product discounts do not combine with other product discounts. That is about preventing double-dipping rather than the limit, but it matters here: when you are juggling 20-odd discounts, knowing that none of ours will stack with the loyalty app's saves an afternoon of arithmetic. The preview before launch is still the place to check, as described in the double-discount preview post.

Running more sales than you have slots

The limit applies to discounts, not to sales. A sale that changes the variant's price and sets the compare-at price to the old one is not a discount in Shopify's eyes; it is just a price. It appears nowhere on the Discounts page and uses no slot. This is the second mechanism SafeSale offers, and it is the answer when the calendar has more promotions than the ceiling allows.

A sensible split for a busy quarter looks like this:

  • Long-running catalogue sales (end-of-line, clearance, a permanent outlet collection) as price rewrites. They run for weeks, they want the struck-through price on the product page, and they should not hold a slot the whole time.
  • Short, sharp promotions (a 48-hour flash sale, a members-only weekend) as automatic discounts. They need to start and stop to the minute and leave no trace, and a slot for two days is cheap.
  • Anything an app insists on doing as an automatic discount, left alone, with the slot budgeted for it.

Price rewrites carry their own obligations, chiefly that every original price has to be recorded before it changes and restored after. SafeSale snapshots each variant before writing and keeps the snapshot until the sale is reverted, which is the part most bulk-price tools get wrong and the reason the app exists. If you are choosing between the two mechanisms for a specific sale, the markets and POS posts cover the edge cases; for the limit question alone, the rule is simple: when slots are scarce, rewrite.

A checklist for the week before a big launch

  1. Count active and scheduled automatic discounts, including app ones. Deactivate the dead weight.
  2. List every sale planned for the launch window and mark each as discount or rewrite. Keep the discount total, plus app discounts, under 25 with a couple to spare.
  3. Start the longest sales first as rewrites, so the slots are free when the short promotions need them.
  4. Open each SafeSale sale's preview the day before and confirm the mechanism shown is the one you intended.
  5. Tell whoever is on duty what a Failed sale with a discount-limit message means and what to free up, so the fix takes two minutes rather than a support ticket.

Twenty-five is a generous ceiling for a store that knows it is there and a trap for one that does not. SafeSale gives every sale a choice of mechanism so the ceiling is a planning input rather than a surprise, and it fails safely when a slot is not available.

Frequently asked questions

How many automatic discounts can be active in Shopify at the same time?

Twenty-five. Shopify's help centre states that a store can have a maximum of 25 active automatic discounts at a time, and the count includes automatic discounts created by apps. Discount codes have a separate, much higher allowance and do not count toward this limit.

Do app discounts count toward the 25 automatic discount limit?

Yes. An automatic discount an app creates through the Admin API, including a Discount Function, sits on the same Discounts page and counts the same as one you create by hand. A sale app that makes one automatic discount per sale uses one slot per active sale.

What happens if I hit the limit while a SafeSale sale is starting?

In Functions mode SafeSale asks Shopify to create one automatic discount for the sale. If Shopify refuses because the store is at its limit, nothing goes live, the error is shown on the sale and after retries the sale is marked Failed. No prices are changed, so there is nothing to undo.

How can I run more than 25 sales at once on Shopify?

Use price rewrites for some of them. A sale that changes the price and compare-at price on variants does not create a discount at all, so it uses none of the 25 slots. SafeSale offers both mechanisms per sale, so long-running catalogue sales can run as price rewrites while short promotions use automatic discounts.