Savvyrenter_data_repo

Savvy Renter — data

Open government housing data, cut into small files so a web page can fetch the one piece it needs instead of a whole database.

Served from https://data.savvyrenter.co.uk/ and used by savvyrenter.co.uk. There is no server and no API: every file is static JSON, fetched straight from the browser.

Anyone else is welcome to use it. See licence below.


What is in here

Path What it holds Size
/v1/outcodes/<OUTCODE>.json Every live UK postcode in that outcode, with its local authority, police force and coordinates ~18 KB each, 2,976 files
/v1/outcodes-index.json A list of every outcode that exists, and which NSPL release it came from ~20 KB
/v1/brma/<OUTCODE>.json Which Broad Rental Market Area (the area Local Housing Allowance is set for) each postcode in that outcode is in mostly under 1 KB, 2,943 files
/v1/brma-index.json Every BRMA name, the build date and the boundary sources ~5 KB
/v1/lha-rates.json Local Housing Allowance rates for all 192 Broad Rental Market Areas, April 2022 onwards ~52 KB
/v1/rents/<AREA CODE>.json Average private rent by month for one local authority, January 2015 onwards ~8 KB each, 350 files
/v1/rents-index.json Area code to area name ~9 KB
/v1/councils.json Band D council tax for every council in England, Scotland and Wales, the band ratios and the main discounts ~42 KB

How a lookup works

Take the postcode and split it at the space: PL4 6JJ → outcode PL4, unit 6JJ. Then fetch only what the page needs:

To find Fetch Read
The council and coordinates /v1/outcodes/PL4.json the entry for 6JJ
The rent history /v1/rents/<local authority code>.json months
The housing allowance area /v1/brma/PL4.json b, or the entry for 6JJ
The housing allowance rates /v1/lha-rates.json the BRMA’s rates
The council tax /v1/councils.json la[<local authority code>]

The local authority code from the outcode file is the key for both the rents and the council tax. The index files and lha-rates.json change at most a few times a year, so they cache well.

The outcode file

{
  "lad": ["E06000026"],
  "pfa": ["E23000035"],
  "p": {
    "6JJ": [0, 0, 50.3841, -4.1401]
  }
}

lad and pfa are lookup tables for that file: local authority codes and police force codes, listed once and referred to by position. Each postcode entry is [index into lad, index into pfa, latitude, longitude]. Coordinates are to four decimal places, about 11 metres — the accuracy of a postcode centroid, not of a building.

Only live postcodes are included. Terminated ones are dropped.

The BRMA file

Most outcodes sit wholly inside one Broad Rental Market Area, and their file is one line:

{ "b": "Plymouth" }

Where an outcode straddles a boundary, the file lists the areas once and gives each postcode a position in that list:

{
  "n": ["Highland and Islands", "Aberdeen and Shire"],
  "p": { "4AA": 0, "4AB": 0, "5XY": 1 }
}

The names are the ones lha-rates.json uses as display names, so a BRMA from here can be looked up there directly (normalise it the same way: uppercase, “&” spelled out as “AND”).

The LHA file

{
  "years": ["2022", "2023", "2024", "2025", "2026"],
  "brma": {
    "PLYMOUTH": {
      "name": "Plymouth",
      "nation": "E",
      "rates": { "2026": [325.0, 450.0, 575.0, 695.0, 895.0] }
    }
  }
}

Each year is [shared accommodation, 1 bed, 2 bed, 3 bed, 4 bed], monthly, in pounds. The year is the April the rate takes effect. Keys are normalised names (uppercase, “and” spelled out); name is the published spelling.

The rent file

{
  "code": "E06000026",
  "name": "Plymouth",
  "months": [["2015-01", 595, 450, 575, 675, 895]]
}

Each month is [month, all properties, 1 bed, 2 bed, 3 bed, 4+ bed], in pounds per month. A null means ONS did not publish a figure for that series.

The council tax file

{
  "years": ["2026-27", "2025-26"],
  "ratios": {
    "E": { "den": 9, "bands": { "A": 6, "B": 7, "C": 8, "D": 9, "E": 11, "F": 13, "G": 15, "H": 18 } }
  },
  "discounts": [
    { "key": "single", "off": 0.25, "label": "One adult" }
  ],
  "la": {
    "E06000026": { "name": "Plymouth", "nation": "E", "region": "South West",
                   "bandD": { "2026-27": 2400.00 } }
  }
}

Only Band D is held, because every other band is a fixed fraction of it in law: band charge = Band D × bands[band] ÷ den, using the ratios for the council’s nation (E, W or S; Wales has a band I). Figures are annual and include the police, fire and adult social care precepts, but not parish or town council precepts, so a bill in a parished area will be somewhat higher. discounts lists the common reductions as a fraction off the bill.


Building it

Nothing here is hand-edited. Every file is written by a build script from the published source files, so if a figure is wrong, it is wrong in the source or in the script, and re-running the build fixes it.

The scripts live in Savvy Renter’s shared modules, not in this repository:

Files Built by Rebuild when
outcodes/, outcodes-index.json data-builders/build-postcodes.php ONS publish a new NSPL (a few times a year)
brma/, brma-index.json brma-lookup/build-brma.php after every postcode rebuild, or if a boundary changes
rents/, rents-index.json data-builders/build-rents.php ONS publish the rent index (monthly; each release holds the whole history)
councils.json data-builders/build-councils.php each April, when the new year’s council tax is set
lha-rates.json no script yet each April, when DWP publish the new rates

The postcode files must be built before the BRMA files, because the BRMA build places each postcode from them.


Versioning

Everything lives under /v1/. If the shape of a file has to change, the new shape is published under /v2/ and /v1/ is left alone until nothing is using it. That way a data rebuild can never break a page that is already live.


Licence

Two licences, because there are two kinds of thing here.

If you reuse the data you must carry the attribution for whichever source it came from. They are all set out in ATTRIBUTION.md. The rent files, the index files, lha-rates.json and councils.json also carry their own source and licence inside them; the per-outcode postcode and BRMA files are kept bare to stay small, so take their attribution from ATTRIBUTION.md.

None of this is legal or financial advice, and none of it is a substitute for the original publications, which are linked for every dataset.


Contact

Suggestions, corrections, or a dataset worth adding: there is a feedback button on savvyrenter.co.uk.