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.
1.9.1
Fixes stock and discounts after a batch sells out, is removed or is refunded. Recommended for all users.
1.9.0
Fixes hand-set sale prices being reverted on already-discounted products. A product you price yourself no longer shows the expiry notice.
1.8.9
Fixes an issue affecting batch saves. Recommended for all users — after updating, check any product whose batches you've recently edited and re-enter its batch list if it appears empty.
1.8.8
Completes the 1.8.7 notice-timing fix. The notice now reads the batch actually being sold from, so it can no longer appear on a product that is still weeks away from its deadline. Recommended for all users, particularly stores that keep several batches of the same product.
1.8.7
Fixes the "show notice within N days" window, which was measured against a stale day count and so could hide a notice for a product genuinely close to its deadline. Affects every automatic schedule, daily included. Also fixes notice background colours defaulting to the same red as the notice text. Recommended for all users.
1.8.6
Notices now show as coloured text instead of a coloured box; a background is available as an optional extra per notice. Worth a look at a product page after updating.
1.8.5
Documentation only — the listing now states the WooCommerce requirement explicitly. No functional change.
1.8.4
Widens the expiry date picker in both directions, so historical dates can be entered as freely as far-future ones. Existing batch data is unaffected.
1.8.3
Fixes expiry dates beyond six years ahead being rejected by the date picker. Recommended if you stock long-dated goods. Existing batch data is unaffected.
1.8.2
Corrects the feature list — instant recompute is a Pro feature; the free plugin runs on a schedule. No functional change to pricing or reporting.
1.8.1
Code-hardening release: output escaping and database query preparation throughout. No settings, data, pricing, or reporting changes — safe to update without any action on your part.
1.8.0
Removes every free-tier limit: unlimited tracked products, unlimited discount tiers, and the full Rankings table. Nothing is taken away and no action is needed — if you were at a limit before, the restriction is simply gone.
1.7.0
Fixes waste/sell-through reporting accuracy for batches whose grace window shifts them across a day or reporting-period boundary — your "Unsold at expiry" and sell-through figures may change after updating to reflect this correction. No action needed.
1.1.0
Adds CSV export on the Actions tab. No action needed to update.
1.0.0
Initial public release.