WooCommerce Tips

WooCommerce Coupon Restrictions Explained: Minimum Spend, Per-User Limits, and Exclusions

WooCommerce Coupon Restrictions Explained: Minimum Spend, Per-User Limits, and Exclusions
🏫

WooCommerce Reference Guide

Every WooCommerce Coupon Restriction, Explained Plainly

Minimum spend, maximum spend, individual use only, exclude sale items, per-user limits, allowed emails, product and category exclusions — what each one actually does, why it behaves unexpectedly, and how to set it with confidence.

WooCommerce coupon restrictions are the set of conditions that determine whether a coupon applies at checkout. A coupon can have a valid code, a live expiry date, and a real discount value — and still silently refuse to apply because one restriction isn’t met. Understanding each restriction individually, along with the non-obvious behavior that catches store owners off-guard, is what separates coupons that work reliably from coupons that generate support tickets.

This is a reference guide. Each section covers one restriction: what it does, the specific gotcha that confuses most stores, and the right way to set it. You can read it top to bottom or jump to the restriction you’re currently troubleshooting.

Why restrictions matter more than the discount itself

WooCommerce coupon restrictions define the shape of a discount offer: who can use it, on what, how many times, and under what cart conditions. Most store owners configure the discount value carefully and then leave the restrictions at their defaults — which can be more permissive or more restrictive than intended.

The subtlety is that WooCommerce’s error messages don’t tell customers which restriction failed. The store gets a frustrated customer support ticket; the store owner logs in, stares at the coupon settings, and can’t immediately see what went wrong. Knowing each restriction’s precise behavior means you can diagnose problems in seconds rather than minutes.

There’s also a broader tradeoff worth naming: restrictions protect your margins and reduce abuse, but every restriction you add is another thing that can silently block a legitimate customer. The tightest coupon isn’t always the smartest one.

Minimum spend

The minimum spend restriction is a cart subtotal threshold. The coupon does not apply unless the cart subtotal equals or exceeds the configured amount. If you set a minimum spend of $50, a cart with $49.99 of items will fail.

Where to find it

WooCommerce admin → Marketing → Coupons → open the coupon → Usage Restriction tab → Minimum spend field.

The gotcha: what counts toward the minimum

WooCommerce calculates the minimum spend against the cart subtotal after other discounts have already been applied — not the raw sum of product prices. If a customer adds $55 of products to the cart and a different coupon or campaign already reduces $10 off, the subtotal WooCommerce checks against your minimum spend is $45, not $55. A minimum spend of $50 will block the second coupon even though the customer had $55 of products.

This calculation order matters especially when a customer tries to stack a general-discount coupon on top of a cart that already has campaign-based prices applied. If your discount campaign brings item prices down before the subtotal is tallied, customers may never quite reach a minimum spend threshold they think they’ve cleared.

How to set it correctly

Set the minimum spend with the post-discount cart value in mind, not the undiscounted product total. If you’re running simultaneous campaign discounts, simulate the cart math before publishing the minimum. A minimum that works on paper against list prices may reject most real carts during an active sale.


Minimum spend and taxes

The minimum spend check runs against the cart subtotal before taxes by default. Whether tax is included or excluded from that subtotal depends on your store’s tax display settings. If your store displays prices inclusive of tax, the subtotal WooCommerce checks for minimum spend may differ from what the customer sees in the cart — which can produce confusing results. Check your tax configuration in Settings → Tax if you notice edge cases around the threshold.

Maximum spend

The maximum spend restriction is a ceiling on the cart value at which the coupon is valid. If a customer’s cart exceeds this amount, the coupon is rejected. A coupon with a maximum spend of $100 will not apply to a $150 cart.

Where to find it

Usage Restriction tab → Maximum spend field. It sits directly below the minimum spend field.

The gotcha: it’s easy to set by accident

The maximum spend field is placed immediately below the minimum spend field in the WooCommerce coupon editor. Store owners who are entering a minimum spend value and tab through the form sometimes populate the maximum spend field unintentionally. A coupon with a maximum spend of $5 — set accidentally — will reject virtually every cart that comes in, and the error message (“Sorry, this coupon is not applicable to your cart”) gives the customer no indication that a maximum spend is the problem.

