Free Pharmacy Software for Medical Stores
Sell from the right batch, and never be surprised by an expiry. Batch-wise billing for a chemist shop, with a dashboard that tells you what is about to die while the distributor will still take it back.
Opening your shop…
The expiry dashboard
The money you are losing without knowing it
Expired stock is not a small loss, it is a total one — and by the time most shops notice, the window to send it back has closed. This is the screen that pays for the app it comes in.
₹18,400 expires in 60 days — here is the list
Stock bucketed into 30, 60 and 90 days and already expired, each bucket showing what it cost you rather than how many batches it is. A batch count is a statistic. A rupee figure is a reason to ring the distributor this afternoon.
Grouped by supplier, because that is who takes it back
A distributor accepts back what they supplied and nothing else, so an expiry list sorted by date is a list nobody can act on. Sorted by supplier it is a stack of return notes, and each group ends in a button that creates one.
A removal list in rack order
Expired stock prints as a checklist sorted by shelf, not by date — because the person holding it is walking the shop pulling strips, and a list in shelf order is walked once instead of three times.
Expired stock can never be billed
Whatever your settings say, a batch past its month cannot go on a bill. You can also refuse batches within a number of days of expiry, though most shops should leave that at zero — a strip expiring in three weeks is fine for a five-day course.
At the counter
Built for how a chemist actually sells
Loose tablets off a cut strip, a customer asking what else has the same salt, and a queue behind them. Every decision here is about the seconds that costs.
Stock lives on the batch, never on the medicine
You do not have forty Crocin. You have twelve of batch J4213 expiring in August and twenty-eight of K1180 expiring next February, bought at different rates. Every screen in this app is built on that difference, which is why it can do things a product-level POS cannot.
Oldest expiry first, automatically
Adding a medicine picks the batch expiring soonest and puts its number and expiry on the line. Ask for twenty when the oldest batch has twelve left and it splits into two lines by itself — twelve off one, eight off the next — because that is what has to print on the bill.
One box that searches brand, salt and barcode
A doctor's chit says whatever it says. Type any of the three and it matches, and every result expands to show the same-salt alternatives you have in stock with their MRPs — the question the counter is asked twenty times a day.
Prescriptions asked for at the end, not mid-sale
A bill with a Schedule H, H1 or X line cannot be completed without the patient, the doctor and their registration number — but you are not interrupted the moment the strip is scanned. Which classes to enforce is yours to set.
Loose tablets, whole strips, and the rack it is on
Stock is counted in units so a cut strip is not a problem, with a one-tap shortcut for a whole pack. Search results carry the rack number, which at a busy counter saves more time than anything else on this page.
Held bills and returns that go back to the right batch
Park a bill when someone goes back to the car for money. And a returned strip goes back to the exact batch it left on, expiry and all — so it turns up on the expiry screen rather than quietly rejoining general stock.
Behind the counter
Purchases, margin and the papers you have to keep
Purchase entry that matches the paper
Enter the distributor's invoice in packs, with the running total beside you to check against theirs before saving. Scheme goods are handled properly: ten paid and one free is eleven on the shelf at a blended cost, which is the number your margin should be measured against.
Margin off the batch that actually sold
The same medicine bought on two invoices at two rates has two margins. Averaging them hides the one you are losing money on, so cost is read off the specific batch each line came from.
A schedule register you can print
Every scheduled sale in a date range with the prescription details, printable and exportable. Bills where no prescription was captured appear with the doctor columns blank — a gap you can see rather than one the report hides.
The reports a shop actually runs on
Sales by day and month, fast and slow movers, stock value at cost and at MRP, a suggested order list grouped by supplier, GST by rate, and supplier-wise outstanding. CSV on all of them.
Udhaar, tracked per bill and per customer
Part-paid bills leave a balance against the customer, and the balance reminder goes out on WhatsApp from your own template when you decide to send it.
Send the bill as a link, on WhatsApp
The whole bill travels inside the link — batch numbers, expiry dates and all — so nothing is uploaded and it opens on a phone with no signal. Send it to the customer's own number, or show them the QR across the counter.
Bills, notes and lists on your own paper
GST bill with batch, expiry, HSN and a CGST/SGST split, on 58mm, 80mm or A4. Purchase return notes and expiry removal lists print too.
Who it is for
- Independent medical stores
- Chemist shops with one to three counters
- Clinic pharmacies and dispensaries
- Generic and Jan Aushadhi outlets
- Ayurvedic and homeopathy stores
- Surgical and consumables counters
Where the free tool stops
This app keeps your shop's own records. It is not a compliance product: the scheduled-sales register it prints is built from your own bills for your own use, it does not replace any register you are required to maintain under the Drugs and Cosmetics Rules, and it does not verify a prescription, check a registration number or decide whether a sale is lawful. That judgement belongs to your registered pharmacist. The printed bill is a simple GST bill and not a full statutory tax invoice.
Everything runs in one browser with no account, so the shop lives on one device. A second counter cannot share the same stock, and no drug dataset ships with the app — you import your own master. All three are consequences of an app that works offline and asks for no login. Everything on this page is free, and stays free.
Free pharmacy software — questions
Yes. No signup, no trial, and no limit on medicines, batches, bills or customers. Everything runs inside your browser, so there is no server for us to charge you for.
Everything a pharmacy needs that a normal POS cannot do. Because stock sits on a batch rather than on a medicine, the app knows every expiry date in the shop, bills from the strip expiring first, prints the batch number on the bill, sends returns back to the batch they came from, and reports margin against what that specific batch cost. A product-level POS knows only that you have forty of something.
Expired stock is a total loss, and most shops find out months after the distributor would still have taken it back. The dashboard shows what expires in the next 30, 60 and 90 days and what it cost you, grouped by the supplier who has to accept it, with a button that creates the return note. Checking it once a week is the whole discipline.
It records them. Mark a medicine's schedule and a bill containing it cannot be completed without the patient name, the doctor's name and their registration number, with an optional photo of the prescription. Those sales can then be printed as a date-ranged register. Read the next answer before you rely on it.
No, and it does not claim to be. It is a record built from your own bills for your own use, and it says so on the printed page. It does not replace any register you are required to maintain under the Drugs and Cosmetics Rules, it does not verify a prescription or a registration number, and it does not decide whether a sale is lawful. That judgement stays with your registered pharmacist. Check the output against what your drug inspector expects before you depend on it.
It is a simple GST bill: batch number and expiry on every line, HSN and tax rate, a CGST and SGST split, your GSTIN and drug licence in the header, and the amount in words. It does not produce a full statutory tax invoice — there is no place of supply, no HSN-wise summary table, no reverse-charge line and no IGST for inter-state supply.
No. There is a CSV importer that takes a pasted spreadsheet block as readily as a file, and it understands the column names distributor price lists and other billing software actually use — salt, generic, content, packing, MFR and so on. We deliberately do not ship a drug dataset: an error in a price list is an annoyance, and an error in a drug list is not.
Yes. Every bill has a Share link button, straight after the sale and again later from the customer's ledger. The whole bill — including batch numbers and expiry dates — is compressed into the link itself, so nothing is uploaded and it opens on a phone with no signal. It goes to the customer's own number when you have it, and there is a QR of the link to show across the counter.
Only to open the page the first time. After that the counter works with the connection down, which is the point. Google Sheet sync and WhatsApp messages are the only parts that need one.
Not in the free app. Everything lives in one browser's storage with no account, so two machines cannot share a shelf — and with batch-level stock, two machines disagreeing about a batch is worse than useless. Keeping several devices in step needs a server between them, which is the one thing an app that works offline and asks for no login cannot do.
It never leaves the device unless you send it. Patient names, doctor details and any prescription photos are stored in that browser only. Google Sheet sync is off until you set it up, and if you turn it on, note that the register tab carries patient and doctor names — the app says so where you switch it on.