WooCommerce fixes / coupon does not exist

WooCommerce "Coupon Does Not Exist"? Causes & Fix

The coupon is sitting right there in your admin, published, in date — and checkout insists it doesn't exist. That contradiction is the clue: WooCommerce isn't reading your coupon list, it's reading a cached answer about it.

Last updated: 16 Jul 2026 · ~6 min read

Quick answer

If the coupon is published and visible in your admin, the usual cause is a persistent object cache (Redis, Memcached) serving a stale "not found" answer for that code. WooCommerce caches the code-to-coupon lookup, so a cache that wasn't invalidated keeps returning nothing. Flush the object cache and retry. If flushing fixes it instantly, that was it.

What this error actually means

Before WooCommerce checks anything about a coupon — dates, limits, restrictions — it has to turn the typed code into a coupon. It looks for a published coupon whose code matches, and caches that lookup. If it comes back with nothing, you get Coupon "CODE" does not exist! and no other checks ever run.

That's worth knowing, because it narrows things down hard. This error means not found — not expired, not used up, not restricted. An expired coupon says it has expired. A coupon at its usage limit says the limit is reached. So if you're seeing "does not exist" while looking straight at the coupon, only two things can be true: the lookup is being answered by a stale cache, or the coupon isn't in the state you think it's in.

The most common causes (most likely first)

  1. A persistent object cache is holding a stale "not found" for this codeThe coupon is published and visible in the admin, but checkout denies it. It usually starts right after you create, rename or restore a coupon. The proof is quick: flush the object cache (Redis, Memcached, or your host's object cache panel) and retry — if it works immediately, this was it.
  2. The coupon isn't actually publishedLook at the status column in Marketing → Coupons, not just the row. Draft, Pending, Private, Scheduled for a future date, or sitting in the Trash all produce exactly this error — the lookup only matches published coupons. Scheduled is the sneaky one, because it looks finished.
  3. The code doesn't match what's storedIt works when you type it by hand but not when you paste it. A trailing space, a non-breaking space, or a curly quote picked up from a Word doc or an email signature makes it a different string. WooCommerce also normalises coupon codes to lower case when they're saved.
  4. The coupon exists somewhere elseYou're looking at it in staging, or on a different site in a multisite network, or it didn't survive a partial database restore. Search for the code on the live site specifically, including the Trash, and confirm it's genuinely there.
  5. A plugin was generating the coupon and no longer isThe code isn't in Marketing → Coupons at all, yet it used to work. Bulk-generator, subscription and loyalty plugins can register codes on the fly rather than storing them as real coupons — deactivate or break one and every code it supplied vanishes.

Where to look first

Coupon's right there and the store disagrees?

This one wastes time because the evidence lies — you're staring at a published coupon while checkout tells your customer it doesn't exist, and nothing in the admin explains the gap. DiagnosticIQ's free dashboard checks the layer the admin doesn't show you: whether a persistent object cache is sitting between WooCommerce and your coupons, and whether the coupon is really in the state the list makes it look like. Faster than flushing caches and guessing.

Get the free plugin

Made by Prima Digital — the team behind this guide. Free forever; no card to install.

How to know you fixed it

Verify

Apply the code in a fresh private window on the live site — it should be accepted and the discount should land on the cart total, with no error.

Frequently asked

Is this the same as an expired coupon?

No, and that's useful. Expired coupons say the coupon has expired, and used-up ones say the usage limit has been reached. "Does not exist" means WooCommerce couldn't find the coupon at all.

My customers are complaining — is it affecting everyone?

If it's a stale cache, usually yes, for that code, until the cache is flushed. If it's only some customers, look at the coupon's usage restrictions instead — but note those give different errors.

Will flushing the object cache break anything?

No. It just forces the store to look things up fresh. The site will be briefly slower while the cache refills, and that's all.

It keeps coming back after a flush. Why?

Then something isn't invalidating the cache when coupons change — often a misconfigured object cache drop-in, or coupons written into the database directly by an import rather than saved through WordPress.

>_
John O'Keane — Founder, Prima Digital · LinkedIn
Contributions by David Zhang · LinkedIn
I build DiagnosticIQ, the WooCommerce diagnostic plugin, and "coupon does not exist" is my favourite kind of bug to explain — the coupon is right there on screen, and the store is reading a stale cache instead of the coupon.