How to set it correctly

Leave the maximum spend field empty unless you have a deliberate margin reason to cap the cart value. If you do set a maximum, make that ceiling visible in your marketing copy: “valid on orders up to $X.” Customers who spend more than the cap and have the coupon code in hand deserve to know why it won’t apply.

Individual use only

The “Individual use only” checkbox prevents the coupon from being combined with any other coupon in the same cart. If this is enabled, a customer can only apply one coupon at checkout — this one, and nothing else.

Where to find it

The General tab of the coupon editor → Individual use only checkbox. There’s a secondary field immediately below it: Individual use only: Allowed coupons — a list of specific coupon codes that are permitted to combine with this one even when individual use is enabled.

The gotcha: order of application changes the outcome

The way WooCommerce handles the individual use restriction depends on which coupon is applied first. If a customer applies coupon A first (which has “Individual use only” enabled) and then tries to apply coupon B, coupon B is blocked. But if the same customer applies coupon B first and then applies coupon A (the individual-use one), WooCommerce removes coupon B before adding coupon A — the individual-use coupon effectively displaces whatever was already in the cart.

Neither behavior is intuitive to customers. They don’t see a warning that says “applying this coupon will remove your other discount.” The previous coupon is simply gone.

How to set it correctly

Enable “Individual use only” when you specifically don’t want the coupon combined with other codes — for example, a VIP reward that shouldn’t be stacked with a public sale coupon. For cases where you want to allow one specific combination (a shipping coupon combined with a product discount, for instance), use the “Allowed coupons” field to whitelist the exceptions explicitly.

Note that “Individual use only” governs coupon-on-coupon stacking only. It does not prevent a campaign-based discount from applying simultaneously. If you run price campaigns through a discount plugin, those campaign prices are set before the cart assembles — the coupon “individual use” check happens at coupon application and doesn’t affect campaign prices. For a deeper look at how coupons and campaign-based discounts coexist, the guide on WooCommerce coupons versus campaign discounts covers the mechanics clearly.

Exclude sale items

The “Exclude sale items” checkbox prevents the coupon from applying to any product that WooCommerce currently considers to be on sale. If a product has a sale price set — via the product edit screen, a scheduled sale, or a discount plugin that writes to the sale price field — it counts as a “sale item” and will be excluded from this coupon.

Where to find it

Usage Restriction tab → Exclude sale items checkbox.

The gotcha: “sale item” is broader than most stores realize

WooCommerce determines whether a product is a “sale item” by checking whether its sale price is set and lower than its regular price. This check runs at the moment the coupon is applied. Any of the following will cause a product to count as a sale item:

  • A manually set sale price on the product edit screen
  • A WooCommerce scheduled sale that is currently active
  • A discount plugin that writes a sale price to the product at campaign time (not all plugins work this way — see below)

If you run a seasonal campaign that puts 40% of your catalog on sale and then send out a coupon code to your email list, a coupon with “Exclude sale items” enabled will silently fail for those 40% of products. The customer has a valid code; the coupon applies to items that aren’t discounted by the campaign; items that are discounted are untouched. The customer may not realize this — they see the coupon “works” on some things but not others, which reads as the coupon being broken.


“Exclude sale items” depends on how your discount plugin applies prices

Different discount plugins use different pricing architectures. Some write a sale price directly to the product record in the database when a campaign activates — those products are treated as “sale items” by WooCommerce and will be excluded from any coupon with this setting. Others apply prices at runtime through WooCommerce’s price filters without touching the stored sale price field — those products are generally not treated as “sale items” for coupon restriction purposes. Before assuming your campaign-discounted products are or aren’t excluded, test it: apply the coupon to a cart containing a discounted product and check the result.

How to set it correctly

