Methodology

How every figure on the dashboard is built.

Last updated: July 2026

The short version

Every figure comes from a named source, on a stated refresh cycle, and is reconciled against those sources before it is shown. Where it cannot be, we refuse the figure rather than guess at it.

Where a number cannot be stood up, the dashboard withholds it and says why on the figure itself. A blank with a reason is more use to a dispensary than a confident wrong number, so that is the trade we always make.

1. Where the numbers come from

There are three kinds of input: what the market charges, what the Drug Tariff reimburses, and what a product actually is. Each has its own source and its own refresh cycle.

SourceWhat it gives usHow often it refreshes
PSUKPrice and stock, pack by pack, as quoted to a dispensing-practice accountEvery working day, with the most-ordered lines re-read through the day
AAHPrice and stock, pack by pack, as quoted to a dispensing-practice accountEvery working day, with the most-ordered lines re-read through the day
Alliance HealthcarePrice and stock, pack by pack, as quoted to a dispensing-practice accountEvery working day, with the most-ordered lines re-read through the day
Clarity PharmaPrice and stock, pack by pack, as quoted to a dispensing-practice accountEvery working day, re-read again through the day
B&SPrice per pack, taken from a supplied price list rather than a live readWhen a new list is issued. The list date is disclosed on the price cell
Drug Tariff Part VIIIAThe reimbursement price for a dispensed packMonthly edition, published by the NHS Business Services Authority
Drug Tariff Part IXBasic prices for appliances and dressingsMonthly edition
Price concessionsThe reimbursement price where a concession is in force for the monthTracked as Community Pharmacy England publishes and revises them through the month
dm+dProduct identity: what a pack actually is, in the NHS dictionary of medicines and devicesEach release, taken from NHS TRUD
Manufacturer scheme ratesThe published national rebate that turns a list price into a net buy priceChecked daily, applied only after a person has reviewed the change
Publicly available NHS practice data (NHSBSA)Each practice's own published volumes, drug by drug, used only when a visitor picks their practiceMonthly. The latest published month is May 2026

The catalogue, the prices and the margins are market figures, built from the sources above and nothing else. They are the same for every visitor.

The last row is the exception, and it only ever applies to one visitor at a time. Picking a practice in the header loads that practice's own published volumes and re-scales the money on screen to them. Nothing is uploaded, nothing is stored about you, and every resulting figure is labelled modelled, because it rests on publicly available NHS data rather than on your own dispensing records. The known limitations page says what those figures are and are not, how far behind the data is, and how to get exact figures instead.

Contains public sector information licensed under the Open Government Licence v3.0.

2. How a margin is worked out

Three figures sit behind every margin on the dashboard, and each one is a stated quantity rather than an estimate.

Buy price = the wholesaler's price for that pack, net of the published national scheme rebate for that drug at that wholesaler
Reimbursement = the current Drug Tariff price for that pack, or the price concession where one is in force
Margin per pack = reimbursement minus the cheapest in-stock buy price across the wholesalers we track

This is the universal basis, and it is deliberately the plainest one available. The public dashboard does not apply the dispensing fee or the clawback, and it does not model any practice-specific loyalty bonus, spend-tier discount or settlement discount, because those are individual to each practice and we do not know yours. The figures are therefore comparable between practices rather than tailored to one.

Why the cheapest price is not always the one used in the margin

A single very low price we cannot confirm is more often a data artefact than a bargain. Where that happens the dashboard still shows the price in that wholesaler's own column, badged as unconfirmed, and works the margin from the cheapest price it can stand behind. Out-of-stock prices never set a margin.

3. How a product is identified

Wholesalers spell the same product differently. Pooling the wrong lines together is the single fastest way to produce a wrong margin, so every product is reconciled against the NHS's own medicines dictionary before any money is compared.

Reducing the share of the catalogue that does not resolve to a code is continuous work, and it is why the dm+d release is tracked as a source in its own right.

4. Where a figure is withheld, and why

We are fail-closed by design. When a check does not pass, the figure is withheld, and where the underlying data is not sound the day's update does not go out at all. Nothing is guessed to fill a gap, and no check is waved through to get an update out.

Missing tariff data

If the Drug Tariff data for the month is absent or incomplete, typically in the first days after an edition changes, we refuse to publish margins against a blank and wait for the real figures.

Pack size disagreement

Where the wholesalers pooled onto one line do not agree on how many units are in the pack, that line states no reimbursement price at all.

Pack and unit mismatch

Where a line describes a box of several items but its Drug Tariff figure is the price of one item inside that box, both figures are real but comparing them is not. The tariff stays, the margin is withheld, and the figure says so on hover. Marking that figure plainly as a per-unit price is a correction in flight.

Unconfirmed prices

A cheapest price we cannot confirm is still shown, badged, and left out of the margin until it is confirmed.

Hospital-only supply

Where a line's supply route is hospital-only, its reimbursement price is genuine but no dispensing practice can buy against it, so the margin is withheld rather than shown as an opportunity.

Appliance prices

An appliance takes a Part IX price only where the exact pack the tariff prices is the exact pack on the line, and the sources agree unanimously. Anything less states nothing.

What a withheld figure looks like on the dashboard

Withholding is never silent. A line whose margin has been withheld still shows its reimbursement price, every wholesaler's price, its stock and its price history. Only the derived margin is blank, and hovering it gives the reason in plain English, naming the figures involved. A line with no Drug Tariff price of its own is labelled as such rather than left ambiguous.

How the checks are held in place

Every rule on this page is locked, and nothing reaches the live site until it has been checked against all of them. That is what stops a rule quietly eroding: a change that would loosen a check is refused rather than published. Checks are tightened over time and are never loosened to get an update out.

5. Refresh cadence, and how to see it

The dashboard does not hide how old its figures are.

Freshness is not uniform across the catalogue, and the stamps are there so you can see that rather than assume otherwise. The known limitations page sets out where the gaps are.

6. Corrections

Some figures will be wrong. What matters is what happens next.

If a correction changes a class of figures rather than a single line, it is recorded on the known limitations page until it is closed.

7. Using our data

Every price, Drug Tariff figure and price history on this site is published openly. Anyone can look up any drug, and any practice's own figures, free and without an account. That is deliberate and it is staying.

The line we draw is completeness, not access. Automated bulk collection of the dataset as a whole, meaning systematic retrieval across the catalogue, the price history or the per-practice figures, is not permitted without our written permission, and we treat it as unauthorised use of the site.

If you want the whole dataset, ask us rather than crawl for it. A daily snapshot is available on request: email [email protected]. A practice pulling its own figures on a schedule is a welcome user rather than a problem, and if that pull is heavy, tell us and we will point you at a route built for it.

The same boundary is published in machine-readable form at /robots.txt, which asks crawlers to leave the bulk data files alone. It is a statement of what is permitted rather than a technical control.

The standing rule

We would rather show nothing than show a number we cannot stand behind. Everything above exists to make that rule mechanical rather than a matter of good intentions.

Next: what the dashboard does not do, and where it can be wrong. For the shape of the product rather than the method, see how it works.