Pharmacy accounting software that knows what a batch is.
Generic accounting software counts boxes. A pharmacy needs to know which batch is on the shelf, when it expires, what it cost, and which counter sold it. Nonari tracks every unit by batch and expiry, dispenses first-expiry-first-out, posts the write-off when stock expires, and keeps the full double-entry ledger underneath — for one shop or a chain.
Batch and expiry on every unit
Each receipt records batch number, expiry and unit cost as its own cost layer. Stock on hand is a list of batches, not one number.
FEFO, not FIFO
Sales consume the soonest-to-expire batch first, automatically, so fresh stock never hides behind old stock on the shelf.
Expiry costs you can see
A near-expiry report per category, one-click supplier returns, and write-offs that post to an expense account with the batch on the audit trail.
Four things a pharmacy ledger must do that QuickBooks and Xero do not.
A pharmacy is high-volume, thin-margin retail with a regulator watching the shelf. Three thousand SKUs, each arriving in batches with different costs and expiry dates, sold across two or three counters by staff who change every shift, with a slice of the customers billed to an insurance panel instead of paying at the till. General-purpose accounting software models none of that: it has one quantity per item, no expiry, no counters, and a customer list that thinks a panel is a person.
The result is the pharmacy owner running two systems — a dispensing or POS tool that knows batches, and an accounting tool that receives a summary at month end — and a bookkeeper who reconciles the two by hand. Cost of sales is a guess, expired stock disappears without an entry, and the panel receivable is a spreadsheet.
- Batch-level stock: quantity, unit cost and expiry per batch, with the batch printed on the receipt
- FEFO dispensing so the cost of sales comes from the batch that actually left the shelf
- Near-expiry reporting and expiry write-offs that post to the ledger, not to a notebook
- Insurance panels and credit customers as receivables with statements, ageing and collections
- Counters as cashier shifts with a counted float and a variance report per person
The three entries every pharmacy makes, done by the system.
Receiving a batch: 100 units of batch B-2201, expiry March 2027, at $4.00 — the bill posts inventory up by $400 and creates a cost layer tagged with that batch. Dispensing: a customer buys 30 units at $6.50 at counter 2. Nonari records the sale, then takes the cost from the earliest-expiring batch that has stock (FEFO) and moves it from inventory to cost of sales. Two entries, one receipt, no month-end reconstruction.
Expiry: ten units of the batch pass their date unsold. The near-expiry report flagged them sixty days earlier; if the supplier takes returns, a return posts stock out and a credit note in. If not, the write-off posts $40 to an expired-stock expense with the batch number on the entry, so the auditor and the owner both see exactly what was lost and why.
The lifecycle of a batch, and where each step hits the ledger.
The same batch record carries the unit from the supplier bill to the receipt or the write-off. Nothing is re-keyed, and every movement leaves an audit-log line with who, when and which counter.
Live in an afternoon: the four imports.
Most pharmacies switch in a day because the data already exists in the old system or the supplier invoices. Products import from CSV with batch, expiry, opening quantity and unit cost; the import is atomic per product and per branch, so a bad row does not leave half a shelf loaded. Suppliers and panel customers import with opening balances. Counters become cashier shifts. Then the first real bill is received and the first real sale rung up.
- Products with batch, expiry, quantity and cost (CSV)
- Suppliers with open bills; panels and credit customers with open invoices
- Opening balances loaded until the trial balance foots to the cent
- Counters set up as cashier shifts; staff invited (unlimited users)
What the pharmacy edition includes.
Per-batch cost layers
Each batch is a cost layer with its own batch number, expiry and unit cost. Stock reports show the batches behind every quantity.
FEFO consumption
Sales consume the soonest-to-expire batch first. Configurable per branch; override per line when a customer needs a specific batch.
Expiry write-offs and supplier returns
Auto-flag expired batches. One click writes the loss to the configured expense account or posts a return to the supplier.
Multi-counter POS with cash counts
Every counter opens a shift with a counted float and closes with a denomination count. Variance is reported per person and per shift.
Panel and insurance billing
Panel customers are billed via receivables with discount handling and monthly statements. Claims tracked separately from cash sales.
Pharmacy chains
Each branch keeps its own stock and its own P&L. Move near-expiry stock between branches with a posted transfer instead of waste.
Nonari vs generic accounting software for a pharmacy
Two plans. Every feature on both.
One location, one company
Up to 3 locations, +$32 each after
Unlimited users on both. 15-day free trial, no card. See the full pricing page.
Frequently asked.
What is the best accounting software for a pharmacy?
One where the stock ledger understands batches and expiry and the POS posts straight into the books. Check four things before you sign: batch and expiry per unit, first-expiry-first-out dispensing, expiry write-offs that post to an expense account, and counters with cash counts. Nonari does all four on a full double-entry ledger; general-purpose tools need a separate dispensing system and a monthly reconciliation.
Can QuickBooks or Xero track medicine expiry dates?
Not natively. Both track one quantity per item with no batch or expiry field; expiry tracking means a third-party inventory app plus an integration, and the write-off is a manual journal. Nonari records batch, expiry and cost on every receipt and dispenses FEFO without an add-on.
How do I account for expired medicines?
Remove the units from inventory at their cost and charge an expense: debit expired-stock expense, credit inventory, with the batch number on the entry. If the supplier accepts returns, post a supplier return instead so a credit note reduces what you owe. Nonari does either in one click from the near-expiry report.
Does it work for a pharmacy chain with several branches?
Yes. Each branch has its own stock, cashier shifts and profit and loss, consolidated at the company level. Near-expiry stock can be transferred between branches with a posted transfer. Basic covers one location; Pro covers up to three, with extra branches added on.
How much does pharmacy accounting software cost?
Nonari is $29 a month for one location and $70 a month for up to three, every feature on both plans, unlimited users, and a 15-day free trial with no card. Most alternatives price per user and charge separately for a POS or an inventory add-on.
Do you support a controlled-substances register?
Every sale and dispense is captured in the audit log with the batch, so the record exists. A register formatted to one specific regulator’s template is not built in — tell us your jurisdiction and we will tell you straight whether the audit log gives your inspector what they ask for.
Load your batches and watch the first sale post.
15-day free trial, no card. Import products with batch and expiry, ring one sale, and see revenue and FEFO cost land in the ledger together.