Product Expiry Dates for WooCommerce
Give a product a date it can no longer be sold after. It comes off sale when that date passes, and a basket still holding it cannot be checked out.

What it does
Some things should not be sold after a certain date. Food and drink have a best-before date, a licence or a warranty covers a fixed period, a seasonal line stops making sense in February, and an event ticket is worthless the morning after. WooCommerce has no way to say so.
Product Expiry Dates adds an Expiry tab to every product, with one box on it: the date that product can no longer be sold after. When that moment passes it comes off sale on its own, without anybody having to remember.
The date is enforced in both of the places it has to be. A product past its date cannot be added to a basket, and a basket that already had one in it cannot be checked out — which matters more than it sounds, because a basket can easily outlive the date it was filled before. The customer is told which product to take out, by name.
An expired product is taken off sale, not marked out of stock. It has not run out of units, and saying that it has would tell every report, feed and stock email something untrue about your shop. It stays in your shop, unbuyable, with a line on the page explaining why.
Pro is for shops where one date box per product is not enough. A shelf life dates your whole catalogue at once, and each category can carry a figure of its own — days for salad, years for tins. Variations can be dated separately, dates can be typed straight into the products list or carried in and out through your product CSV, and staff and trade accounts can be allowed to buy past-date stock so last season's lines still clear. It warns you a few days before a date passes, on your dashboard and by email, and can mark stock down as the date approaches so it sells instead of being thrown away.
Pro is the complete plugin. It adds all of the above, and it keeps every date and setting you have already made.
See it in action
What Free includes
Free forever on WordPress.org.
- One expiry date per product, on an Expiry tab just below Inventory
- An Expires column on the products list, showing what has stopped selling
- The product taken off sale by itself once the date passes, with a sentence saying why
- Baskets that outlived the date refused at the checkout, naming the product to remove
- Notices on the cart, checkout and mini-cart
- Classic checkout and the Cart and Checkout blocks both covered
- PayPal express buttons refused too, so a one-tap order cannot get past the date
- An optional time of day, so a date can end at a minute rather than at midnight
- A shortcode, [pexp_message], to put the message anywhere
- Settings import and export
- High-Performance Order Storage compatible
What Pro adds
Everything in Free, plus all of the features below.
- Roles the dates do not apply to, so staff and trade accounts can clear past-date stock
- A shelf life for the whole shop, dating every product that has none of its own
- A shelf life per category, because salad lasts days and tinned goods last years
- A date on each variation, for a product whose sizes or flavours do not all last as long
- A choice of what else happens at expiry: hide the product, or move it to draft
- Warnings of what stops selling in the next few days, on your dashboard and by email
- Reduced to clear: a percentage off as the date approaches, and a deeper one at the end
- Dates in Quick Edit and Bulk Edit, to date or shift a whole selection at once
- An expiry column in the WooCommerce product CSV export and import
Pricing
Every Pro plan is the same plugin with every feature. The only difference is how many sites you can run it on.
Free
The free plugin, free forever. Distributed through WordPress.org. No licence, no account.
$0
Get Freeon WordPress.org
Single site
One site, with a year of updates and support.
$49/year
Secure checkout. Cancel any time.
5 sites
Most popularUp to 5 sites, with a year of updates and support.
$99/year
Secure checkout. Cancel any time.
25 sites
Up to 25 sites, with a year of updates and support.
$199/year
Secure checkout. Cancel any time.
Need more than 25 sites? Get in touch about a custom licence.
Frequently asked questions
What happens when a date passes?
The product comes off sale. Its buy button goes and the page says it is no longer available, in whatever words you chose. Anybody who already had it in their basket is asked to take it out before ordering.
Is an expired product hidden, or marked out of stock?
Neither. It stays listed, its page still works and explains itself, and its stock is left alone, because how many you have has not changed. Pro can hide it or move it to draft instead.
Can I set a time as well as a date?
Yes. Leave the time empty and the product sells until the end of the day you typed, which is how a best-before date reads. Fill it in and it stops at that minute, which suits an event or a deadline.
Can different categories have different shelf lives?
Yes, in Pro. Every product category has a days-on-sale box, so salad can be dated in days and tinned goods in years, or a category can be left out of the shelf life altogether.
Can staff and trade accounts still buy past-date stock?
Yes, in Pro. Tick the roles the dates should not apply to. Everyone else, including anybody who is not logged in, is still held to them.
Can I be warned before a date passes, rather than after?
Yes, in Pro. A dashboard panel lists what stops selling in the next few days, soonest first, and the same list can be emailed each morning. Nothing coming up means nothing sent.
Can stock be marked down as its date approaches?
Yes, in Pro. Set a percentage off in the last week and a deeper one in the last days, and stock that would have been thrown away sells instead. Nothing is written onto your products, so extending a date puts the full price back the same moment.
Can I set dates on hundreds of products at once?
Yes, in Pro. Quick Edit types a date straight into the products list, Bulk Edit dates or shifts a whole selection, and the WooCommerce product CSV carries an expiry column both ways.
What happens to my dates if a Pro licence lapses?
They stay, and they carry on taking products off sale — it would serve nobody for out-of-date stock to become sellable again because a card was declined. What stops is the deciding: new products stop being given a shelf life, and clearance discounts end so your normal prices come back.
More plugins

Estimated Delivery Dates for WooCommerce
Tell customers when their order will arrive, and your team when it has to leave. Estimates on the product page, cart, checkout and emails.

Stock Alerts for WooCommerce
Lets customers leave their email address on a sold-out product or variation, and emails them when it can be bought again. A change in the stock number on its own sends nothing.

Minimum Order for WooCommerce
Set a minimum spend or quantity before checkout, with clear messaging that tells customers exactly what to add.

Delivery Instructions for WooCommerce
Gives customers one clear box at checkout for delivery or shipping instructions, on the classic checkout and the Checkout block, and shows what they wrote on the order and in your emails.

Free Shipping Bar for WooCommerce
Show customers how close they are to free shipping, with a progress bar on the cart, at checkout and in the mini-cart.

Advanced Pre-Orders for WooCommerce
Sell products before they arrive. Set an expected date, turn Add to basket into Pre-order, and carry that date through to the customer's order.