WatchtowerEnglandWales (Cymru)

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

Menu

Markets

MarketsBTC/GBP

Loading…

Sources and methodology

Watchtower is a dated snapshot of official and curated public datasets. Council and Parliament figures refresh when those datasets are re-downloaded — not a ticking feed. The slim BTC/GBP markets strip is a live market quote. UK gilt yields re-read Bank of England end-of-day par-yield series while that page is open.

Snapshot generated 2026-09-13T18:36:22.599056+00:00. Public beta — a dated snapshot of official datasets, not a live feed.

FOI / report pack

Council and MP detail pages offer a printable pack at /report/council/[slug] and /report/mp/[memberId]. Use the browser Print dialog and Save as PDF. The pack repeats key figures, a sources table with URLs and as-of dates, methodology pointers (this page, Parliament methodology, money trail), and a disclaimer: compiled from published sources, not legal advice, verify against originals before FOI reliance. Local only — nothing is emailed.

Geography in v1

Sourced metric rows are England’s upper-tier and unitary authorities plus London boroughs: county councils, metropolitan boroughs, unitaries and the 32 London boroughs plus the City of London. That is the ONS counties and unitary authorities (CTYUA) set, December 2025 vintage (153 English authorities in this snapshot).

The Councils menu also lists Wales’s 22 principal areas (unitary authorities) — All / England / Wales filter — with official English and Welsh names, ONS W06* codes, and the same metric shape as England: MHCLG outstanding borrowing stock, ONS mid-2025 population, ONS/Home Office CSP crime, Open Council Data control/seats, 2024 general-election overlaps, and Welsh Government / StatsWales overall Band D council tax (ranked separately from MHCLG England on /council-tax). Debt is labelled as a stock of outstanding borrowing, not an annual deficit. Merthyr Tydfil and Rhondda Cynon Taf share the published Cwm Taf CSP crime figures (noted on both pages). The home map geometry remains England-only. Scotland and Northern Ireland remain out of scope.

Shire districts are not primary rows. Districts report their own borrowing in the MHCLG live table, but residents in two-tier areas are covered by both a district and a county. Mixing those stocks without a carefully labelled dual view is misleading, so v1 shows the county (or unitary) only. Combined authorities, the GLA, fire and police bodies stay out of the England metric table — they have a separate Mayors geography layer.

Warrington (E06000007) is included as a unitary and is taken from the same official tables as every other English row — not from press briefings.

What each figure is

Debt / borrowing
Total outstanding borrowing from the MHCLG / DLUHC Borrowing and investment live table, Q1 2026–27, as at 30 June 2026. The published worksheet is in £ thousand; we convert to pounds and sum every borrowing column (short-term and longer-term loans, securities, and loans from other local authorities). This is a stock of external borrowing, not the annual revenue deficit and not “council debt” as used in some newspaper league tables. Capital Financing Requirement / COR C prudential data is a related but different concept and is not the headline metric.
Debt per head
Outstanding borrowing divided by the ONS mid-2025 usual resident population. Rounded to the nearest pound. It is not a bill sent to each resident.
Population
ONS mid-year population estimates for England and Wales, mid-2025, 2023 local authority boundaries (MYE2 persons, all ages). Barnsley and Sheffield still appear under predecessor metropolitan codes in that workbook; we map the current codes used in finance and geography files.
Crime
ONS / Home Office Crime in England and Wales: Police Force Area data tables, year ending March 2026. Headline metric is police-recorded crime excluding fraud (Tables C2 count, C4 rate per 1,000). Community Safety Partnerships usually match a district or unitary, not always the current council:
  • Most unitaries, metropolitan boroughs and London boroughs match one CSP.
  • County rows (and the two 2023 Cumbria unitaries) aggregate the CSPs that cover their districts or former districts. That is labelled on the council page.
  • Some CSPs are “combined local authorities” (for example North / South Worcestershire). We use the published CSP total rather than inventing a split.
  • Rates for the City of London are often unpublished because of the tiny resident population.
