Industry

Pharmacy inventory management

Published · 8 min read

A pharmacy does not get to run out of a chronic med on a Tuesday, and it does not get to dispense a bottle that expired last month. Inventory is patient care, cash on the shelf, and a record you may have to defend. Independent pharmacies, clinic pharmacies, compounding labs and veterinary pharmacies all feel the same squeeze: thousands of SKUs, dated stock, thin margins, and a team that cannot stop the counter to wrestle a spreadsheet.

This is not a pitch to replace your pharmacy management system. Dispensing, claims and e-prescribing belong in the software built for that. Simple Inventory Management is the stock layer next to it: live counts, lots, expiry, par levels, receiving and a search you can actually use when a recall lands.

Package Pal waving from the counter of a community pharmacy, with shelves of amber bottles behind.
Package Pal, reporting from the counter. The work is on the shelves.

What a pharmacy actually needs from inventory software

Pharmacy inventory is stricter than most retail stock. Every product has an expiry. Many have a lot or batch number you will need the day a manufacturer issues a recall. Fast movers need a par level so the wholesaler order is not a guessing game. High-value and tightly controlled items need a trail of who changed the count and when. Short-dated stock quietly turns into write-offs if nobody is rotating first-expiry-first.

The practical list looks like this:

  • Perpetual counts that update when stock is received, dispensed, transferred or written off.
  • Lot and batch tracking so a recall is a lookup, not a shelf-by-shelf hunt.
  • Expiry dates on each stock line, with FEFO rotation instead of “whatever is in front.”
  • Par levels and reorder points based on how fast you actually use the item.
  • Receiving that captures the details while the tote is still open.
  • Cycle counts and frozen snapshots so the record and the shelf stay honest.
  • Locations for the fridge, the vault, the front end, the back room and a second store.
  • Scanning from a phone or a barcode scanner, because typing NDC codes is how errors start.

Clinics and dental offices hit a similar set of problems with consumables. If that is closer to your setup, see inventory for dental and medical practices.

Put lot and expiry on the stock line, not in a notebook

A lot number ties a group of bottles back to a production run. When a supplier recalls lot “L-22841,” the only question that matters is: do we have any, and where? Store the lot as a unit-level custom field on the stock line. Hold three lots of the same SKU as three lines, each with its own lot and expiry, instead of inventing three items. NDC, manufacturer, storage condition (room temp, refrigerate, light-protected) and bin location belong in the same place: fields you can search and show as columns.

Item Stock Lot # Expiry Bin
Amoxicillin 500mg48L-228412027-03-14A-04
Amoxicillin 500mg36L-330122026-11-02A-04
Insulin glargine12L-901152026-10-18FRIDGE
Saline 0.9% 500ml96L-440082027-01-09A-07

Two lots of the same SKU, each with its own expiry. The blue columns are custom fields you add.

Catalog facts (NDC, preferred wholesaler SKU) sit on the item. Lot, expiry and received date sit on the unit. That split is how one SKU can hold several dated lots. Setup is in tracking lot, expiry and serial numbers.

Rotate first-expiry-first, every time

Pharmacies live on FEFO: the pack that expires soonest gets dispensed first, even if a later delivery arrived yesterday. FIFO (oldest receipt first) is a decent default for undated goods. Dated meds need the expiry date to win. Capture expiry at receiving in a sortable format like YYYY-MM-DD, show it as a column, and put the short-dated stock where techs actually pick. More on the methods in FIFO vs. LIFO vs. FEFO.

Package Pal holding an amber prescription bottle in front of a shelf of dated stock, caps marked with colored dots.
Short-dated stock goes to the front. Color-dot the caps if it helps the team see it at a glance.

Short-dated stock is also working capital walking out the door. A weekly look at what expires in the next 30, 60 and 90 days is cheaper than a surprise write-off, and it is the kind of question you can ask the built-in AI instead of building another spreadsheet.

Set par levels so low stock flags itself

A par level is the amount you want on hand before the next wholesaler drop. You do not need to know you have exactly 14 bottles of lisinopril 10 mg. You need to know you are under the 20 that gets you through lead time plus a buffer. In Simple Inventory that is a reorder point plus warning and critical levels, so items below par land on the order list instead of living in someone’s head.

The inventory list in Simple Inventory Management, with items at or below their warning and critical levels shown in yellow and red.
Warning and critical levels turn the count yellow, then red. Par problems flag themselves before anyone has to notice the last box.

Right-size those numbers from how the item actually moves, then revisit them when a shortage, a new prescriber or a seasonal spike (flu, allergy, back-to-school ADHD fills) changes the picture. Pair par with a modest safety stock on the few drugs that hurt patients when they stock out. Do not pad every SKU: shelf space and cash are both finite.

When something crosses the line, the alert should show up where the team already looks. Post low-stock alerts into Microsoft Teams so the pharmacist does not have to open a dashboard to learn that amoxicillin just went critical.

Turn what is below par into a purchase order grouped by supplier. Keep wholesaler records (contact, lead time, preferred items) so the order is paperwork, not archaeology. See from low-stock alert to purchase order.

Receive the tote like the count depends on it (it does)

Most inventory errors start at receiving: a short shipment gets signed for, a lot never gets recorded, a refrigerated item sits on the counter. Check the delivery against the purchase order, count what is actually in the tote, capture lot and expiry on the stock line, then mark the order complete so on-order quantity becomes in-stock. The five-minute version is in receiving stock the right way.

