# Council spending dataset

Council revenue spending by service, how each council is funded, and who
receives each part of a council tax bill, for every council in England,
Scotland and Wales, keyed by ONS geography code. Built nightly by
`pipeline/src/spending/`; run it on its own with
`npx tsx sites/wymg/pipeline/src/spending/run-cli.ts`.

Money is in £ thousands (£000) as the returns publish it, rounded to whole
thousands, except where a field says pounds. Nothing here is estimated: a
figure a return does not publish is absent or `null`.

## Files

| File | What it holds | Schema (TypeScript) |
| --- | --- | --- |
| `services.json` | Every body's revenue account for its three newest years: net spending by service, sub-service and part; gross spending and employee costs by service; funding; ring-fenced grants; Housing Revenue Account; parish precepts. Plus the sources read and a coverage report. | `SpendingDataset` in `pipeline/src/spending/types.ts` |
| `bills.json` | For every billing area, the Band D bill split by receiving body (council, adult social care precept, county or GLA, police, fire, combined authority, parish). | `BillsDataset` in `types.ts` |
| `taxonomy.json` | The shared service taxonomy and, for each nation, which return lines map to which service. | `taxonomy.ts` |
| `drilldown.json` | Derived: each receiving body's services shared out in proportion to its net spending (`trees`), and for every area the pounds of its Band D bill on every line (`areas`). Compact JSON. | `DrillData` in `pipeline/src/spending/derive.ts` |
| `lookups.json` | District to fire and rescue authority and to combined authority. | `BodyLookups` in `bodies.ts` |
| `environment.json` | Derived: each council's net spending on parks, street cleaning and road maintenance (structural and routine), winter service and street lighting, per resident and per mile of road it looks after, with the change on the year before, the median among similar councils, and medians by kind of council. | `EnvCouncil` in `environment.ts` |
| `housing-support.json` | Housing Benefit and the Universal Credit housing element for Great Britain, split between social and private renters (spending, claims, average award) and by nation, with the share of rented homes whose tenants get it. | `HousingSupport` in `environment.ts` |

Files starting `.last-good-` are the pipeline's fallback copies and are not
part of the dataset.

## Keys

- Bodies are keyed by ONS code: `E06`/`E07`/`E08`/`E09` councils, `E10`
  county councils, `E12000007` Greater London Authority, `E23` police, `E31`
  fire, `E47` combined authorities, `S12` Scottish councils, `W06` Welsh
  councils, `W15` Welsh police, `W25` Welsh fire.
- Service ids are `service`, `service.sub` and `service.sub.part`, defined
  once in `taxonomy.json`. `service.unitemised` is the difference between a
  service's total and the lines its return itemises, kept rather than spread.
- Years are financial years, `"2025-26"`.

## Sources and licences

| Source id | Publisher | What | Licence |
| --- | --- | --- | --- |
| `mhclg-ro` | Ministry of Housing, Communities and Local Government | Revenue Outturn multi-year data set (RSX, RO1 to RO6, RS, RG forms) | Open Government Licence v3.0 |
| `scotgov-slgfs` | Scottish Government | Scottish Local Government Finance Statistics: LA-level net revenue expenditure by sub-service, and by service and type; publication tables (Annex C, Tables 2.8, 2.14a) | Open Government Licence v3.0 |
| `statswales-ro` | Welsh Government | StatsWales revenue outturn: detailed summary, roads and transport, social services by client group, financing | Open Government Licence v3.0 |
| `mhclg-ctr` | Ministry of Housing, Communities and Local Government | Council Tax levels: Table 10 local authority level data (CTR returns), Table 8b | Open Government Licence v3.0 |
| `statswales-bandd` | Welsh Government | Composition of average band D council tax by billing authority | Open Government Licence v3.0 |
| `scotgov-ctband` | Scottish Government | Council Tax by Band | Open Government Licence v3.0 |
| `ons-body-lookups` | Office for National Statistics | LAD25 to FRA25 and to CAUTH25 lookups | Open Government Licence v3.0 |
| `dft-rdl0102` | Department for Transport | Road lengths in Great Britain, RDL0102 (miles by local authority) | Open Government Licence v3.0 |
| `dwp-outturn` | Department for Work and Pensions | Benefit expenditure and caseload tables: outturn and forecast (Housing_benefits sheet) | Open Government Licence v3.0 |
| `ons-dwelling-stock` | Office for National Statistics | Dwelling stock by tenure, UK (Great Britain table) | Open Government Licence v3.0 |

Each source's exact file and years read are in `services.json` and
`bills.json` under `sources`.

## How the nations differ, and what is done about it

All of this happens in the pipeline; pages only display the result.

- **Net spending.** England's net current expenditure is before grants inside
  Aggregate External Finance, so the Dedicated Schools Grant and public health
  grant are recorded in `ringFenced` and taken off before a bill is shared
  out. Scotland's net revenue expenditure is already net of every grant.
  Wales's is before specific grants, which Wales does not publish by service.
- **Social care.** England splits adult social care by primary support reason
  and age; Wales by client group and setting (nursing, residential, home care
  and so on); Scotland passes most adult social care to Integration Joint
  Boards and reports it as one line.
- **Service income.** England and Scotland split fees and charges from other
  income; Wales publishes one figure. `funding.serviceIncome` is the combined
  figure for all three.
- **Housing.** General Fund housing only. Council housing is in the Housing
  Revenue Account (`hra`), funded by rents and kept separate by law. Wales's
  "Housing council fund" line includes housing benefit payments, which the
  Department for Work and Pensions refunds.
- **Employee costs** are published by service in England and Scotland, not in
  Wales.
- **Council housing.** `hra` is the Housing Revenue Account's income and
  spending. `hraShared` (England only) is the General Fund's contribution to
  the HRA for items "shared by the whole community": the one published figure
  for council-tax-funded spending on or around council housing land. Welsh
  HRAs are not in the StatsWales returns read.
- **Roads.** Road maintenance is split into structural and routine
  (environmental, safety and routine) maintenance where England and Wales
  publish it; gully cleaning and verge cutting sit inside routine maintenance
  and are not published separately. Per-mile figures use DfT's locally managed
  major roads plus all minor roads, which exist only for highway authorities.
- **Housing support** is published by DWP for Great Britain and each nation;
  by region or council it is only on Stat-Xplore, which needs an account. The
  share of rented homes whose tenants get support compares claims with the
  newest dwelling count, which may be for an earlier date (stated).

## The drill-down

Each part of a bill is shared across the receiving body's services in
proportion to its net spending on each, after ring-fenced grants; services
with net income take no share and are listed in `netIncome`. Within a
service, the same is done across its sub-services. Council tax is pooled, not
ring-fenced, so this is an allocation in proportion, not a record of what
any pound paid for. Parishes file no national return and have no breakdown.

Comparisons (`peerMedian`) are the median per resident among the ten bodies
of the same kind in the same nation closest in population (every one, where
there are ten or fewer). Combined authorities and the GLA have none: each
does a different mix of things. Populations are ONS mid-year estimates; a
county, police force, fire authority or combined authority's is the sum of
its districts'.

The adult social care precept figures MHCLG publishes are this year's
increase only, not the running total since 2016-17 that councils print on
their own bills.

## Coverage

`services.json` `coverage` lists every council whose return is missing or
older than the newest year, and every bill that could not be split.