Political control
Open Council Data UK 2026 council composition snapshot (shortly after the May elections / subsequent by-elections). Majority party if one party holds more than half the seats; otherwise no overall control, with the published administration string. This is a curated compilation of council-published results, not an MHCLG statistical release. Leader names are not always in the free file, so v1 shows who has the numbers rather than a named leader.
Voting
Local: 2026 seat totals and next-election date from Open Council Data. General election: House of Commons Library CBP-10009 constituency results for 4 July 2024, joined to councils with the ONS WD25–PCON24–LAD25–CTYUA25 lookup. We list overlapping constituencies and an indicative summed vote share. Split seats mean that share is not a precise local-authority result.
Council tax (Band D)
England area Band D for a two-adult dwelling, from the MHCLG Live tables on Council Tax (Area_CT) for 2026–27. This is the billing-authority bill including adult social care, parish precepts and major precepts (county or GLA, police, fire, combined authority) — not average council tax per dwelling, and not the billing authority’s own precept in isolation. Year-on-year % is the official Area_CT_(%) column, not a Watchtower estimate. Ranked at /council-tax. 153 Watchtower CTYUA rows exist; area Band D is published for 296 billing authorities, so shire districts appear in the ranking even though they are not primary council pages. The 21 shire counties have no single household area Band D. Wales’s 22 principal areas are ranked separately from the Welsh Government / StatsWales overall Band D (county + community + police); MHCLG CTR stays England-only and the two collections are not mixed.

Datasets in this snapshot

Metro / strategic mayors

/mayors is a curated England-only layer for the Mayor of London and directly elected mayors of combined authorities and combined county authorities. It does not include ceremonial civic or town mayors, or the 13 local-authority executive mayors listed in Commons Library SN05000 appendix 1. Combined-authority codes are ONS E47 CAUTH (May 2025 file) where they exist; the GLA is labelled with the London region code E12000007, not an E47 code. Council debt and crime pipelines are unchanged.

Sitting mayor names and parties are transcribed from Commons Library SN05000 (11 May 2026) except Greater Manchester, where the 30 July 2026 by-election returned Bev Craig (Labour and Co-operative) — SN05000 still listed Andy Burnham. Foundation authorities (Devon and Torbay, Lancashire) and combined authorities awaiting a first mayor (Cheshire and Warrington, Cumbria) are listed as no mayor rather than filled in. Unknown ONS codes and unheld elections are marked unavailable. Snapshot 2026-09-14: 14 sitting mayors, 2 foundation / no mayor, 2 awaiting a first mayor.

Refresh by editing the curated table in scripts/build_mayors.py and running python3 scripts/build_mayors.py. Do not scrape mayoral HTML. Never invent a name or party.

Election calendar

/elections is a curated civic calendar for Watchtower’s geography: English CTYUA / London borough and Welsh principal-area locals, England metro / strategic mayors (linked to /mayors), the Senedd, police and crime commissioners, and the UK general election. Snapshot 2026-09-14: 45 events (24 upcoming, 19 recent past, 2 unset). A polling day is stored only when a cited source gives that day, or when Open Council Data already records it on a Watchtower council row. Year-only GOV.UK cycles stay year-only. Unannounced contests are labelled not yet set — never invented.

The next UK general election has no announced polling day. Commons Library CDP-2024-0177: if this Parliament runs full term it dissolves on 9 July 2029 and the last possible polling day is 15 August 2029. That latest-possible date is documented, not treated as the scheduled poll. PCC elections last ran on 2 May 2024; a 2028 polling day is not listed because the Electoral Commission has not published a date-specific timetable and Commons Library notes a government commitment to end the office in 2028.

Refresh by editing curated rows in scripts/build_elections.py and running python3 scripts/build_elections.py (after mayors / council snapshots if those changed). Do not scrape election HTML. Never invent a polling day.

UK national debt clock

/debt-clock (and a summary card on the home page) shows the latest ONS public sector net debt excluding public sector banks (PSND ex) from series HF6W, including as-of month-end, % of GDP, year-earlier change, and links to the bulletin and timeseries. The figure is stored in data/processed/uk-national-debt.json.