Package Pal standing at a pharmacy receiving table next to an open tote of bottles and boxes and a packing-slip clipboard.
Lot and expiry get captured while the tote is still open. After that, you are guessing.

If the box already has a UPC or EAN, store it and scan it. If you want a label that opens the item on a phone with no app to install, print a QR code for the bin or the SKU. Pharmacies can use both: barcodes for manufacturer codes already on the pack, QR for the shelf tag the tech actually hits between fills. A comparison is in barcodes vs QR codes.

An inventory item in the app showing a Quick Access QR code plus a history of stock changes.
Every item gets a QR. Scan it from a phone, see the count, update on the spot. No app to install.

Treat the fridge, the vault and the second store as locations

“We have 40” is not a useful number if 12 are in the fridge, 8 are in the controlled-substance cabinet, 15 are on the fast-mover wall and 5 are at the other store. Give each physical place its own location so transfers are a recorded move, not a text message. Multi-site habits are covered in multi-location tracking and keeping counts honest across locations.

Package Pal standing in a pharmacy stockroom split into three zones: a fridge, a locked cabinet, and a fast-mover wall of bottles.
Fridge, vault, fast-mover wall. Three locations, not one number that pretends they are the same shelf.

Put a QR on the bin, not just the item. Scan the insulin fridge, see what should be there, adjust on the spot. Labelling the room is the afternoon project in label your inventory with QR codes.

Package Pal holding a phone up to a QR sticker on a pharmacy refrigerator filled with vials.
QR on the fridge door. The tech scans between fills instead of hunting a spreadsheet.

Count on a schedule, freeze the record

Perpetual records drift. A miscount, a return processed wrong, a wasted reconstitution that never got logged: the system and the shelf disagree, and you only find out at the worst time. Cycle count the A-items (high value, high risk, fast movers) often, and the long tail less often. ABC ranking is the filter: focus on the 20% of stock that matters.

When you count, freeze it. Snapshots capture exactly what was on hand at a moment in time, which makes a monthly reconciliation, a biennial inventory, or a discrepancy investigation a comparison instead of a memory test. The process is in stock reconciliation and cycle counting vs. full physical counts.

Tightly controlled items deserve a tighter trail. Switch those SKUs to unit-level tracking so each pack or device is its own record with a status and a logged history, not just a quantity. That is how you answer “who had it, and when?” without reconstructing the week from memory. See an audit trail for every unit.

Simple Inventory keeps a dated, searchable record of counts, lots, expiry and stock moves. It is not a DEA form system, a PDMP, or a certified controlled-substance vault. Use it as the operational inventory layer, and follow your own board, DEA and state rules for what you must retain and how.

Compounding: treat the formula as a recipe

Compounding pharmacies do not just count finished bottles. They count APIs, bases, flavors and packaging, then combine them. An assembly is a recipe: list the ingredients and quantities, see how many you can make from live stock, and consume the parts when you build. Lot and expiry still live on the ingredient lines, so a recalled bulk powder is still a search.

Package Pal at a compounding bench with a mortar and pestle and amber bottles.
The formula is a recipe. Track the ingredients, then consume them when you build.

The same idea covers clinic kits, immunization trays and DME accessories: a named bundle whose parts you already track, instead of a second count that will drift.

Ask before you order, not after you stock out

The built-in MCP server lets an AI assistant such as Claude or Grok read live stock (scoped to the company you authorize) and take the boring actions: check what is below par, list what expires this month, set a lot number on a stock line, draft a reorder list. No API keys pasted into a chat. Setup is in connecting AI.

Useful first prompts: “What is below par for the pharmacy this morning?” “Which lots expire in the next 60 days, and where are they?” “Do we have any of lot L-22841?”

Bring the catalog with you, not one SKU at a time

Independent pharmacies often already have a spreadsheet or a wholesaler export. A bulk CSV import with a preview is how you get live in an afternoon instead of retyping 2,000 items. Map names, costs, on-hand quantities, reorder points and the custom fields you actually use (NDC, lot, expiry). Details in the fastest way off spreadsheets.

From there, a one-click valuation and low-stock report tells you what the shelves are worth and what to order, and an export to QuickBooks or Xero keeps the books from becoming a second inventory.

Who this is for (and who should keep looking)

Simple Inventory fits a community pharmacy, a clinic dispensary, a compounding lab, a veterinary pharmacy, or the supply room that sits next to a dental or medical practice. It also fits the front end: OTCs, durable medical equipment, testers and bags, which many PMS inventory modules treat as an afterthought.

It is not PioneerRx, QS/1 or a hospital pharmacy information system. It will not submit claims, send an e-prescription, file a DEA Form 222, or run DSCSA serialization. If you need those, keep the system that does them. Use Simple Inventory where those tools are weak: dated lots, par levels the team will actually maintain, phone scanning, multi-location counts, and an AI you can ask about stock in plain language.

One plan, unlimited items and teammates, QR on every bin, custom fields for the details pharmacies cannot skip. Currently free for a limited time.

Staff turnover is a pharmacy constant. Invite the team, turn on SSO if you already have Okta or Microsoft Entra, and revoke access when a tech leaves instead of sharing a password on a sticky note.

Set up your pharmacy stock