Use “Exclude sale items” when you genuinely want to prevent coupon stacking on already-discounted products — for margin protection. If you want the coupon to work alongside your campaigns, leave it unchecked. If you want selective margin protection (certain products, not all sale items), use the “Exclude products” or “Exclude categories” fields instead — they give you precision that the sale-item blanket does not.

Usage limit per coupon

The usage limit per coupon is a total redemption cap across all customers. Once this many orders have been placed using the coupon, the code stops working for everyone. A coupon with a limit of 100 accepts exactly 100 redemptions, then becomes permanently invalid until the limit is raised or reset.

Where to find it

Usage Limits tab → Usage limit per coupon field. The current usage count is displayed below the limit fields once the coupon has been redeemed at least once.

The gotcha: usage counts pending orders

WooCommerce increments the usage count when an order is placed, not when it is paid or completed. A customer who reaches the payment step but abandons before completing may not count toward the limit depending on your checkout flow, but an order placed with a manual payment method (like “Cheque / Pay later”) increments the count immediately even though no money has changed hands.

More consequentially: if a coupon has a low limit and you distribute it to a large audience, the limit can exhaust within minutes of the campaign going live. Store owners who set a cap of 50 and email it to 10,000 subscribers often discover the code is exhausted before most recipients even open the email. The remaining 9,950 customers receive an error message, support tickets arrive, and the promotion creates negative goodwill rather than positive buzz.

How to set it correctly

Set usage limits relative to the distribution size, not relative to what sounds like a reasonable number in isolation. If a coupon is being sent to a list of 5,000 people, a limit of 50 is not a gentle cap — it’s a near-certain source of frustrated customers. If your goal is first-come-first-served scarcity, be explicit about that in the marketing copy: “first 50 customers only.” If there’s no genuine reason for a cap, leave the field empty.

Usage limit per user

The usage limit per user restricts how many times a single customer can redeem the coupon. A limit of 1 means each customer can use the code once, regardless of how many orders they place.

Where to find it

Usage Limits tab → Usage limit per user field.

The gotcha: user identification relies on account login or billing email

WooCommerce identifies “one user” by matching against the billing email address for guest customers, or the user account for logged-in customers. This means a customer can bypass a per-user limit by checking out as a guest with a different email address — or by creating a new account. The per-user limit is not fraud-proof; it’s a friction layer that stops casual reuse, not determined misuse.

Additionally, a customer with two email addresses who legitimately uses both will hit the limit on one and be blocked on the other, even though they’re the same person. This is particularly frustrating when the coupon was issued to a specific customer as a reward — they use one email at work, one personal, and their “personal reward” blocks them because of an address they already used for an order six months ago.


Per-user limits and guest checkout

For a per-user limit to work consistently, your checkout must require a billing email (it does, by default in WooCommerce). But if your store allows guest checkout without requiring an account, a technically minded customer can increment the limit across multiple email addresses. If preventing coupon reuse is important for business reasons (not just a soft nudge), combine a per-user limit with an allowed emails restriction for the most reliable enforcement.

How to set it correctly

A per-user limit of 1 is appropriate for one-time welcome offers or one-per-customer promotions. For loyalty rewards meant for repeat use, set the limit higher or leave it empty. If you’re using per-user limits as a light fraud deterrent rather than as a hard business rule, accept that they’ll stop most casual reuse but not all deliberate attempts.

Allowed products and categories

These fields scope the coupon to a specific list of products or product categories. When the “Products” or “Product categories” field has entries, the coupon only applies if the cart contains at least one qualifying item. Items outside that list are not discounted; if no qualifying items are in the cart, the coupon fails entirely.

Where to find it

Usage Restriction tab → Products field and Product categories field. Both are searchable autocomplete fields — start typing a product name or category name to find the entries.

The gotcha: the coupon type changes how the restriction behaves

The “Allowed products” restriction behaves differently depending on the coupon type:

  • Percentage discount or Fixed cart discount: the coupon applies if the cart contains at least one qualifying product. The discount is applied to the entire cart (or the allowed items only, depending on coupon type).
  • Fixed product discount: the discount applies specifically to the qualifying products at the line-item level. The customer can have a mix of qualifying and non-qualifying items — the discount appears only on the qualifying ones. This is correct behavior, but customers sometimes read it as the coupon “not fully working.”