The page shows the published monthly stock and a client-side live estimate that interpolates forward from that stock using the average daily change between the last two ONS HF6W month-end observations (baked as dailyChangeGbp / interpolation in the JSON). The tick is labelled as an estimate — not a live HMT feed. Watchtower does not scrape third-party novelty debt-clock sites. Council borrowing on Councils pages remains the separate MHCLG local-authority stock. Gilt yields (the interest rate on UK government bonds) are a different concept and live on /sovereign-debt.

UK gilt yields (sovereign debt monitor)

/sovereign-debt shows Bank of England daily nominal par yields for conventional gilts at 5, 10 and 20 years (series IUDSNPY, IUDMNPY, IUDLNPY). These are end-of-day observations from the Statistical Interactive Database, typically published by noon the following business day — not a 15-minute delayed dealer screen. The Bank’s fitted yield-curve Excel/ZIP files are not available over an API; these three daily series are the official, keyless feed Watchtower can fetch.

Two-year and 30-year par yields are not in this IADB family, so they are omitted rather than invented. The page labels freshness as end-of-day, shows as-of observation dates, and (when the same CSV includes them) change versus the previous observation plus the last point on or before 30 and 365 days earlier. A “near 6%” badge appears when a shown tenor is at or above 5.5%. That threshold is an editorial visual cue, not a forecast.

The browser requests /api/gilt-yields every five minutes while the tab is visible and pauses when it is hidden. The server caches the Bank of England CSV for five minutes. On upstream failure we keep the last good snapshot or show unavailable — we never invent a yield. This is a yield (a rate). The debt clock is the ONS stock of public sector net debt. They are not interchangeable.

Source: Bank of England Statistical Interactive Database. Yield-curve notes: Bank of England yield curves. 10-year series view: IUDMNPY.

Public finances (tax, benefits, services, aid, pensions)

/public-finances (and a summary card on the home page) shows curated HMRC tax revenues, WGA social security benefits, NHS England spending (WGA/DHSC), England school revenue funding (DfE), central government debt interest (HMT PSS) and UK Official Development Assistance (ODA) (FCDO SID) as annual flows, plus the WGA net public sector pension liability (a balance-sheet stock). ODA is labelled separately from FCDO Total DEL. Each headline also shows £ per UK household using the ONS Families and households count (29.0 million in 2025) with an explicit formula note. Figures live in data/processed/uk-public-finances.json with period, as-of, basis and source URL on every number. Stock versus flow is labelled; England-only flows are marked.

Housing and NHS waits

/health-housing (and a summary card on the home page) shows official NHS England consultant-led referral-to-treatment incomplete pathways (the waiting-list stock), the share within 18 weeks, and long waits; a separately labelled Wales RTT series that uses a 26-week operational standard; and four housing cards: rough sleeping (MHCLG autumn single-night snapshot), local-authority housing registers (MHCLG Live Table 600), UK House Price Index averages (ONS / HPI, with a Wales figure), and the ONS workplace-based affordability ratio (England and Wales). Figures live in data/processed/health-housing.json.

Incomplete RTT pathways are a stock of open pathways, not unique patients and not the monthly flow of completed treatments. Housing registers are a stock of households on waiting lists — qualification rules vary by council — and are not council outstanding borrowing. Rough sleeping is one autumn night, not statutory homelessness. House prices (June 2026 HPI) are not the same series as the 2025 affordability ratio. There is no invented join from these national series onto Watchtower council rows or named NHS trusts.

Refresh: python3 scripts/build_health_housing.py --redownload. That rebuilds NHS England totals from the official RTT overview timeseries and England housing-register totals from Live Table 600. Rough sleeping, HPI, affordability and Wales RTT are curated constants in the same script — update them from the cited bulletins; do not interpolate.

Council tax Band D (England and Wales)

/council-tax ranks 296 English billing authorities by MHCLG area Band D for financial year 2026 to 2027 (132 matched to Watchtower CTYUA slugs; 164 shire districts listed without a primary council page). Official year-on-year % is present for 296 England rows. The 21 Watchtower counties have no area Band D — they are precepting authorities.

The same page ranks Wales’s 22 principal areas by the Welsh Government overall average Band D (county/county borough + community council + police) for financial year 2026 to 2027. 22 of 22 join Watchtower on StatsWales W06 codes; official Table 2 % is present for 22 rows (no Wales gaps). England and Wales stay in separate rankings — we do not invent a combined bill. Processed file: data/processed/council-tax.json.

