Perishable and dated stock — food, supplements, cosmetics, anything with a best-before or use-by date — needs a different kind of pricing than the rest of your catalogue. Left alone, it either sits at full price until it's unsellable, or someone has to remember to mark it down manually, product by product, week after week.
Expiry Tracking and Discount Engine tracks expiry dates natively per product (or per variation), and automatically prices clearance discounts as each batch approaches its date — no spreadsheets, no manual sale-price editing, no forgotten stock.
This is a WooCommerce extension. WooCommerce must be installed and active; the plugin adds to your existing products rather than replacing any part of your store.
What it does (free)
- Native batch tracking — record one or more expiry dates and quantities per product, right on the product edit screen. Works with simple and variable products.
- Best-before and use-by aware — the two date types behave differently (best-before stays sellable a little past its date; use-by is pulled before it), each with its own configurable grace window.
- Automatic clearance pricing — a configurable table of discount tiers ("7 days left → 65% off", "30 days left → 20% off", and so on) prices each product automatically as its date approaches.
- Runs on its own schedule — an automatic sweep recalculates every tracked product's price for you; pick twice daily, daily, weekly, semi-monthly or monthly to match how fast your stock moves.
- Customers never buy expired stock — expired-but-retained stock stays visible to you for reference, but is automatically hidden from customers and excluded from product feeds (Google Shopping, Facebook, etc.) once it's no longer sellable.
- A clear expiry notice on the product page — a configurable message shown to shoppers, with labels, colors, and placement you control so it fits your store's voice and design.
- Your choice on manual sale prices — protect a price you've set by hand entirely, let the engine always manage it, or only override it when the engine's own discount is deeper: you decide which.
- EU Omnibus-friendly pricing — your product's regular price is never altered or reset when a discount tier applies, so the reference ("was") price shown to customers is always your genuine original price, not an inflated or escalating one.
- Unlimited tracked products and unlimited discount tiers — no caps of any kind. Track your whole catalogue and build as many discount tiers per date type as your pricing strategy needs.
- Free Reporting dashboard — sales, waste, and sell-through metrics with a toggleable trend chart, a full Rankings table comparing every tracked product side by side, and a scheduled email summary, all included at no cost.
- Backup and restore — snapshot all your batch and expiry data at any time, and restore from any saved snapshot.
- WP-CLI support for previewing, applying, and inspecting discounts from the command line.
Why this is different
Most "sale" or "dynamic pricing" plugins schedule a fixed discount for a fixed period. This plugin instead reasons about
your actual expiry dates: how close a batch is to its sellable deadline drives the price, automatically, continuously, without you touching it.
Want more?
The
Pro add-on builds on the same engine for stores that want to go further:
- Stock & velocity intelligence — slow-selling or overstocked batches discount earlier and harder; batches projected to sell out comfortably discount later or not at all, protecting margin
- Cart price-split — only the at-risk quantity gets the discounted price; extra units in the same order are charged full price
- Advanced notices — cart reminders, discounted-quantity display, custom CSS placement
- Scheduled, automated backups
- Bulk CSV import for batch and expiry data
- Deeper reporting — revenue and profit-margin figures, plus one-click Excel exports
- Instant price recompute plus automatic page-cache clearing (including Cloudflare)
- Priority customer support and configuration assistance
Learn more at
tarkva.com.
Privacy and external services
This plugin does not send any data anywhere by default. See "External services" below for the one case where it does, and only when you explicitly opt into it.