Skip to main content

GeraMarket / UK property sold prices / Methodology

Gera Local Price Momentum (GLPM) — Methodology

Full, reproducible formula behind the GLPM index. Every number traces to a real, free, authoritative source: HM Land Registry Price Paid Data (Open Government Licence v3.0). No estimates, no synthetic data.

What is GLPM?

The Gera Local Price Momentum (GLPM) index combines three signals per UK postcode district, derived solely from real HM Land Registry sold prices:

  • medianPrice — median sold price (current period, GBP)
  • pctChange12m — 12-month % change vs prior year median
  • txCount — number of qualifying transactions

Districts with fewer than 10 transactions in the current period output “insufficient data” and are excluded from the published dataset.

Data source

SourceHM Land Registry — Price Paid Data
Current period filepp-2026.csv (January–April 2026)
Prior period filepp-2025.csv (January–December 2025)
Reference periodJanuary–April 2026
Last computed2026-06-20
LicenceOpen Government Licence v3.0
Key required?No — bulk CSV, no registration

Step-by-step formula

  1. 1

    Download the Price Paid Data CSV files

    Fetch pp-2026.csv and pp-2025.csv from https://www.gov.uk/government/statistical-data-sets/price-paid-data-downloads. No API key required. Files are plain CSV with no header row. Column 4 (index 3) is the full postcode (e.g. "SW3 4JU"); column 2 (index 1) is the price in GBP; column 16 (index 15) is the record_status ("A" = added, "C" = changed, "D" = deleted).

  2. 2

    Filter valid records

    Exclude rows where record_status = "D" (deleted). Parse the postcode field to extract the outcode (first group before the space). Discard rows with an invalid postcode or price ≤ 0.

  3. 3

    Group by outcode × period

    Create two maps — current (pp-2026.csv) and prior (pp-2025.csv) — keyed by outcode, values = array of sale prices.

  4. 4

    Apply N≥10 threshold

    For any outcode with fewer than 10 transactions in the current map, skip it entirely — the published dataset omits "insufficient data" districts.

  5. 5

    Compute medianPrice

    Sort the current-period prices array ascending. median = prices[⌊n/2⌋] if n is odd; (prices[n/2−1] + prices[n/2]) / 2 if n is even. Round to the nearest integer GBP.

  6. 6

    Compute pctChange12m

    If the prior-period array for the same outcode has ≥10 entries, compute its median identically. pctChange12m = (currentMedian − priorMedian) / priorMedian × 100, rounded to 1 d.p. If prior period has <10 entries, pctChange12m = null.

  7. 7

    Record txCount

    txCount = length of the current-period prices array (before any deduplication — one transaction = one row in the PPD CSV).

  8. 8

    Sort and publish top 600

    Sort all qualifying outcodes by txCount descending. Publish the top 600 as the GLPM dataset. This ensures coverage prioritises the most liquid markets.

Pseudocode

# Input: pp-2026.csv (current), pp-2025.csv (prior)
# Output: GLPM_DISTRICTS array

for each csv_file in [pp-2026.csv, pp-2025.csv]:
  for each row in csv_file:
    if record_status == "D": skip
    outcode = postcode.split(" ")[0].toUpperCase()
    price = parseInt(fields[1])
    if price <= 0 or outcode is empty: skip
    period_map[period][outcode].append(price)

for each outcode in current_map:
  if len(current_map[outcode]) < 10: continue  # insufficient data

  medianPrice = median(current_map[outcode])
  txCount     = len(current_map[outcode])

  if outcode in prior_map and len(prior_map[outcode]) >= 10:
    priorMedian  = median(prior_map[outcode])
    pctChange12m = round((medianPrice - priorMedian) / priorMedian * 100, 1)
  else:
    pctChange12m = null

  results.append({ outcode, slug, medianPrice, pctChange12m, txCount })

results.sort_by(txCount, descending=True)
GLPM_DISTRICTS = results[:600]

Coverage (January–April 2026)

  • Districts published: 600 (top 600 by 2026 transaction volume)
  • UK median sold price: £275,000
  • Data source last published: 20 June 2026
  • Update cadence: Monthly (on each new Land Registry PPD release)
  • Licence: Open Government Licence v3.0 — free to use with attribution

Limitations & caveats

  • Lag: Land Registry typically publishes transactions 2–3 months after completion. The January–April 2026 file may not yet include all April 2026 completions.
  • Mix effect: A median over all property types (detached, semi, terraced, flat) is influenced by the mix of properties sold, not just price-level changes. A shift toward more expensive types can inflate the median even if like-for-like prices are flat.
  • 12-month comparison window: GLPM compares 2026 data (Jan–Apr) vs full-year 2025 data. The windows are not identical in length — interpret pctChange12m as a directional indicator, not a like-for-like repeated-sale index.
  • Not professional valuation advice: GLPM is a statistical summary of past transactions. It is not a property valuation, mortgage advice, or investment recommendation.

Contains public sector information published by HM Land Registry and licensed under the Open Government Licence v3.0. Source: HM Land Registry — Price Paid Data (January–April 2026).