Wales’s 22 principal areas use the Welsh Government overall average Band D (county/county borough + community council + police precepts) from the 2026–27 Council Tax levels release. MHCLG CTR remains England-only. The two collections are ranked separately — we do not mix them or invent a combined bill.

Markets strip (BTC/GBP)

The header strip shows Bitcoin in British pounds (BTC/GBP). It is market data, not an official government statistic, and it is not financial advice. Watchtower fetches CoinGecko’s keyless Simple Price endpoint on the server at /api/btc-gbp and caches the response for about 30 seconds. The browser refreshes that route every 45 seconds while the tab is visible, and pauses when the tab is hidden.

The JSON shape is { priceGbp, change24hPct, asOf, source, sourceUrl }. Price and 24-hour change come from CoinGecko; the as-of time is CoinGecko’s last_updated_at (shown in London time). Attribution follows CoinGecko’s guide (“Source: CoinGecko”) with a link to the Bitcoin / GBP page. On upstream failure we keep the last good quote or show “unavailable” — we never invent a price.

Source: CoinGecko Bitcoin / GBP. Terms: CoinGecko API terms (non-commercial display with attribution; no resale of the feed).

My area (postcode lookup)

/my-area (also /area) asks for a UK postcode or outward code. Geography is resolved at request time by postcodes.io from the ONS Postcode Directory — see the postcode lookup and outcode lookup docs. We then match:

  • Local authority: ONS admin_district / admin_county codes, then names, against the committed England CTYUA rows and Wales principal-area (W06) rows. English shire districts are not primary rows, so a district postcode shows the county when that is the in-scope match. Welsh principal areas are matched on the same W06 codes the Councils / Wales pages use.
  • Constituency / current MP: postcodes.io constituency name against the committed Members API snapshot. Recent vote teasers use stored Commons roll-calls only.

Scotland, Northern Ireland, Crown dependencies, multi-nation outcodes, unknown postcodes, and lookup failures are labelled unavailable. We never invent a council or MP. The shareable URL is /my-area?postcode=WA1+1RL or /my-area?postcode=CF10+1EP.

Watchlists and alerts

/watchlist stores councils, MPs and bills in this browser’s localStorage (watchtower.watchlist.v1, or watchtower.watchlist.v1.user.<id> after a local sign-in). A signed-in session copies a guest watchlist into the user key if the user key is empty. Opting in to email alerts (verified local account only) also writes a server copy to data/local/alert-subscriptions.json (on disk for local `npm run dev`; Blob store watchtower-local when BLOB_READ_WRITE_TOKEN is set) so a digest job can see it. Pure localStorage cannot send mail by itself.

In-app alerts compare last-seen timestamps and last-seen as-of strings to the committed council / Parliament snapshot dates and each watched bill’s lastUpdate. Email is a daily digest by default (or on-change when the job runs) of those same sourced as-of moves — Watchtower does not invent “you have alerts.” Delivery always copies to the local mailbox (data/local/mailbox.json, same document as leftover verification codes). Internet SMTP runs only when ALERT_EMAIL_SMTP_HOST and ALERT_EMAIL_FROM are set. There are no push notifications. The scheduled hook is POST /api/alerts/run with ALERT_DIGEST_CRON_SECRET.

Mutable store (accounts, Town Square, mailbox)

Signup stays closed. Existing verified members, Town Square notes and reports, leftover verification codes, mailbox digest copies, and opt-in alert subscriptions are the same JSON documents as before:

  • data/local/users.json
  • data/local/mailbox.json
  • data/local/town-square.json
  • data/local/town-square-reports.json
  • data/local/alert-subscriptions.json

Locally, with no Blob credentials, those files live under gitignored data/local/. On Vercel they persist in the existing private store watchtower-local on project smlc-1397/watchtower. BLOB_READ_WRITE_TOKEN is already on that project — do not create a second store. Pull the same token for local Blob-backed dev with vercel env pull .env.local. Snapshot tables in data/processed/ stay in git and are not copied into Blob. Concurrent writes use a short optimistic read-modify-write; they retry on conflict rather than dropping a post. SMTP and open signup are unchanged (not invented).

