Shopify's automatic discount limit: 25 active, and what the 26th returns

A Shopify store runs 25 automatic discounts at once, and an app's automatic discount takes one of the 25. The limit is shared between the merchant's own discounts and every discount app installed. Here is a store taken to the limit and one step past it.

Verified 3 November 2026 on Shopify’s 2026-10 API, on a real store. Each statement marked with a tick is checked against the answer Shopify gave.

The 26th active discount is refused, with a code that names something else

The store began with a few active automatic discounts, some of them an app's. Creates were accepted until 25 were active. The next one came back with no discount and one entry in userErrors.

The code is ACTIVE_PERIOD_OVERLAP, which reads like a scheduling conflict. The message is the part that says what happened. Code that handles this error by its code alone reports the wrong cause.

Creating automatic discounts up to the limit, and past itVerified 3 November 2026 · API 2026-10

What was sent, and what Shopify answered

What Shopify answered: Creating automatic discounts up to the limit, and past it
StepAnswerActive automatic discounts on the store
1. Count the store's active automatic discounts that are an app'sRead2
2. Count all of its active automatic discountsRead4
3. Create automatic discounts that start now, one at a time, until 25 are activeAccepted25
4. Create one more that starts nowRefused in the mutation's userErrorsACTIVE_PERIOD_OVERLAP “Limit of 25 automatic discounts reached. Deactivate an existing discount to add a new one.”25
5. Create one scheduled to start in three daysAccepted25
6. Deactivate one of the active discountsAccepted24
7. Create one more that starts nowAccepted25
8. Activate the discount that was deactivatedRefused in the mutation's userErrorsACTIVE_PERIOD_OVERLAP “Limit of 25 automatic discounts reached. Deactivate an existing discount to add a new one.”25

What that shows

  • Every create was accepted until 25 automatic discounts were active. An app's automatic discounts were among the 25: they count toward the limit with Shopify's own.
  • The next create was refused in the mutation's userErrors, with the code ACTIVE_PERIOD_OVERLAP and the message “Limit of 25 automatic discounts reached. Deactivate an existing discount to add a new one.” The store still had 25.
  • A discount scheduled to start later was accepted while the store was at the limit: only active discounts count.
  • Deactivating one left 24 active, and the next create was accepted.
  • Activating the deactivated discount was then refused with the same code and message: the limit holds on activation as it does on creation.

Only active discounts count, and activation is checked too

A discount scheduled to start in three days was accepted while the store was at 25. Deactivating a discount made room for a new one.

Turning the deactivated discount back on was then refused with the same error. The run did not wait to see what a scheduled discount does when its start date arrives on a full store.

What this means for a discount app

An app that creates one automatic discount per offer or per campaign spends the merchant's 25, and the merchant finds out when their own sale will not save.

An automatic app discount takes one place however much its function decides. One discount whose function reads the cart can carry every offer the app runs.

How this was verified

Every step on this page was sent to a Shopify Plus development store we keep for this, on API version 2026-10, and Shopify’s answer was recorded as it came back.

The discounts were created through the Admin API with discountAutomaticBasicCreate, turned off and on with discountAutomaticDeactivate and discountAutomaticActivate, and counted by reading the store's automatic discounts after each step.

Each discount the run created was one of Shopify's own percentage discounts on a single product, with a minimum quantity no cart reaches, so none of them priced anything. All of them were deleted when the run ended. The discounts the store had before, an app's among them, were not changed.

A suite sends these steps again. A statement that no longer matches the answer takes this page down until it is corrected, and no record stands for more than 90 days without being taken again. This is what one store answered on one API version: your store’s plan can change the result, so try it on a development store.

Seen something different on your store? Write to privacy@offersuite.io with the request and the answer and we’ll run it.