Why does Shopify say my discount code is invalid when it meets the minimum, dates, and collection rules?
A discount code that looks correctly configured, with the right collection, minimum, and dates, can still be rejected at checkout because of a variant-level mismatch, a competing discount, or a subscription purchase-type restriction.
What's going on
A merchant sets up a discount code with an eligible collection, a minimum purchase amount, and valid start and end dates. Everything checks out in the Shopify admin, but when a real customer tries the code at checkout, they get a generic message saying the discount code is not valid. The merchant reruns the same test themselves and it works fine, which makes the report hard to reproduce and easy to dismiss as customer error, until it happens again with a different shopper.
This pattern is common and often frustrating because Shopify's discount validation is not a single check against the settings visible in admin. It evaluates the code against the actual contents of that customer's cart, including the specific variant, the pre-tax subtotal, any other discounts already active on the order, and the purchase type of each line item. If any one of those conditions does not match, checkout shows the same generic invalid-code message regardless of which rule actually failed, so a code that looks correctly configured on its summary screen can still be legitimately rejected for a reason that is not visible there.
Why it happens
The most frequent cause is a mismatch at the variant level: a discount scoped to a collection checks the exact variant in the cart against that collection's current product list, and smart (automated) collections can lag behind their own rules after recent edits, so a variant can appear to qualify on the storefront before it is actually indexed into the collection the discount reads from. A close second is the minimum purchase amount being calculated on the pre-tax, pre-shipping subtotal of only the eligible items in the cart, not the full cart total, so a customer can be a few dollars under threshold without realizing it.
Combination settings are another common trigger. Discount codes and automatic discounts each belong to a discount class and carry their own settings controlling whether they can stack with other discounts. If a store has any automatic discount active, including one created by an app, and it was not configured to combine with the code, only one of the two will end up applied, which reads to the merchant as the code simply not working.
When subscriptions are involved, the purchase-type scope on a discount (one-time purchase, subscription, or both) is a frequent culprit, especially on codes created before selling plans were added to the store. Usage limits and customer-eligibility scoping, such as segments, saved lists, or a one-redemption-per-customer cap, round out the list of conditions that are easy to overlook because they do not surface as an error message pointing to the actual cause.
5 ways to fix it
Check collection membership at the variant level, not just the product level
Open the collection in Shopify admin under Products and Collections, and confirm the exact variant in the customer's cart is listed there, not just the parent product. Automated (smart) collections can lag behind their rules after a recent price, tag, or inventory change, so a product can appear to belong to a collection on the storefront before the collection's own index has caught up. Re-save the collection or wait for it to resync, then retest with that specific variant in the cart.
Confirm the minimum purchase amount is being measured the way you think it is
Shopify calculates a discount's minimum purchase amount against the cart subtotal before tax and shipping, and only counts items that actually qualify under the discount's product or collection scope, not the whole cart. If a customer's cart is a few dollars under the threshold, or part of their cart is excluded items, checkout will correctly reject the code with no further detail. Recheck the discount's minimum requirement and retest with a cart that clears the threshold using only eligible SKUs.
Check whether another active discount is blocking this one from combining
Shopify discounts belong to a discount class (product, order, or shipping), and whether a code and an automatic discount can apply together depends on each one's own combination settings. If a store has any automatic discount running, including one created by an app, and it was not configured to combine with the code's class, only one of the two discounts will end up applied at checkout, which looks to the merchant like the code simply is not working. Open both discounts and compare their combination settings side by side.
If subscriptions are involved, check what purchase types the discount is set up to cover
Discounts can be scoped to one-time purchases, subscriptions, or both. A code created before selling plans were added to the store, or left scoped to one-time purchases only, will reject subscription line items even though the product, price, and dates all look correct. Edit the discount and confirm its purchase-type scope covers the order type being tested.
Rule out usage limits and customer-specific eligibility
A code with a total usage limit reached, a one-use-per-customer restriction, or eligibility scoped to a specific customer segment or saved list will read as invalid for anyone outside that scope, including a merchant retesting with an account that already redeemed it once. Check the discount's usage limits and customer eligibility settings, and retest in a private or incognito window with an account that has not used the code before.
Bottom line
Most "invalid despite meeting every condition" reports trace back to the discount engine checking something more granular than what is visible at a glance in admin: the specific variant, the pre-tax subtotal, a competing discount's combination settings, or a subscription purchase-type restriction. Work through the conditions above using the exact cart contents the customer used, and the mismatch usually surfaces within a few minutes. This is a store-configuration issue rather than something an app can fix for you, so there is no shortcut here beyond methodically re-reading the discount's own rules against a real test cart.
Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.