FIFO vs FEFO: Batch and Expiry Tracking for Grocery and Pharmacy
· OneLedger Team · 4 min read
For a grocery store or a medical shop, expired stock is not a rare accident — it is a monthly cost. Biscuits, dairy, cosmetics, syrups and tablets all have a date, and once it passes the piece is worth nothing. Batch and expiry tracking is how you keep that cost small.
FIFO and FEFO in plain words
- FIFO — First In, First Out. Sell the stock that arrived first. Good for goods without an expiry date.
- FEFO — First Expiry, First Out. Sell the stock that expires first, whatever its arrival date.
They are usually the same, but not always. Suppose you bought a batch of cough syrup in March that expires in December, and a distributor's older batch in May that expires in August. FIFO would sell the March batch first. FEFO sells the August batch first — which is what actually saves you money.
For anything with an expiry date, FEFO is the rule to follow.
What batch-wise stock means
Instead of one stock figure per item ("Paracetamol 500: 120 strips"), you keep stock per batch:
| Batch | MFG | Expiry | Qty |
|---|---|---|---|
| PCM2408 | Aug 2026 | Jul 2028 | 70 |
| PCM2402 | Feb 2026 | Jan 2028 | 50 |
Each batch can also have its own MRP — common when prices change between production runs.
Setting it up
- Turn on batch & expiry for the business (Settings → Categories & Item Fields). Grocery and pharmacy shop types have it on already.
- Enter batch details on every purchase. On the purchase bill, each line gets batch number, MFG date and expiry date. This is the one habit that makes everything else work.
- Opening stock by batch. When you start, enter opening stock with its batches (or import it from Excel — the item import accepts batch columns).
At the counter: let the software pick
Asking staff to choose the right batch for every sale does not work in a queue. In OneLedger Inventory, when you sell a batch-tracked item, the earliest-expiring batch with stock is picked automatically (FEFO). If the customer hands you a specific pack, you can still choose its batch.
Stock reduces from the right batch, so the batch list stays true to the shelf.
Watch expiry before it happens
Tracking is only half the job; acting on it is the other half.
- Expiry Report (batches) lists batches that expire within the period you choose. Check it weekly.
- Move near-expiry stock forward on the shelf, offer it in combos, or return it to the supplier if your terms allow.
- Write off what has expired using Stock Out / Write-off with the reason Expired. Do not just leave it on the shelf; it keeps showing as stock value it does not have.
The Write-offs report then tells you how much you lost to expiry each month — a number worth bringing down.
Common mistakes
- Skipping batch entry on "small" purchases. One missing batch makes the whole item unreliable.
- Mixing batches on the shelf. Keep the earliest expiry in front.
- Same batch number from two suppliers. Rare, but check expiry dates when it happens.
- Buying too much of slow items. The Dead Stock and Fast-moving Items reports help you buy closer to what really sells.
Does every shop need batches?
No. Hardware, clothing, furniture and most electronics do not have expiry. Batch tracking adds a step at purchase time, so use it only for categories that need it. In OneLedger Inventory each category picks its template — a supermarket can track batches for food and skip them for household plastics.
FAQ
Can I sell loose items with batches? Yes. Decimal quantities (for example 0.5 kg) work with batch-tracked items.
What if a customer returns an item? A sales return puts the quantity back into the batch it was sold from.
Can different batches have different MRPs? Yes. Each batch can carry its own MRP, and the bill shows the batch you sold.
Is FEFO only for pharmacies? No — it applies to anything with a best-before date: dairy, packaged food, cosmetics, batteries, paints and more.
Count less. Sell more.
Set up your shop in two minutes — free, no card needed.
Create free account Book a demo