ods.fyiNHS organisation data as Parquet

All the sites in the NHS Organisation Data Service as queryable and verifiable Parquet files

Deterministic projections of the official NHS TRUD release. Query them offline with SQL, rebuild them yourself to verify, rehost them anywhere.

Release 2026-09-25
371,569 records · 28.2MB · OGL v3
GP practices
7,940
England6,225
Scotland1,010
Wales400
Northern Ireland305
❯ ods find --gp
PCNs
1,299
Primary care networks grouping practices
❯ ods role pcn
NHS trusts in England
199
open, of 244 marked active in ODS
Open199
Moving to a successor42
Closing down, no successor3
❯ ods find --role 'NHS Trust' --in england
Get started

Find an organisation

Install the ods cli to search the data with no SQL required. ods pull fetches and verifies the latest release. ods find lets you search by name, roles, locations and more.

Shell
❯ ods pull
❯ ods find --gp --in SW9
* --gp: RO76, RO227, RO315 — GP Practice, Scottish GP Practice, Northern Ireland GP Practice
┌──────────┬──────────────────────────────┬──────────┬────────────────┬───────┬──────────┐
│ ODS Code ┆ Name ┆ Postcode ┆ Roles ┆ Class ┆ Matched │
╞══════════╪══════════════════════════════╪══════════╪════════════════╪═══════╪══════════╡
│ G85028 ┆ STOCKWELL GROUP PRACTICE ┆ SW9 9TJ ┆ GP Practice +1 ┆ org ┆ postcode │
│ G85054 ┆ LAMBETH WALK GROUP PRACTICE ┆ SW9 6AF ┆ GP Practice +1 ┆ org ┆ postcode │
│ G85073 ┆ VASSALL MEDICAL CENTRE ┆ SW9 6NA ┆ GP Practice +1 ┆ org ┆ postcode │
│ G85100 ┆ BECKETT HOUSE PRACTICE ┆ SW9 9DL ┆ GP Practice +1 ┆ org ┆ postcode │
│ G85135 ┆ MINET GREEN HEALTH PRACTICE ┆ SW9 6AF ┆ GP Practice +1 ┆ org ┆ postcode │
│ G85695 ┆ AKERMAN MEDICAL PRACTICE ┆ SW9 6AF ┆ GP Practice +1 ┆ org ┆ postcode │
│ Y00020 ┆ THE GRANTHAM PRACTICE ┆ SW9 9BH ┆ GP Practice +1 ┆ org ┆ postcode │
│ Y03063 ┆ HETHERINGTON AT THE PAVILION ┆ SW9 8DJ ┆ GP Practice +1 ┆ org ┆ postcode │
│ Y05161 ┆ FIVEWAYS PCN EA HUB ┆ SW9 6AF ┆ GP Practice +1 ┆ org ┆ postcode │
│ Y05163 ┆ LARC CLINIC (LA) ┆ SW9 8DJ ┆ GP Practice +1 ┆ org ┆ postcode │
├──────────┴──────────────────────────────┴──────────┴────────────────┴───────┴──────────┤
│ 10 open Use --all to include closed │
└────────────────────────────────────────────────────────────────────────────────────────┘
# see details by ods code
❯ ods info G85028
# learn more about roles
❯ ods role 'trust'
┌───────┬───────────────────────────────────────────────┬─────────┐
│ Code ┆ Name ┆ Holders │
╞═══════╪═══════════════════════════════════════════════╪═════════╡
│ RO198 ┆ NHS Trust Site ┆ 35,064 │
│ RO108 ┆ Care Trust Site ┆ 533 │
│ RO197 ┆ NHS Trust ┆ 202 │
│ RO57 ┆ Foundation Trust ┆ 141 │
# ...or use duckdb to query the data over http from ods.fyi directly.
❯ duckdb -c "SELECT * FROM 'https://ods.fyi/orgs.parquet' LIMIT 5"

Install ods

macOS & Linux

Use Homebrew. It packs things into OCI Images too!

❯ brew install olizilla/tap/ods

Or install from source with cargo install --locked --git https://github.com/olizilla/ods.git

Need ods on windows? Open an issue

About

The ods tool converts the NHS Organisation Data Service XML open data archives into smaller, reproducible parquet files you can query with SQL. It is an independent open source project inspired by the principles of sct, the SNOMED CT CLI.

ods.fyi hosts the parquet output of the ods tool as content-addressed OCI Images to allow their verifiable distribution over a standard protocol. The datasets are republished under the same Open Government Licence v3.0 as the source.

