Batch and expiry tracking for a small shop, without a stock-taking week

18 August 2026 · Layerdots team
A shelf of stock boxes with expiry tags shading from green through amber to red, beside a calendar showing the return window closing

The day you carry a carton of expired goods to the back room is not the day you lost the money. You lost it slowly, over months, while that stock sat sellable on the shelf and nobody looked at the dates. By the time expiry makes the loss visible, every chance to avoid it has passed: the distributor's return window, the near-expiry discount, even putting the shorter-dated strip in front.

What follows is a routine that catches stock while those chances are still open. It needs no stock-taking week. It needs two habits: batch and expiry typed in once, at purchase, and one report read once a month.

An expired strip costs the purchase price, not the margin

Be precise about what an expired item costs. Say a strip cost you ₹80 and sells for ₹100. When it expires, the loss is not the ₹20 of margin you missed. It is the ₹80 of purchase money already handed to the distributor, and at that margin you need ₹400 of fresh sales to earn it back. One shoebox of write-offs can eat the profit of a good week.

GST makes it slightly worse. Section 17(5)(h) of the CGST Act blocks input tax credit on goods that are lost, destroyed or written off. Destroy expired stock and the credit you took on its purchase generally has to be reversed, so the tax you thought was recovered becomes a cost too. If the stock goes back to the supplier against a credit note under Section 34, the credit note adjusts the tax instead. The exact treatment, and which table of GSTR-3B it goes in, is in our article on GST and expired stock; the direction is clear enough here. An expired item costs more than its purchase price.

First-in-first-out fails without batch numbers

The standard advice is to sell the oldest stock first and keep new cartons behind old ones. That is first-in-first-out, and it rests on an assumption that is often false: that the stock you bought first will also expire first.

Distributors sell from their own mixed shelves. The carton you bought in June can carry a shorter-dated batch than the one you bought in April. If you only track when you purchased, the June carton waits at the back of the shelf until it expires there. The only reliable ordering is by the expiry printed on the pack, batch by batch, and that only works if each batch's expiry is recorded somewhere you can sort and filter.

Type batch and expiry once, at purchase entry

The numbers already exist, on the pack and line by line on most distributor invoices. The cheapest moment to capture them is purchase entry, because you are already touching every item once. Type them then and every report afterwards comes free. Try to capture them later, during a stock-take, and you are handling thousands of items a second time.

In Layerdots ERP, purchase entry takes batch and expiry per line, and the invoice scanner reads the distributor's invoice to cut down the typing. If your stock register is in Excel today, moving those columns across is a one-time job, covered in moving from Excel to billing software. For a pharmacy this is the centre of the trade, which is why batch-wise stock sits at the heart of what a medical store needs from billing software.

A kirana does not have to record dates for everything. Record them where the date matters and skip them where it does not. Biscuits, dairy, sauces, masala packets and baby food carry real dates and real write-offs; detergent and steel wool do not. Covering a third of the catalogue still catches most of the loss, because the loss is almost entirely in dated goods.

One report a month, filtered by the return window

Once expiry is in the system the routine is small. Pick one date a month you already remember, say the day after your GST filing. Run the expiry report with one filter, everything expiring in the next 180 days, and sort the list into buckets: stock to return, whose distributor window is still open, set aside with its purchase reference; stock to mark down, which cannot go back but can still sell at a discount; and stock to watch, with months left, which normal sales will clear. The report takes seconds because the dates are already recorded. The fifteen minutes go on decisions, not on hunting for dates with a torch behind the fridge.

The date that matters is not the printed expiry date. It is the day the return window closes, which can be months earlier, so the filter should look far enough ahead that the window is still open when you act. If your distributors take returns up to three months before expiry, a 180-day filter gives you three months to notice and act, while a 90-day filter shows you items whose window has already closed. Start at 180 days and shorten it only if the list is mostly watch items month after month.

Return windows are trade practice, so ask each distributor

Most distributors accept near-expiry stock back, but only inside a window, and the window is a matter of trade practice, not law. Some take medicines back up to a few months before expiry, some only take stock already expired, some want the original invoice reference on the return. Ask each main distributor what their window is and write it down. The answer decides how far ahead your report should look; a report that only shows stock already expired is, for returns, too late by definition.

The paperwork side is checkable. Returns between registered businesses move on a credit note under Section 34 of the CGST Act. For time-expired medicines specifically, CBIC Circular No. 72/46/2018-GST, dated 26 October 2018, describes two routes: the return can travel as a fresh supply from you to the distributor, or against a credit note issued by them. Which route applies depends on the case, so ask your distributor which one they use and let your accountant confirm the treatment. Your job at the counter is simpler: know the window, and have the original purchase on record so the return can name it.

Markdowns for stock that cannot go back

Some stock has no way back: FMCG lines with no return arrangement, opened cartons, items bought in a scheme. Here the arithmetic is blunt. Any price above zero beats a write-off. Selling a ₹100 item at ₹60 feels like a loss, but the alternative is recovering ₹0 of your ₹80 purchase cost. A discounted sale also stays a normal taxable sale, so the input-credit question that Section 17(5)(h) raises for destroyed goods does not arise in the same way.

Put marked-down stock where people see it, at the counter, not on the shelf where it went to expire in the first place. A small basket labelled short dated, ₹40 off, sells faster than you would expect, and regular customers learn to check it.

Expiring stock and dead stock are different problems

Keep two ideas separate. Expiring stock sells fine; its problem is a clock. Dead stock has no clock; its problem is that nobody buys it, and next year it will still be there, unexpired and unsold. The fixes differ too. Expiring stock wants returns, markdowns and first-expiry-first-out. Dead stock wants you to stop reordering it and clear the shelf space for something that moves. A kirana shelf usually holds both kinds at once, which is why a stock report and an expiry report are separate reports: one sorts by movement, the other by date. Reading the wrong one for the job hides the problem it was meant to show.

Layerdots ERP

Billing, stock and GST returns for Indian shops, on Windows and Mac, with a phone app. Seven days free, with no card and no online account.

Download