Hello everyone,
I’ve been working on a side project called findmeds.uk that pulls together dm+d, NHSBSA, MHRA, and SPS data into a single publicly accessible medicine information site.
It’s free, ad-free, and doesn’t require an account. The idea is to make the existing NHS open data easier to browse for both patients and healthcare professionals.
I’m posting here because the project relies heavily on NHS data sources and I’d genuinely appreciate input from others who’ve worked with these datasets, particularly around some of the challenges I’ve run into.
What the site does
In short, it lets you search, filter, and compare UK medicines using data from several NHS and international sources:
-
dm+d (via TRUD Item 24) is the backbone - 24,000+ VMPs and 165,000+ AMPs, with SNOMED codes, dosage forms, strengths, and VMP-to-AMP relationships
-
SNOMED CT UK Edition via the NHS FHIR Ontology Server (with Snowstorm as fallback) for clinical terminology lookups
-
NHSBSA Open Data Portal for pharmacy contractor data (powering a pharmacy locator with 21,000+ locations via Postcodes.io)
-
MHRA Products API for linking to PILs, SPCs, and PARs
-
SPS for medicine shortage alerts, scraped every 6 hours
In addition to NHS data, I enrich medicines with pharmacology data from DrugBank (interactions, ADME, pharmacogenomics) and linked identifiers from Wikidata (ChEBI, PubChem, MeSH, etc.).
Medicine detail pages also pull in NICE guidance links, Drug Tariff pricing, prescribing statistics, and scientific citations resolved via CrossRef.
Technical setup
The stack is Next.js 16 with SQLite via Prisma on a single server. I run an automated weekly sync pipeline that downloads from TRUD, then imports and cross-references against NHSBSA, MHRA, DrugBank, and Wikidata. Shortage data refreshes every 6 hours. All NHS data is used under OGL v3.0 with full attribution.
Where I’d appreciate input
I have a few specific questions for anyone who’s worked with dm+d or NHSBSA data:
-
TRUD sync - I’m currently downloading the full dm+d release weekly from TRUD and doing a diff-based import. Has anyone found a more efficient approach for staying in sync, or is polling TRUD the standard method?
-
Terminology presentation - Translating dm+d and SNOMED terminology into something meaningful for non-clinical users has been one of the harder problems. The site has a “plain English mode” that attempts this, but I’d be curious if anyone has tackled similar challenges and what approaches worked.
-
Additional data sources - Are there other NHS or public-sector datasets I should be looking at? I’ve considered OpenPrescribing data and the BNF API, but haven’t integrated either yet.
Happy to go into more detail on any part of the implementation if it’s useful.
Would also be glad to hear from anyone building similar tools on these datasets.
Thank you in advance for any input you might have! Any insight is greatly appreciated!
Thanks for reading.