Price, price per sqm and turnover rate for ONE geography × asset class ×
bedroom band × period, from the pre-cubed area_facts table.
Metrics: sales_price, price_psm, turnover_rate are populated today.
rental_value, gross_yield and days_on_market are NOT — the pipeline has
never backfilled them, so they come back null and are named in the
response's `metrics_with_no_data`. Do not compare or rank on them, and do
not report a null from them as "no activity"; it means "not collected".
turnover_rate is sales as a share of the stock that could have sold. It
is the liquidity measure — transaction COUNT is market size, not
liquidity (W2 has the largest dwelling stock of any London district and
near-bottom turnover).
Geography is `postcode` (resolved to its district — the cube has no
sector or unit grain) or `lad_code` (a local-authority NAME, e.g.
"Lambeth", not a GSS code). There are no LSOA or ward areas in the
warehouse; those selectors return 422.
To compare AREAS against each other use `market_ranking`, not repeated
calls here. For "how many sales" use `market_volume_series` — the `tx_n`
here counts only UPRN-matched, non-anomalous sales and runs well short of
the registry. The prices are sound; the count is a sample size.
READ `tx_decision` BEFORE QUOTING A PRICE. Every row carries one, and it
says how much evidence is behind that number. Measured over the whole cube:
direct 2.7% 30+ sales in the cell. Quote it plainly.
modeled 15.4% 5-29 sales. Sound, lightly smoothed.
suppressed 44.0% 1-4 sales. Indicative — say the sample is thin.
imputed 17.3% ZERO sales. The price is the prior BORROWED from a
parent geography, not a measurement of this cohort.
missing 20.7% zero sales and no price at all (null).
An `imputed` row looks exactly like a real one — a confident, specific
figure — and it repeats: in one district, 25 cohorts all read the same
353,909, because they are all the same borrowed number. Reporting it as
"2-bed detached in AL10 sell for £353,909" states a fact the data does not
contain. Say the cohort has no recorded sales instead, or aggregate up to a
grain that does. `turnover_rate` is 0 on every one of these rows, which is
a second tell.
Where you want the AREA rather than a cohort, do not read a cohort row and
call it the area: aggregate, or use `market_ranking`, which does it for you
weighted by the sales behind each cohort. There is no rollup row in this
cube — no `bedroom_band="all"` and no `hmo_flag="all"`; filtering on either
matches nothing at all.
`max_periods` (default 3) bounds how many recent MONTHLY periods come back
when `period` is not given. The grain is one row per (asset_subtype ×
bedroom_band × hmo_flag × period) — about 13 cohorts per period — so a wide
window gets large fast. The response reports `period_frequency`,
`periods_returned` and `truncated` so you can tell a short answer from a
cut-off one.
UK only. Free.