Also worth noting: if a product belongs to a category in the “Allowed categories” field, but that same product is individually listed in the “Exclude products” field (see the next section), the exclusion takes priority. Being on two lists at once does not average out — the exclusion wins.

How to set it correctly

Use product/category restrictions to create genuinely targeted offers: a discount on a specific brand, a promotion tied to a seasonal collection, a reward that applies only to clearance items. Make the scope explicit in your marketing copy so customers don’t try the coupon on ineligible items and feel deceived when it doesn’t apply.

Excluded products and categories

Exclusion fields protect specific products or categories from the coupon. A storewide discount coupon with “Exclude categories” set to “New Arrivals” will apply to everything except new arrivals. If a customer’s cart contains only excluded items, the coupon fails completely.

Where to find it

Usage Restriction tab → Exclude products field and Exclude categories field. Both are directly below the “Allowed” fields.

The gotcha: WooCommerce doesn’t tell customers what’s excluded

WooCommerce’s error message when exclusions block a coupon is generic: “Sorry, this coupon is not applicable to your cart contents.” The customer does not learn which products or categories triggered the exclusion. If half their cart qualifies and half doesn’t, they won’t know which items to remove to make the coupon work.

This is a UX gap that WooCommerce has left unaddressed for years. The store owner’s only recourse is to communicate exclusions clearly in the promotion’s terms — not assume WooCommerce will explain them at checkout.

How to set it correctly

When using exclusions, list them plainly in the coupon’s marketing context: “valid sitewide, excluding new arrivals and sale items.” If you’re using both exclusions and the “Exclude sale items” toggle simultaneously, remember that they compound: the coupon is blocked from excluded categories AND from any item with a sale price. Test your exclusion setup with a real cart containing a mix of eligible and excluded items before the promotion goes live.

Allowed emails

The “Allowed emails” field restricts the coupon to customers whose billing email address matches one of the addresses in the list. You can enter specific addresses (one per line) or use a wildcard pattern like *@company.com to match an entire domain.

Where to find it

Usage Restriction tab → Allowed emails field. WooCommerce checks the billing email entered at checkout — not the email address on the customer’s account.

The gotcha: the billing email is what matters, not the account email

A customer who has a WooCommerce account linked to [email protected] but types [email protected] in the billing email field at checkout will fail the allowed-email check even if the coupon was issued to [email protected]. WooCommerce matches against whatever the customer types as their billing email at the time of checkout — not their account’s registered email, not their previously used emails, not any normalized form of the address.

This is a common frustration for loyalty programs that issue personalized coupon codes. The customer received the code at one address and checks out with another. The coupon rejects them. From their perspective, the coupon they received doesn’t work. From the store’s perspective, everything is behaving exactly as configured.

How to set it correctly

Use the allowed emails field for genuinely targeted, single-recipient offers where the specific email is known and the customer is expected to use it consistently. For loyalty rewards distributed to a customer segment, a per-user usage limit combined with a unique coupon code per recipient is a more reliable architecture than a shared code with email restrictions. If you use WooCommerce coupon bulk code generation or a dedicated coupon plugin, you can issue one code per recipient, which doesn’t rely on email matching at all.

How restrictions interact and stack

All WooCommerce coupon restrictions are evaluated together. A coupon fails if any single restriction is not met — the restrictions are AND conditions, not OR conditions. A customer who meets the minimum spend, has a qualifying product in the cart, and has a valid billing email, but has already used their per-user limit, will still be blocked.

This compounding behavior is worth thinking through intentionally. Here’s what a fully-configured restrictive coupon might look like in practice:

  • Minimum spend: $75
  • Individual use only: enabled
  • Exclude sale items: enabled
  • Exclude categories: “Accessories”
  • Usage limit per user: 1
  • Allowed emails: (customer’s specific email)

