A pharmacy is not a general retail shop with different products on the shelves. It is a regulated business where the same product, bought from the same supplier, can carry different batch numbers and different expiry dates — and where selling the wrong one is a safety issue before it is a commercial one.
Most POS systems in Kenya are built for general retail. They track a product and a quantity. A pharmacy needs to track a product, a batch, an expiry date, and a quantity — and to know which of those went to which customer.
This guide covers what pharmacy-specific POS features actually do, why they matter for compliance, and how to set them up.
Why general retail POS fails in a pharmacy
Consider a simple case. You stock a common antibiotic. You have 40 units: 25 from a batch expiring in November 2026, and 15 from a batch expiring in March 2027.
On a general retail POS, you have "40 units in stock." That is all it knows. When you sell one, it becomes 39. The system cannot tell you which batch left the shelf, cannot warn you that 25 units are approaching expiry, and cannot help you if that batch is later recalled.
A pharmacy POS treats those as two separate stock records under one product. It knows you have 25 of batch A and 15 of batch B, it defaults to selling the earlier-expiring batch first, it flags batch A as you approach November, and if a recall lands it tells you exactly which sales involved batch A.
That difference is the entire argument for pharmacy-specific software.
Batch tracking: what it actually involves
Batch tracking means every unit of stock carries three attributes beyond the product itself.
Batch or lot number — as printed on the manufacturer's packaging. This is the identifier a recall notice will reference.
Expiry date — per batch, not per product. Two deliveries of the same item weeks apart routinely carry different expiry dates.
Supplier and receipt date — which distributor supplied this batch and when it arrived. This matters for returns and for tracing a problem back to its source.
When stock arrives, you record it against a batch rather than just incrementing a total. When you sell, the system deducts from a specific batch. Your stock report shows quantity per batch, not one aggregate number.
FEFO: first expired, first out
Ordinary retail uses FIFO — first in, first out. Pharmacy uses FEFO — first expired, first out. These are not always the same. A batch received later can expire earlier, and in that case it should be sold first.
A pharmacy POS should default to FEFO automatically, suggesting the earliest-expiring batch at the point of sale so the dispenser does not have to check dates manually during a queue. This single behaviour eliminates most avoidable expiry write-offs.
Expiry management: turning a write-off into a decision
Expired stock is money you have already spent, sitting on a shelf, becoming worthless on a known date. The cost is entirely avoidable — it just requires seeing it early enough to act.
A well-configured pharmacy POS gives you tiered visibility:
| Window | What you should do |
|---|---|
| 180 days out | Review reorder levels — stop over-ordering this line |
| 90 days out | Prioritise the batch in dispensing; consider a promotion |
| 60 days out | Check supplier return terms; many distributors accept returns at this stage |
| 30 days out | Discount aggressively or arrange the return |
| Expired | Quarantine, remove from sellable stock, record the disposal |
The critical point is the 60-day mark. Many Kenyan distributors will accept returns of unexpired stock within a defined window, but that window closes. A system that surfaces expiring batches at 60 days rather than 5 days converts a write-off into a credit note.
Blocking expired sales. A pharmacy POS should refuse to dispense from an expired batch outright — not warn, refuse. This is a safety control, and it should not be overridable by a cashier.
Regulatory record-keeping in Kenya
Pharmacies in Kenya operate under the Pharmacy and Poisons Board (PPB), and separately under KRA for tax. Your POS supports both, but in different ways.
KRA eTIMS. Like every other business, a pharmacy must generate compliant electronic tax invoices for every sale, with the KRA PIN, eTIMS invoice number, verification QR code, and VAT breakdown. This should happen automatically at the point of sale. Our eTIMS guide covers the setup in full.
Dispensing records. For prescription medicines, you need a durable record of what was dispensed, in what quantity, from which batch, against whose prescription, and by which staff member. A POS that captures the dispenser's identity and the batch on every sale produces this as a by-product of normal trading rather than as a separate register to maintain.
Controlled substances. Products under stricter control require tighter handling: restricted access to who can dispense them, mandatory prescriber details, and a complete, immutable audit trail. Configure these as a separate product category with elevated permissions.
Recall response. If the PPB or a manufacturer issues a recall on a specific batch, you need to answer two questions quickly: how much of that batch do I still hold, and who did I sell it to? Batch tracking plus customer records answers both in minutes. Without it, you are checking paper records.
A practical note on regulatory detail: PPB requirements are updated periodically, and the specifics that apply to your premises depend on your licence class. Treat this section as an overview of what your system should be capable of, and confirm the current record-keeping requirements with the PPB directly for your licence.
Other pharmacy-specific POS requirements
Generic and brand substitution. Customers frequently ask for a cheaper generic equivalent. Your POS should let a dispenser find alternatives for a given active ingredient without leaving the sale.
Part-pack dispensing. Selling 10 tablets from a pack of 30 is routine. The system must handle fractional deduction from a pack while keeping the batch link intact.
Multiple pack sizes. The same medicine often comes in several pack sizes at different prices. These should sit under one product with distinct sellable units, not as three unrelated products.
Insurance and scheme sales. Where you dispense against insurance or a corporate scheme, the sale needs to record the scheme, the member, and the split between what the scheme pays and what the patient pays.
Customer medication history. Being able to see what a returning patient was dispensed previously supports both continuity of care and repeat-prescription handling.
Setting up batch tracking in sell.ke
If you are configuring a pharmacy on sell.ke, the sequence is:
- Enable batch tracking per product. Turn it on for medicines. Leave it off for general merchandise like toiletries — batch-tracking shampoo creates work with no benefit.
- Record batches at goods receipt. When a delivery arrives, enter the batch number and expiry date alongside the quantity. This is the only step that requires discipline, and it is the step everything else depends on. Enter it wrong and every downstream report is wrong.
- Set expiry alert thresholds. Configure the 90/60/30-day alerts so they reach whoever does your ordering.
- Set FEFO as the dispensing default so the earliest-expiring batch is suggested automatically at the counter.
- Configure staff roles. Dispensers sell. Only a pharmacist or manager should adjust stock, override prices, or process returns.
- Connect KRA eTIMS under Settings → Tax so every dispensing generates a compliant invoice.
- Connect M-Pesa so payment confirmation is automatic rather than a cashier checking a phone.
The sell.ke pharmacy POS page covers the feature set in more detail, and the support team will walk through batch configuration on WhatsApp during setup.
Frequently asked questions
Does a small chemist really need batch tracking? If you dispense medicines, yes. The cost of not having it is one recall you cannot respond to, or a few thousand shillings of expired stock per month that you notice too late to return. Both are more expensive than the software.
Can I track batches in a spreadsheet instead? You can, and many pharmacies do. It works until volume grows or someone is off sick. The failure mode is that the spreadsheet stops matching the shelf, and once that happens the data is worse than useless because you still trust it.
What happens to expiry alerts if my internet is down? sell.ke works offline for dispensing and stock deduction, and syncs when the connection returns. Alerts are generated from data already on the device, so a network outage does not blind you.
Can I stop staff selling expired stock? Yes. Expired batches should be blocked from sale at the system level rather than left to the dispenser to catch. Configure this as a hard block, not a warning.
How do I handle stock I am returning to a distributor? Record it as a return against the batch so it leaves sellable stock but remains traceable. That keeps your stock count accurate and gives you the record if the credit note is disputed.
Setting up a pharmacy on sell.ke takes about an afternoon including batch configuration. Start free →