FEFO for WooCommerce
FEFO — First Expired, First Out — is the stock‑rotation method for anything with an expiration date. Instead of shipping the oldest received unit (that’s FIFO), you ship the unit closest to expiring. The two only match when every delivery arrives in expiry order, which it rarely does: a fresh delivery can easily carry a shorter shelf life than stock already on the shelf. Get the order wrong and good stock quietly expires behind newer boxes — straight to write‑off.
Core WooCommerce can’t do FEFO. It tracks one stock number per product, with no expiration dates and no batches, so it has no idea which units expire first. This guide shows how to add proper FEFO rotation to WooCommerce with the Sellinor Product Expiration Dates Pro add‑on.
Track stock as batches, not one number
The foundation of FEFO is batch tracking. With the Pro add‑on you record each delivery of a product as a batch with three things:
- a lot / batch number,
- an expiration date, and
- a quantity.
A single SKU can hold several open batches at once — say 40 units expiring in March and 60 expiring in May — and the product’s sellable stock is the sum of its non‑expired batches. Full setup: batch & lot tracking.
Deduct the first-expiring lot automatically
This is the FEFO part, and it’s automatic. When an order is placed, the plugin fills it starting from the batch closest to expiring, only moving to the next batch when one is exhausted. You never pick the lot by hand and you never accidentally ship May’s stock while March’s sits there.
It holds up under the messy realities of a real store:
- The exact batch(es) used are recorded on the order, so you always know what shipped.
- Refunds and cancellations return the units to the correct batch rather than inflating a generic stock count.
- If a batch passes its expiration date, it stops counting toward sellable stock so it can’t be sold.
Why FEFO is worth setting up
- Fewer write‑offs. The nearest‑to‑expiry stock always moves first, so less of it ever reaches its date on the shelf.
- Recall traceability. Because each order records its lot, you can find exactly which orders received a given batch — essential for food, supplements, cosmetics and pharmacy stock.
- No manual rotation. The rule runs on every order automatically; your team doesn’t have to think about dates at the point of sale.
Free vs Pro
The free plugin gives every product a single expiration date and can automatically hide it or set it out of stock when that date passes (or a set number of days before) — enough if you only ever hold one date per product. FEFO needs batches, so per‑lot tracking and automatic first‑expired‑first‑out deduction are part of the Pro add‑on.
If you sell dated goods that arrive in multiple batches — which is most perishable and regulated stock — FEFO is the difference between rotating stock correctly and slowly accumulating waste. Stores running it on supplements, food and cosmetics get the same payoff: see supplement expiry & lot tracking for a worked example.
Frequently asked questions
What is FEFO?
FEFO stands for First Expired, First Out. It's a stock-rotation method where the unit closest to its expiration date is sold or shipped first — regardless of when it arrived. For anything with a best-before or expiry date it's the correct method, because deliveries don't always arrive in date order.
Does WooCommerce support FEFO out of the box?
No. Core WooCommerce tracks a single stock quantity per product with no expiration dates or batches, so it has no concept of which units expire first. You need batch tracking to record per-lot expiration dates and a deduction rule that picks the earliest-expiring lot — which the Sellinor Pro add-on provides.
How does FEFO deduction work when an order comes in?
With batch tracking enabled, each product holds one or more batches, each with a lot number, expiration date and quantity. When an order is placed the plugin deducts the required quantity starting from the batch closest to expiring, moving to the next batch only when one runs out. The exact batch(es) used are recorded on the order, and refunds or cancellations return the stock to the correct batch.
What's the difference between FEFO and FIFO?
FIFO (First In, First Out) sells the oldest-received stock first. FEFO sells the soonest-to-expire stock first. They're the same only when stock always arrives in expiry order — which it rarely does, because a later delivery can have a shorter shelf life. For dated goods, FEFO is the method that actually prevents write-offs.
Do I need the Pro add-on for FEFO?
Yes. The free Sellinor plugin tracks a single expiration date per product and can hide or out-of-stock it automatically when expired. Per-batch tracking and automatic FEFO deduction are part of the Pro add-on.
Add FEFO batch rotation to your store
Track stock by batch with expiration dates and let WooCommerce deduct the first-expiring lot automatically on every order.
See plans & download freeOr read the documentation.