The project is not affiliated with or endorsed by the NHS, but does aspire to be adopted there, either as a project or a set of ideas.

No lock in

It shows its working

Add --sql to any ods find and it prints the query it would have run, with flags expanded into the role codes they stand for.

Shell
❯ ods find --gp --sql
SELECT *
FROM 'ods_data/releases/2026-09-25/orgs.parquet'
WHERE status = 'active'
AND (legal_end IS NULL OR legal_end > publication_date)
AND list_has_any(role_codes, ['RO76', 'RO227', 'RO315'])
ORDER BY ods_code;

Run that query via duckdb against the parquet files and it returns the same rows ods find --gp returns. The ods cli lets us share useful SQL queries without making you dependent on the tool.

Local first

Download the files

Each release is 4 Parquet files, each carrying its own provenance, published as an OCI image and stored by the hash of the data. ods writes a Frictionless datapackage.json beside them, describing their schema, source and licence, and frictionless-ts can validate a release against it, files and all.

ods (or any OCI client) can download a release to your machine and verify the integrity.

With ods
Verified, kept in a dated folder, works offline
❯ ods pull
Over HTTPS
Follows the newest release
❯ https://ods.fyi/orgs.parquet
From the mirror
Same OCI image, byte for byte
❯ ghcr.io/olizilla/ods-data
TableRowsSizeContents
orgs.parquet371,56915.6MBEvery org and site, active first. The main table
relationships.parquet770,5097.5MBICB, Trust, PCN and parent links
roles.parquet530,3514.8MBAdministrative & functional roles per org
successions.parquet24,3730.3MBSuccessor chains through mergers and closures
Really open format

Query it with your own tools

For one-off queries, https://ods.fyi/orgs.parquet follows the newest release and DuckDB will read it over HTTP without downloading the whole file.

Shell
duckdb -c "
SELECT ods_code, name, postcode
FROM 'https://ods.fyi/orgs.parquet'
WHERE status = 'active'
AND list_has_any(role_codes, ['RO76', 'RO227', 'RO315'])
AND postcode LIKE 'SW9%';"

pandas, Polars, R and Spark read the same files. No account, no API keys, and nothing new to install.

Verifiable

Provenance and reproducibility

Every release on ods.fyi can be traced to the official NHS TRUD archive it came from. The output of ods is designed and tested to ensure byte identical output for a given input archive. Rebuilding the parquet from the source is encouraged to have more people verifying those claims.

In the meantime you can just ods pull and know that the files you get match the files we published, and are a deterministic projection of the official source archives.

Byte-for-byte reproducible
With an NHS TRUD API key use ods trud pull to fetch any upstream source release zip and rebuild the parquet files with ods make. They will have the same hashes as the release published to ods.fyi.
Hash chain to the source
The source archive SHA-256 is checked against the one NHS TRUD publishes and it is carried through as metadata available in every derived file.
DuckDB: parquet_kv_metadata('orgs.parquet')
{
"name": "ods-data",
"version": "2026-09-25_0.2.0",
"licenses": [
{
"name": "OGL-UK-3.0",
"path": "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
"title": "Open Government Licence v3.0",
"attribution": "Contains information from NHS England, licensed under the current version of the Open Government Licence."
}
],
"contributors": [
{
"title": "NHS England",
"roles": [
"rightsHolder"
]
},
{
"title": "NHS TRUD",
"roles": [
"distributor"
]
}
],
"sources": [
{
"title": "NHS Organisation Data Service XML Data",
"version": "2026-09-25",
"path": "https://isd.digital.nhs.uk/trud/users/guest/filters/0/categories/5/items/341/releases",
"hash": "sha256:ca0fee7512f593ada1fa9b95bf1372b41911167da463a98fecf33adfd86697e5",
"bytes": 38138574
}
]
}

To check a release yourself: ods trud pull fetches and verifies the source archive, ods make rebuilds the tables, and ods trud audit compares a release against the source XML.

Research ready

Cite a release

ods cite provides a recommended academic citation format in APA 7th edition, bibtex, or csljson so you can import it into Zotero or pandoc to keep your references tidy.

Shell
❯ ods cite
* Source: releases/2026-09-25 (0.2.0)
How to Cite
The source:
NHS England. (2026). NHS Organisation Data Service XML Data, release 2026-09-25
[Data set]. NHS TRUD. https://isd.digital.nhs.uk/trud
The data:
Evans, O. (2026). ods: NHS Organisation Data as verifiable Parquet files,
release 2026-09-25 (Version 0.2.0) [Data set]. ods.fyi. https://ods.fyi