Saved views and share cards

/views keeps named views in this browser’s localStorage (watchtower.saved-views.v1, or a per-user key after local sign-in). Payloads hold compare ids, a watchlist snapshot, a postcode, or a council slug / MP id. There is no account sync and no server copy of saved views.

Share cards open at /share?v=1&kind=… with query params that rebuild the card (and link to the live page). Prefer native destinations when they already encode state — for example /compare?tab=councils&councils=a,b or /my-area?postcode=WA1. Soft limit ~1800 characters; watchlist shares encode at most 40 item ids and may drop bills or trim lists. Custom saved names stay in localStorage only — they are not part of the share URL.

How to refresh

  1. Install Python dependencies: pip install -r scripts/requirements.txt
  2. Re-download and rebuild: python3 scripts/refresh.py --redownload
  3. Metro / strategic mayors (curated, no HTML scrape): python3 scripts/build_mayors.py
  4. Election calendar (curated, joined to council and mayors snapshots): python3 scripts/build_elections.py
  5. Re-download council tax Band D (England MHCLG + Wales Welsh Government / StatsWales): python3 scripts/refresh_council_tax.py --redownload
  6. Housing / NHS waits: python3 scripts/build_health_housing.py --redownload
  7. Commit the updated files under data/processed/ and public/geo/.

Without --redownload the script reuses data/raw/. The House of Commons Library CSV is also fetched from the Internet Archive if parliament.uk blocks automated downloads.

In and out of v1

In: England CTYUA councils; MHCLG outstanding borrowing; ONS population; ONS/HO recorded crime; Open Council Data control; HoC Library GE 2024 overlap; searchable table; choropleth; per-council pages; Explain this number cards for borrowing, crime, IPSA basic, RMFI, EC donations and area Band D; Compare (2–5 councils or MPs); this methodology page; Parliament hub, MPs (including published Members API contact details), IPSA basic salary and combined sitting-MP total, RMFI, bills, bills what’s-on, current-Parliament votes, Privileges; England metro / strategic mayors (London + combined authorities) as a separate geography layer; a sourced BTC/GBP markets strip; a sourced UK gilt-yield monitor (BoE 5y/10y/20y par yields); a sourced Housing / NHS waits page (England RTT, Wales RTT with a 26-week target, MHCLG/ONS housing stocks); postcode My area; a localStorage watchlist with last-seen change hints and opt-in email digests (local mailbox, optional SMTP); saved views / share cards (localStorage + query-param URLs); printable FOI / report packs (browser print-to-PDF); England and Wales council tax Band D rankings (separate official collections); a sourced civic election calendar at /elections; and local human-only accounts.

Out of the council metric v1 slice: Scotland and Northern Ireland; district-level primary council pages (districts do appear on the England Band D ranking); invented gap-fills; intra-year “realtime” ticks; housing revenue vs general fund splits; commercial investment asset values; ceremonial civic/town mayors and local-authority executive mayors on the Mayors layer. Gilt 2-year and 30-year par yields are omitted because they are not in the BoE IADB daily series family used here. Housing / NHS waits does not invent a council-to-trust geography, does not mix England’s 18-week RTT standard with Wales’s 26-week standard, and omits A&E / cancer waits and statutory homelessness to keep the housing set to four sourced cards.

UK Parliament transparency now lives in this same app at /parliament. See Parliament methodology for Members, IPSA salaries (including the combined basic-pay total), RMFI, Electoral Commission donations, money trail hub, bills, what’s-on, current-Parliament votes, Privileges, MPs let go by party (curated whip/expulsion snapshot), and a brief note that we do not invent conviction rows.

MP contact details on /parliament/mps come from the official Members API GET /api/Members/{id}/Contact, not from guessed @parliament.uk addresses. Email, phone, parliamentary and constituency addresses, websites and social profiles are shown when present; omitted fields are labelled unavailable. The Search members payload does not include contact fields, so they are joined in the refresh. Coverage and caveats are on Parliament methodology.