For this coupon to apply, the customer must have $75+ of non-sale items in non-excluded categories, must be using the exact correct billing email, must not have another coupon active, and must not have used this code before. Most customers won’t clear all six conditions simultaneously — and WooCommerce will give them a single generic error message without saying which condition failed.

The more restrictions you stack, the higher the false-rejection rate. Every restriction you add is the right decision for some use cases and the wrong decision for others. Stack them deliberately, not defensively.

When restrictions backfire

Restrictions are protective tools, but they can produce outcomes that harm the promotion more than they protect it. A few patterns worth watching for:

The minimum spend that’s too close to the average order value

If your average order value is $55 and you set a minimum spend of $50, the restriction adds no meaningful lift to cart size. You’ve made it marginally harder for customers with smaller carts to use the coupon without meaningfully incentivizing the customers you wanted to move up. A minimum spend that’s 20–30% above average order value creates genuine pull; one that’s just below doesn’t.

The “exclude sale items” on a sitewide promotional coupon

If you email a discount code to your entire list during a sale period, and the code has “Exclude sale items” enabled, customers who click through to specifically purchase discounted items will find the code doesn’t work on what they want. This creates the impression of deceptive marketing — the email implied a discount, but the product they want is excluded. More restrictive isn’t always smarter.

The usage limit that exhausts before the email is read

Email campaigns to large lists often see opens spread over 24–72 hours. A coupon with a usage limit of 20 in an email to 5,000 subscribers will be exhausted before most recipients open the message. The customers who try to redeem it late aren’t fringe cases; they’re the majority. Plan limits around the full expected redemption window, or use first-come-first-served messaging to set appropriate expectations.

The email restriction on a non-unique code

If a coupon is tied to a specific email address but uses a non-unique, guessable code (like “SAVE20”), the email restriction is your only line of defense against unauthorized use. A customer who shares the code with a friend who happens to have a different email address will find the code works for them too, if you haven’t set the per-user limit as a secondary guard. The allowed-email restriction combined with a per-user limit of 1 is a more reliable pairing.

When stacking gets too complex to manage

Coupons with four or five restrictions are manageable when you have one coupon running at a time. When you’re running ten simultaneous promotions — each with its own exclusion sets, minimum spends, and usage caps — the interaction surface gets large enough that unintended combinations become likely. A coupon that was built to exclude “New Arrivals” quietly excludes a product that was moved to that category last week. A new campaign discounts items that your other coupon was supposed to protect via “Exclude sale items.”

At a certain point, rule-based coupon management with native WooCommerce restrictions is genuinely the right tool — and at another point, a campaign-based discount system with schedule controls and priority management starts removing that complexity. Smart Cycle Discounts is one approach to this: instead of stacking restrictions on coupons, each campaign defines its own scope, schedule, and product targeting directly. There’s no general answer for when that crossover is worth making — it depends entirely on how many promotions you’re managing simultaneously. But if you’re spending meaningful time auditing coupon restriction interactions rather than running promotions, it’s worth considering whether the tooling fits the volume.

Frequently asked questions

How does WooCommerce calculate minimum spend — before or after tax?

By default, WooCommerce calculates the minimum spend against the cart subtotal before tax. Whether tax is included in the displayed subtotal depends on your store’s tax settings (including or excluding tax in prices). If your store shows tax-inclusive prices, the subtotal a customer sees in the cart may differ from the pre-tax subtotal WooCommerce uses for the minimum spend check. If you’re seeing edge cases where customers just above or below your threshold behave unexpectedly, check your tax display settings in WooCommerce → Settings → Tax.

Does “individual use only” block a coupon from combining with a campaign discount?

No. The “Individual use only” restriction prevents one coupon from being combined with another coupon in the same cart. It does not affect campaign-based discounts applied by a discount plugin. If a plugin applies a 20% promotional price to a product before the cart assembles, “Individual use only” on your coupon will not prevent that price from being in effect when the coupon is applied. The coupon-on-coupon check and the plugin-level price check are separate systems.

Can I limit a coupon to one use per customer without requiring an account?

