WatchtowerEnglandWales (Cymru)

Councils and Parliament — official figures with sources on every number.

Menu

Markets

MarketsBTC/GBP

Loading…

Parliament methodology

These pages sit inside Watchtower. They do not invent unofficial scrapers where an official API exists. Snapshot generated 2026-09-14T18:09:20Z. Public beta — dated official datasets, not a live feed.

What is in the snapshot

Open Parliament Licence / Open Government Licence as applicable.

MP salaries

Every current MP page shows the IPSA basic MP salary of £98,599, effective 2026-04-01. The figure is transcribed from the published IPSA schedule — we do not invent amounts. The same basic rate applies to all sitting Commons members who are not paid a further office-holder salary; it is still labelled per MP as requested.

The Parliament hub and current MPs list also show a combined total of £63,990,751: 649 sitting Commons members × £98,599 IPSA basic. That is basic pay only — not ministerial or other office-holder uplifts, expenses, staffing or pensions. Optional £ per UK household and £ per calendar day on those pages are derived (annual total ÷ the ONS household count used on Public finances, and ÷ 365) and are labelled as such.

Primary source: Independent Parliamentary Standards Authority (IPSA) — MPs’ pay & pensions (as of 2026-04-01; decision 2026-03-02). When IPSA publishes a new April rate, update the constants in scripts/refresh_parliament.py (build_salaries) and re-run the Parliament refresh so data/processed/parliament/salaries.json stays the committed snapshot.

Additional office salaries (ministers, opposition office-holders, specified select committee chairs, Speaker) exist in official IPSA and MOSA SI 2026/592 tables. IPSA publishes an additional salary for specified select-committee chairs and the Panel of Chairs. Ministerial, opposition-office and Speaker amounts are set separately under the Ministerial and other Salaries Act 1975 (as amended). This snapshot does not carry a reliable current-office list that would let us attach those amounts to named ministers, opposition office-holders or chairs. We therefore show the IPSA basic figure on every MP page and link the additional-office schedule instead of inventing an uplift. The Commons Speaker is the only named-role join we make: the Members API party field is 'Speaker'. IPSA select-committee-chair additional salary in the published table is £19,763 from 2026-04-01.

Members

Current House of Commons members from members-api.parliament.uk with House=1 and IsCurrentMember=true. 649 rows in this snapshot.

Contact details (email, phone, parliamentary / constituency / department address, website and social links) come from a second Members API call, GET /api/Members/{id}/Contact, joined onto each sitting MP. The Search list payload does not include those fields. We never invent an email or phone: if the official record omits a field, the All MPs table and the member page say unavailable. A House of Commons parliamentary address is published for almost every MP; a constituency street address is often missing even when a constituency office phone is listed.

In this snapshot: email 647 of 649 (99.7%); phone 478 of 649 (73.7%); any postal address 649 of 649 (100%); constituency street address 246 of 649 (37.9%). Refresh contacts without rebuilding votes/bills with python3 scripts/refresh_parliament.py --contacts-only --redownload.

RMFI versus Electoral Commission donations

Plain-English hub: Money trail — RMFI vs EC.

RMFI is the Commons Register of Members’ Financial Interests, via interests-api.parliament.uk. We take the latest Commons register and parse the official Interests CSV (zipped by category).

Electoral Commission donations are a different legal register (PEF). They are shown in a separate labelled block. We pull regulated-donee rows (et=rd) of type “MP - Member of Parliament”, keep those accepted on or after 4 July 2024, and fuzzy-match RegulatedEntityName to the current Members API name. Confidence is high / medium / low. Low-confidence matches are still shown so you can reject them — they are not treated as identity proof.

EC window in this snapshot: Regulated donees (et=rd), donee type 'MP - Member of Parliament', accepted on/after 2024-07-04. Newest 80 API pages.. Matched 792 rows.

Bills

Current Bills API session 40 from bills-api.parliament.uk. That is the session that still has live 2024–26 business in this snapshot — not the entire historic catalogue.

Voting cut

Commons divisions come from commonsvotes-api.parliament.uk with parliamentNumber=59 only (the Parliament that began on 4 July 2024). All parties that appear in the official Aye/No/No-vote lists are included. We do not use the deprecated commonsdivisions.parliament.uk host. Each division links to votes.parliament.uk.

The committed snapshot stores every current-Parliament division’s title and counts. Individual member roll-calls are stored for the newest 120 divisions so the repo stays a dated snapshot rather than a multi-megabyte vote warehouse. Older divisions keep the official link.

Privileges and Standards

Committee of Privileges is committee 289. The Committee on Standards (290) is listed underneath and labelled as a different body. Publications come from the Committees API, not from a Cloudflare-blocked HTML scrape of the public site.

MPs let go by party

Featured at /parliament/party-departures. There is no official bulk API for whip withdrawals, expulsions, or party resignations. Watchtower therefore keeps a curated JSON snapshot at data/processed/parliament/party-departures.json19 well-sourced Parliament 59 rows with name, former party, date, category, reason, outcome, and a source URL each. Scope: UK House of Commons, Parliament 59 (from 4 July 2024). Curated list of well-documented whip withdrawals, expulsions, and resignations/surrenders of the whip — not a complete official register.

Categories included when sourced: whip withdrawn / suspended, expelled, resigned the whip, or surrendered the whip. Ministerial sackings without loss of the party whip are out of scope. Pure voluntary floor-crossings without a party-discipline step are out of scope. Edit data/processed/parliament/party-departures.json by hand when new well-sourced cases appear; do not invent names. Match memberId to data/processed/parliament/members.json when the MP is still in the current Members snapshot; otherwise leave memberId null and keep name-only. scripts/refresh_parliament.py does not auto-fetch this file.

Context explainer (not our registry): Institute for Government — MPs who change party allegiance. As of 2026-09-14.

Convictions (not featured)

Unavailable as a complete dataset. There is no official bulk API or complete public dataset of sitting-MP criminal convictions. Police national records are not published as a member-level register. Watchtower does not invent conviction rows. We do not invent sitting-MP conviction rows. Optional Commons Library briefing SN04594 is historical, not a live feed.

Accounts

New registration is closed. Existing verified local members can sign in. Pending verification codes and watchlist digest copies appear in the local mailbox file. Verification still has no SMTP. Watchlist digests reuse that mailbox, and send internet email only when ALERT_EMAIL_* is set. Accounts live in data/local/ (gitignored on disk; named Vercel Blob documents when a store token is set).

How to refresh

  1. python3 scripts/refresh_parliament.py --redownload
  2. Contact fields only (Members API /Contact, no bills/votes rebuild): python3 scripts/refresh_parliament.py --contacts-only --redownload
  3. Commit the updated files under data/processed/parliament/.

Council data is still refreshed with python3 scripts/refresh.py. See council sources.