The QR codes on your medicine packs: what Indian pharmacies can actually do with them
Schedule H2 (G.S.R. 823(E)) put batch, expiry, and manufacturer data in a QR code on the top 300 drug brands. Three years on, most pharmacy software ignores it. Here's what scanning it should give you.
ShelfLifePro Editorial Team
Inventory management insights for retail and pharmacy
the QR code your software has been ignoring for three years
Pick up a strip of Dolo 650, Augmentin, or Pan-D from your top shelf and look at the carton. There's a QR code on it. It has been there since the August 2023 batches started arriving from your distributor, and it contains — by law — the product's unique code, the generic name, the brand name, the manufacturer's name and address, the batch number, the manufacturing date, the expiry date, and the manufacturing licence number. Everything you currently type into your billing software by hand, plus a few things you don't bother recording at all, encoded in a square centimetre of print.
Now ask what your pharmacy software does when you point a scanner at it. In most shops, the honest answer is: nothing useful. The scanner beeps, the software either rejects the code or dumps a string of gibberish into the item-search box, and the person at the counter goes back to squinting at the carton and typing the batch number manually. Nearly three years into the mandate, the most structured piece of data in Indian retail pharmacy is being treated as decoration.
That's the gap this post is about. Not the compliance obligation — the QR code is the manufacturer's obligation, not yours — but the operational opportunity that almost every pharmacy in the country is leaving on the counter.
Not sure how much you're losing to expiry?
Run a free inventory waste audit, find your bleeding SKUs in 60 seconds. No sign-up required.
Run free auditwhat the mandate actually says
The legal instrument is G.S.R. 823(E), the amendment to the Drugs Rules, 1945 that created Schedule H2. It requires the manufacturers of the top 300 drug brands — selected by sales value, so the list reads like your fast-moving rack: the big analgesics, the big antibiotics, the big PPIs and antidiabetics — to print a barcode or QR code on the primary packaging (or, where the primary pack is too small, on the secondary packaging) that stores the following, machine-readable:
- a unique product identification code
- the proper and generic name of the drug
- the brand name
- the name and address of the manufacturer
- the batch number
- the date of manufacturing
- the date of expiry
- the manufacturing licence number
The requirement applies to batches manufactured on or after 1 August 2023. Stock manufactured before that date was allowed to flow through without the code, which is why for the first year or so the shelves were a mix. By mid-2026, almost everything you receive from the top 300 brands carries it. (If you've gone searching for this under "Rule 39A" or "barcode rule for medicines," it's the same thing — Schedule H2 under G.S.R. 823(E) is the citation that matters.)
Two things worth being precise about, because the trade WhatsApp groups are not.
First, the mandate is on the manufacturer. There is no rule requiring a pharmacy to scan the code, verify it, or do anything with it. Nobody from the drugs control department is going to ask why your software doesn't read QR codes. This is purely a question of whether you want the free data.
Second, the scope is set to grow — but hasn't yet. In October 2025 the government published draft G.S.R. 757(E), which proposes extending Schedule H2 beyond the top 300 brands to cover vaccines, antimicrobials, anticancer drugs, and narcotic and psychotropic substances. As of June 2026 this is a draft amendment — proposed, open to the usual consultation process, not in force. But the direction of travel is unambiguous: the QR code is spreading across the categories where batch and expiry tracking matter most, not retreating. If the draft becomes law in anything like its current form, the share of your purchase bill arriving with machine-readable batch data goes from "the fast movers" to "most of the serious stock in the shop."
what the code should be doing for you
Think about what actually happens when a distributor delivery lands at your counter. Three cartons, forty or sixty line items, an invoice that may or may not have batch numbers printed legibly, and a staff member who has to get it all into the system before the evening rush. The standard workflow is: match items against the invoice, type or select the item code, type the batch number, type the expiry date, type the quantity, move to the next line. Repeat sixty times.
Every one of those typed batch numbers and expiry dates is a small bet that the person typing read the carton correctly, that the lighting was good, that B8 didn't become 88, that 11/27 didn't become 11/26 because the previous batch was 11/26 and the finger was on autopilot. The bets mostly pay off. The ones that don't are invisible until they aren't — until a Schedule H1 register entry doesn't match the physical strip, or a recall notice names a batch your system says you never stocked, or a customer brings back an expired strip your software swore was eleven months from expiry.
Here is what the same goods-receipt looks like when the software actually reads Schedule H2 codes. Scan the QR on the carton. The product identifies itself — not by your fuzzy item-name search, but by its own code. The batch number arrives exactly as the manufacturer printed it. The expiry date arrives as data, not as a squint-and-type exercise. Manufacturing date and licence number come along for free, which your purchase register has never had before and which is suddenly very useful when a recall or a not-of-standard-quality alert circulates. The staff member confirms quantity and rate, and moves to the next line. The typing — and with it, the entire category of transcription error — is gone for every Schedule H2 item in the delivery. We've written about why killing expiry-date typing matters more than it sounds; the short version is that batch and expiry are exactly the fields where a typo costs the most and gets caught the latest.
The downstream effects are bigger than the data-entry time saved.
Your batch records start matching your shelves. Most pharmacies' batch-wise stock is a polite fiction — accurate at the moment of entry, drifting from then on, reconciled (if ever) at annual stock-taking. When batch and expiry are captured by scan at goods-in, the starting point is correct, which means expiry reports are correct, which means the near-expiry rack actually contains the near-expiry stock. The money this saves is not hypothetical; we've gone through where expiry losses actually hide in a pharmacy, and almost all of them trace back to expiry data that was wrong or absent at the point of receipt.
Recalls and NSQ alerts become a search, not an archaeology project. When the monthly drug alert list names a batch, the question "do we have it, did we ever have it, did we sell it" should take thirty seconds. With typed batch data of uneven quality, it takes an afternoon and ends in a shrug. With scanned batch data, your purchase records carry the manufacturer's own batch identifiers, byte for byte.
Schedule H and H1 documentation gets a spine. The H1 register demands batch-level detail per sale. If the batch data entered your system through a scanner instead of a tired thumb, the register entries inherit that accuracy. The inspector-facing difference between "our records say" and "our records match the strip in your hand" is considerable.
Returns to the distributor stop being arguments. Expiry returns are negotiated against the distributor's records of what they sold you. When your claim lists batches that provably entered your system at goods-in — same batch numbers the manufacturer printed — the conversation is shorter. Anyone who has had a credit note held up for a quarter over a disputed batch number knows what that's worth.
why your current software probably doesn't do this
The Schedule H2 QR is not a GS1-standard DataMatrix with neatly defined Application Identifiers, the way a US or EU pharma pack is. The notification specifies what data must be in the code, not a single rigid encoding, so manufacturers have implemented it in a handful of formats — some as structured GS1 codes, some as URLs pointing to the data, some as delimited text. A scanner will read all of them; the question is whether the software behind the scanner knows how to parse what it gets.
Most Indian pharmacy billing software was built around a different scanning model entirely: the 1D EAN barcode used for price lookup. Point, beep, item appears on the bill. That pipeline has no concept of a scan that carries batch and expiry inside it, so when a 2D code arrives, the software either treats the whole payload as a (failed) item-code lookup or ignores it. The vendors have had since August 2023 to fix this. Some have. Many have shipped a "QR scan" feature that reads the code and then asks you to type the batch number anyway, which is a special kind of progress.
The capability to demand from your software — or from your next software — is specific: scan a Schedule H2 QR at goods receipt, and have the product, batch, expiry, and manufacturing details land in the purchase entry as data, with zero retyping. That's the whole test. If a demo can't do it with a strip of something from the top 300 pulled off your own shelf, the feature doesn't exist, whatever the brochure says.
And while you're at it, the same standard should apply to the invoice itself. A growing number of distributors can send their invoice as a CSV or Excel file with batch and expiry columns; software that ingests that file directly removes the typing for everything in the delivery, Schedule H2 or not. Scan-based capture and file-based capture are the two halves of the same idea: batch and expiry should enter your system the way the supply chain already recorded them, not via keyboard.
where ShelfLifePro fits
This is the part of the workflow ShelfLifePro's GS1 and 2D barcode scanning was built for. Point a scanner — or a phone camera — at the code on the pack, and ShelfLifePro parses the payload, whatever flavour the manufacturer used: GS1 AIs ((01) for the product code, (10) for batch, (17) for expiry) or the looser Schedule H2 encodings. Product, batch, and expiry land in the goods-receipt entry as data. The counter staff confirm quantity; nobody types a date.
For the lines that don't carry a usable code — and in an Indian pharmacy there will be plenty for a while yet — supplier-file receiving covers the other flank: your distributor's CSV invoice goes in, batch and expiry come out, and the system learns each distributor's column layouts and item-code quirks so the second file from the same supplier maps itself.
The result is the thing the whole post has been circling: batch records that match the physical stock, maintained as a by-product of receiving rather than as a separate clerical project. Expiry reports you can act on, H1 registers that survive scrutiny, recall searches that take seconds, return claims backed by receipt-time data. The manufacturers were made to print the data three years ago. The only remaining question is whether your software is willing to read it.
ShelfLifePro reads the QR codes already on your medicine packs — batch, expiry, and product details captured by scan at goods receipt, with distributor CSV import for everything else. Batch records that match your shelves, without the typing.
ShelfLifePro Editorial Team
The ShelfLifePro editorial team covers inventory management, expiry tracking, and waste reduction for pharmacies, supermarkets, and retail businesses worldwide.
See what batch-level tracking actually looks like
ShelfLifePro tracks expiry by batch, automates FEFO rotation, and sends markdown alerts before stock expires. 14-day free trial, no credit card required.
Get weekly expiry tips
One short email every Tuesday. FEFO tactics, markdown math, and stories from Indian retailers. No spam.
No spam. Unsubscribe in one click. Email only, no WhatsApp spam.
Get weekly expiry tips on WhatsApp
One short voice + text tip every Tuesday morning. Indian retail wins, Tally hacks, monsoon stock plays, straight to your phone.