← All guides

How to stop selling expired medicine: a 3-alert system any pharmacy can run

A practical expiry-tracking method for independent pharmacies — by batch, with 90/30/7-day alerts — that works on paper, in a spreadsheet, or automatically in Shopman.

Every pharmacy owner has found one. A box at the back of the shelf, three months past its date, still priced, still for sale. Nobody meant it to happen. It happened because a shop with two thousand products has two thousand expiry dates, and no human can watch them all by eye.

The cost is not just the stock you write off — though for a small pharmacy that is often a month's profit a year. It is the one time a customer reads the box before you do.

Here is the system that fixes it. It works on paper. It works in a spreadsheet. And at the end we'll show what it looks like when software does it for you.

Step 1: Track expiry by batch, not by product

The mistake almost everyone starts with is one expiry date per product. Paracetamol expires "March 2027" — except the box you received last week expires in 2028 and the three left from January expire next month.

So the unit of tracking is the batch: one delivery of one product, with its own quantity and its own date. When you receive stock, you record:

Product Batch no. Qty received Expiry Supplier
Amoxicillin 500mg caps AX2211 200 2027-02-28 MedSupply
Amoxicillin 500mg caps AX2305 300 2027-11-30 MedSupply

Now "Amoxicillin" has two lines, and the question "what expires soon?" has a real answer.

Step 2: Sell the oldest batch first (FIFO) — and make it automatic

Tracking batches only helps if the older one leaves the shelf first. The rule is First In, First Out: the batch with the nearest expiry is the one you dispense from.

On a shelf, that means new stock goes behind old stock, every delivery, no exceptions. It is a five-minute habit and it is the habit most often skipped on a busy afternoon.

On paper, it means when a sale is written up, the quantity comes off the oldest batch line. In practice nobody does this by hand for long — which is the first place a system earns its keep.

Step 3: Three alerts, three different actions

One "expiring soon" list is not enough, because "soon" calls for different actions at different distances:

Alert When What you do
90 days out A quarter before Talk to the supplier about a return or exchange. Most will take stock back at 90 days; few will at 30. Stop reordering this product until it clears.
30 days out A month before Move it to the front. Discount it if your regulations allow. Tell the dispensing staff which batch to reach for.
7 days out The last week Pull it from the shelf into a quarantine bin. It does not go back. Arrange disposal per your local rules.

Run the 90-day check monthly, the 30-day check weekly, the 7-day check every Monday morning. Put it in the diary. The whole point is that the check happens whether or not anyone remembers it.

Step 4: Write down what happened to it

Stock that expired, was returned, or was discounted should leave a trail: how much, which batch, what you did. Two reasons. Your regulator may ask. And after six months, the list of products that keep expiring tells you exactly which ones you are over-ordering.

Doing it on paper or in a spreadsheet

This works with a notebook and a highlighter:

  1. A batch register, one line per delivery (the table above).
  2. Every Monday, sort by expiry and highlight anything within 90, 30 and 7 days in three colours.
  3. A quarantine bin under the counter for the 7-day items.

In a spreadsheet, a conditional-format rule on the expiry column does the highlighting. The weak point is the same in both: someone has to sort it every Monday, someone has to update quantities after every sale, and the day either stops happening, the system is quietly dead.

What this looks like in Shopman

Shopman runs this exact system, without the Monday ritual:

  • Stock is received by batch — batch number, quantity, expiry, supplier, cost — from a purchase order or a quick receipt.
  • Sales dispense FIFO automatically. The till takes the quantity from the batch expiring soonest, so the shelf order and the book agree.
  • The three alerts run every night at 90, 30 and 7 days (you can change the thresholds). They land in the app's notification bell and, if you switch it on, in your email — and each alert fires once per batch per band, so you are not nagged about the same box daily.
  • Low-stock alerts run alongside, so the product you pulled at 7 days does not become the product you ran out of.
  • The expiry tracker page lists every batch by days left, and every adjustment — expired, returned, damaged — is recorded with who did it and when.

Expiry alerts are on every plan, including the free one. They are the one feature in the product that can stop expired medicine reaching a customer, and the shops least able to pay are usually the ones with nobody else watching.

Start free — 50 products, no card

Frequently asked

How far ahead should a pharmacy check expiry dates? Ninety days is the practical horizon: far enough that suppliers will still discuss returns, close enough that the list is short. Thirty and seven days are the action points.

Do I need to track batches for every product? For anything with an expiry date, yes. Non-perishable goods (bandages, devices) can be tracked at product level.

What should I do with expired medicine? Quarantine it immediately so it cannot be sold by mistake, record the quantity and batch, and dispose of it according to your local pharmacy regulations — never in general waste.

Start free on Shopman