Close the books in 2 days, not 2 weeks — POS, inventory and multi-branch on one ledger.Read the case study →
industries · pharmacy

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.

why generic software fails a pharmacy

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
how the books post

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.

One dispensed sale: 30 units at $6.50, cost $4.00 from the earliest-expiry batchDEBITCREDITCash (counter 2)195.00Sales — medicines195.00Cost of sales120.00Inventory — batch B-2201 (FEFO)120.00TOTAL DR315TOTAL CR315
The dispensing entry. Revenue and the FEFO cost land together, so gross margin per sale is right the moment the receipt prints.
from shelf to statement

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.

Receive batchqty, cost, expiry dateDispense (FEFO)earliest expiry firstNear-expiry list60-day windowReturn or write offposts to the ledger
Receive, dispense, flag, return or write off — four moves, all posted, all traceable by batch.
set-up

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)
built in

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.

compared

Nonari vs generic accounting software for a pharmacy

NonariGeneric accounting software
Batch number and expiry per unit
FEFO dispensing with cost from the actual batch
Near-expiry report and posted write-offsManual journal
Counters as cashier shifts with cash countsSeparate POS
Insurance panels as receivables with statementsPartial
Per-branch stock and P&L for a chainAdd-on or extra file
Full double-entry ledger, bank feeds, reports
Users includedUnlimitedPer-seat fees
pricing

Two plans. Every feature on both.

Basic
$29/month

One location, one company

Pro
$70/month

Up to 3 locations, +$32 each after

Unlimited users on both. 15-day free trial, no card. See the full pricing page.

questions

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.

get started

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.