Yes, but with caveats. WooCommerce’s per-user limit applies to guest customers by matching their billing email against the email associated with previous redemptions of the same code. A guest who checks out as a guest and then checks out again with a different email address can bypass the limit. If you want more reliable per-customer enforcement and your customer base is not logged-in, the most robust approach is issuing unique single-use codes (one code per customer) rather than relying on a per-user limit on a shared code.

What happens when a product is in both an “allowed category” and an “excluded category”?

The exclusion takes priority. WooCommerce resolves conflicts between allowed and excluded sets by treating exclusions as a veto. If a product is in a category listed under “Product categories” (allowed) and also in a category listed under “Exclude categories,” that product is excluded from the coupon. The same logic applies at the product level: a product individually listed under “Exclude products” is excluded even if its category appears in the allowed list.

Why does my coupon work on some products but not others in the same order?

The most likely causes are: (1) the coupon uses a “Fixed product discount” type, which applies at the line-item level to qualifying products only; (2) some items in the order are in an excluded category or are individually excluded; (3) some items have a sale price and the coupon has “Exclude sale items” enabled. To identify which cause applies, open the coupon and check all three of those settings. The diagnostic table in the related guide on WooCommerce coupon codes not working maps symptoms to likely causes for each scenario.

Can I use a wildcard in the “allowed emails” field?

Yes. WooCommerce supports * as a wildcard in the allowed emails field. The pattern *@company.com will match any billing email that ends with that domain. This is useful for corporate accounts where all employees have addresses on the same domain. Keep in mind that the match is against the billing email entered at checkout, not any verified or account-linked email — a customer can enter any domain-matching address, including one they don’t own. Wildcard email restrictions are best used for internal or trade promotions where the audience is controlled.

Does increasing the usage limit reactivate an exhausted coupon?

Yes. If a coupon has reached its usage limit and you raise the limit — or clear the field entirely — the coupon immediately becomes valid again and can be redeemed up to the new cap. The usage count is not reset by changing the limit; it continues counting from where it left off. A coupon with a limit of 100 that has been used 100 times, raised to a limit of 150, is valid for 50 more redemptions.

WooCommerce coupon restrictions are a set of logical gates, each independently capable of blocking a coupon. They’re not complicated individually — but they compound, they interact in non-obvious ways, and WooCommerce gives customers almost no information about which one failed. The cleaner your restriction setup, the more predictably your promotions behave. And the more clearly you communicate restrictions in your marketing copy, the fewer support tickets you receive when the coupon does exactly what you configured it to do.

If you’re finding that restriction logic has grown complex enough to be a management burden — many simultaneous campaigns with overlapping scopes, exclusions that need constant auditing — that’s usually a signal that campaign-scoped promotions with dedicated tooling fit the workflow better than stacked coupon restrictions. But for the majority of stores running one to three promotions at a time, native WooCommerce restrictions, set deliberately, are entirely sufficient.


What to take from this

  • Minimum spend is calculated against the post-discount cart subtotal, not the raw product total. A simultaneous campaign discount can push the subtotal below your threshold.
  • “Exclude sale items” is broader than most stores expect — any product with an active sale price (including from campaign plugins that write to the sale price field) is excluded.
  • “Individual use only” blocks coupon-on-coupon stacking, but does not prevent a campaign-level discount from applying alongside the coupon.
  • Per-user limits rely on billing email matching, not identity. Guest customers can bypass them with different email addresses.
  • Exclusion fields take priority over allowed fields when a product or category appears in both — the exclusion always wins.
  • The “Allowed emails” restriction checks the billing email entered at checkout, not the customer’s account email. A customer who has two emails will fail the check if they use the wrong one.
  • Restrictions compound. Every one you add is an AND condition — all must be met simultaneously. The more restrictions you stack, the higher the rate of legitimate customers being silently rejected.

W

Webstepper

WordPress & WooCommerce Plugin Studio

We build WooCommerce plugins and write honest, practical guides for store owners. No hype — just the mechanics of running a better store.