Pharmacy Stock & Expiry Register (Excel)
A batch-wise stock register for a clinic dispensary or chemist shop. Enter each purchase with its batch number and expiry date, record what is sold or issued from which batch, and the register shows the balance of every batch, colours batches that expire within your chosen number of days, marks expired stock in red and tells you which medicines have fallen to the reorder level.
Free · no sign-up · opens in Microsoft Excel, Google Sheets, LibreOffice and WPS Office. Files contain no macros.
Preview
Real view of the file with its sample data (yellow cells are where you type).
| Item | Batch no. | Expiry date | Supplier | Invoice no. | Received on | Qty received | Purchase rate | MRP | Issued | Balance | Days to expiry | Status | Stock value |
| Paracetamol 500 mg tablets | PCM2391 | 31-10-2026 | Punjab Medical Agencies | PMA/1182 | 28-09-2025 | 40 | ₹ 9.50 | ₹ 15.00 | 0 | 40 | -2 | Expired | ₹ 380.00 |
| Paracetamol 500 mg tablets | PCM2544 | 31-01-2028 | Punjab Medical Agencies | PMA/1460 | 03-10-2026 | 100 | ₹ 9.80 | ₹ 15.50 | 18 | 82 | 455 | OK | ₹ 803.60 |
| Cetirizine 10 mg tablets | CTZ0871 | 31-12-2026 | City Pharma Distributors | CPD/552 | 06-01-2026 | 50 | ₹ 14.00 | ₹ 22.00 | 4 | 46 | 59 | Near expiry | ₹ 644.00 |
| Amoxicillin 500 mg capsules | AMX1129 | 31-05-2027 | City Pharma Distributors | CPD/601 | 04-08-2026 | 60 | ₹ 62.00 | ₹ 98.00 | 5 | 55 | 210 | OK | ₹ 3,410.00 |
| ORS sachets 21 g | ORS5510 | 31-01-2027 | Punjab Medical Agencies | PMA/1390 | 05-06-2026 | 120 | ₹ 16.00 | ₹ 21.00 | 10 | 110 | 90 | Near expiry | ₹ 1,760.00 |
| Cough syrup 100 ml | CSY0042 | 30-11-2026 | Wellness Surgicals | WS/77 | 17-12-2025 | 12 | ₹ 68.00 | ₹ 105.00 | 3 | 9 | 28 | Near expiry | ₹ 612.00 |
| Disposable syringe 5 ml | SYR8812 | 30-04-2029 | Wellness Surgicals | WS/91 | 03-09-2026 | 500 | ₹ 4.20 | ₹ 7.00 | 40 | 460 | 910 | OK | ₹ 1,932.00 |
| Absorbent cotton roll 500 g | COT0315 | Wellness Surgicals | WS/91 | 03-09-2026 | 10 | ₹ 145.00 | ₹ 210.00 | 0 | 10 | OK | ₹ 1,450.00 | ||
| Normal saline 500 ml | NS77801 | 31-03-2028 | City Pharma Distributors | CPD/640 | 23-10-2026 | 48 | ₹ 22.00 | ₹ 35.00 | 6 | 42 | 515 | OK | ₹ 924.00 |
What's inside
- Settings: "as on" date (today by default) and the near-expiry window in days (90 to start with)
- Items sheet: medicine or product name, form, pack, rack or shelf, reorder level and the total balance of all its batches with a Reorder flag
- Batches sheet: item, batch number, expiry date, supplier, invoice number, quantity received, purchase rate and MRP
- Calculated for every batch: issued, balance, days to expiry, status (Expired, Near expiry, OK, Nil stock) and stock value
- Issues sheet: date, item, batch (drop-down), quantity sold or issued, and bill or patient reference, 2,000 ready rows
- Expiry summary: number of batches and stock value expired and expiring within 30, 60 and 90 days, to plan returns to suppliers
How to use it
- On the Settings sheet leave the as-on date as =TODAY() and set how many days before expiry a batch should turn amber.
- List your medicines and products on the Items sheet with the reorder level for each.
- For every purchase, add a row on the Batches sheet: item, batch number, expiry date, supplier, invoice, quantity, purchase rate and MRP. Each batch gets its own row.
- When you sell or issue stock, add a row on the Issues sheet with the item, the batch it came from and the quantity.
- Open the Batches sheet and sort or filter by Status: amber batches are near expiry, red ones have expired. Sell the oldest batch first or return it to the supplier in time.
- The Items sheet shows the total balance of each medicine and flags the ones to reorder.
Tips
- Type the item name exactly as on the Items sheet (pick it from the drop-down) or its stock will not add up.
- Expiry printed as month and year (for example 03/2027) means the end of that month: type the last day of the month, 31-03-2027.
- Expired stock must be kept apart from saleable stock and handled as your local rules require. Mark the row "Returned" or "Destroyed" in the Remarks column once it leaves your shelf, and issue the quantity out.
- Patient details are private. Keep this file on your own computer or a drive only your clinic can open, put a password on it (File › Info › Protect Workbook › Encrypt with Password) and never post it in group chats. Follow the health-data rules that apply where you work.
- This is an admin and record-keeping template. It holds no medical advice and does not replace your clinic's medical records or software.
Questions and answers
Why record batch numbers at all?
Expiry dates belong to batches, not to the medicine name. Two strips of the same medicine bought a month apart can expire a year apart. Batch-wise stock is also what you need if a supplier or regulator recalls a batch.
How is "near expiry" decided?
A batch with stock left is Near expiry when its expiry date is within the number of days set on the Settings sheet from the as-on date, and Expired when the date has passed. Batches with no stock left show Nil stock and are not coloured.
Can I use it for surgical items and consumables?
Yes. Any item with a batch and expiry date works. For items without expiry, leave the expiry date empty; they show as OK.
Does it tell me what dose to give?
No. This is a stock register only. It holds no dosage or prescribing information.

