About the data & methodology
Every number on this site is read from a pre-built open dataset. No visitor request ever calls Parliament, Hansard or any other API.
Where the data comes from
- Parliament Members API
- Parliament Committees API
- Commons Votes API
- Hansard API
- Written Questions / Statements API
- Oral Questions and Motions API
- Bills API
- ONS Open Geography Portal
- Postcodes.io
The extraction service pulls these sources on a schedule, validates them, and publishes plain JSON to GitHub. This site keeps a local mirror of that repository and renders it on the server, so pages are fast and fully readable by search engines and AI tools.
Current dataset generated 7 November 2026, covering 7 November 2019 to 7 November 2026.
How the statistics are calculated
- Voting participation = divisions voted in ÷ Commons divisions the MP was eligible for (held while they were an MP), as a percentage. Aye, no and teller all count as votes. Absence is not necessarily non-attendance: MPs can be paired, ill, on parental leave, or serving as Speaker or Deputy Speaker.
- Committee attendance = formal meetings attended ÷ meetings for which Parliament published an attendance list while the MP held a (non-alternate) role. Meetings without a published list are excluded.
- Debate contributions are spoken contributions recorded in Hansard; debates participated counts distinct debates.
- Written and oral questions, early day motions, bills sponsored and petitions presented come from the corresponding Parliament APIs. Petitions are inferred from Hansard petition debate sections.
- Rank and averages compare an MP with the other sitting MPs who have a value for the measure. Rankings are a way to see context, not a measure of how good an MP is.
- All figures cover a rolling seven year window. Earlier history is not included.
Known limitations
- Postcodes are published at outcode level; full-postcode resolution needs one Postcodes.io call for outcodes spanning several constituencies.
- Petitions presented are inferred from Hansard petition debate sections.
- Committee attendance exists only for meetings where Parliament publishes attendance.
- Election information comes from the Parliament Members API (the Electoral Commission API exposes polling stations/ballots only).
- Postcodes are matched at outcode level (for example HU5). Where an outcode spans several constituencies we show all of them; use Find Your MP to confirm a full postcode.
- MP websites, social media links and previous occupations are not yet in the dataset, so they are not shown.
- Hansard topics and individual contribution text are not yet in the dataset; we link to Hansard instead.
- Former MPs are included only if they served within the window.
Reuse the data
The dataset is free to use. Start with mps/index.json, postcodes/postcode_constituencies.json and meta.json in the repository. Please credit “UK Politics Decoded” and the underlying sources.