Enter a UK postcode, get what government open data actually says about that
neighbourhood. Demographics, crime, deprivation, prices, fibre, 5G, noise,
transport, amenities, schools and planning constraints, assembled live from the
publishers' own APIs.
The 45 open datasets underneath, with endpoints, licences and coverage.
Why this exists
UK property intelligence sites (CrystalRoof, PropertyData and others) are
largely assembled from public data. This project maps out that raw material, the
Open Government Licence datasets and free APIs underneath, and then shows what
you can build with it: a working report, and an agent-ready interface to the
same thing.
Two rules it holds itself to, which is most of the point:
It never invents a comparison. Every band word ("above the UK average")
comes from a threshold table and always sits next to the figure it describes.
It never pretends to cover ground it does not. A Scottish postcode is
told that data.police.uk excludes Scotland, with a link to Police Scotland,
rather than being shown a zero. Deprivation is computed against each nation's
own index and denominator.
gen_derived.py (regenerates the CSV and the README tables), validate_registry.py, check_provider_ids.py, packbuild/
Both pages fetch data/registry.json at runtime, so they need to be served over
HTTP rather than opened from disk: python3 -m http.server 8000, then
http://localhost:8000/.
Postcode report
report.html is the registry pointed at a single postcode: enter
one and it fetches the real values out of these sources and writes a plain
paragraph per category — who lives here, crime, deprivation, prices, fibre, 5G,
noise, transport, amenities, schools, planning constraints.
It runs entirely in the browser. Most sources are called directly (postcodes.io,
data.police.uk, Nomis, HM Land Registry, Planning Data, the Environment Agency,
TfL, Overpass); the three that publish bulk files instead of an API — Ofcom
fibre, Ofcom mobile, the DfE school register — are pre-joined into packs/ by
tools/packbuild.
Results open with a tile per category — the headline figure and how it rates —
then one card each with the numbers behind it. Ratings are colour-coded, but
never by colour alone: each carries a glyph (▲ good, ● typical, ◆ worth a look,
▼ needs attention) and the band in words, so the meaning survives greyscale,
printing and colour blindness. Categories that cannot be judged good or bad — a
house price is neither — stay deliberately uncoloured.
Two things it will not do. It never invents a comparison: every band word
("above the UK average") comes from js/thresholds.js and always sits next to
the figure it describes, which is in the table below the paragraph. And it never
pretends to cover ground it does not — a Scottish postcode gets an explicit
"data.police.uk does not publish Scottish data" with a link to Police Scotland,
not a blank card. Deprivation deciles are computed against each nation's own
index and denominator.
An AI summary is optional and off by default. There is no server here to
keep an API key in, so it uses one you paste yourself, stored in your own
browser and sent to nothing but api.anthropic.com. The model is given only
the computed facts, and every number it writes back is checked against them —
anything untraceable is flagged rather than shown quietly. Without a key there
is a "copy the prompt" button, and the report is complete either way.
Local development (both pages fetch data/registry.json, which file://
blocks):
bash
python3 -m http.server 8000 # then http://localhost:8000/report.html?postcode=SW111AA
MCP server
mcp/ exposes all of this to AI agents over the Model Context
Protocol — five tools: a full postcode report, a fast geography lookup, a
side-by-side comparison of up to five postcodes, and search/fetch over the
registry itself.
There is nothing to install. Paste this into your client's connector or custom
integration field:
https://agentic-house-search.vercel.app/mcp
Or add it in one command:
bash
claude mcp add --transport http agentic-house-search https://agentic-house-search.vercel.app/mcp
Or, in a client that supports the
official MCP registry, add it by
name without a URL at all — search agentic-house-search, or use
io.github.asturksever/agentic-house-search.
The connect page
has the same thing with a copy button and per-client instructions. The hosted
endpoint is free, needs no account or key, and carries a courtesy rate limit
that exists to protect the government APIs underneath — not to sell you
anything. Running it yourself has no limit:
bash
npx -y agentic-house-search # stdio, published on npm
npx -y agentic-house-search --http # your own streamable HTTP endpoint
It runs the same provider modules as report.html rather than a
reimplementation, so a threshold, a coverage gate or a caveat is written once
and both surfaces agree. See mcp/README.md.
Schema
json
{"id":"police-street-crime","dataset":"Street-level crime, outcomes and stop & search","publisher":"Home Office / UK police forces (data.police.uk)","link":"https://data.police.uk/","api":"https://data.police.uk/api/crimes-street/all-crime?lat={lat}&lng={lng}&date={YYYY-MM}","api_docs":"https://data.police.uk/docs/","format":"JSON REST API (no key required); CSV bulk downloads","licence":"Open Government Licence v3","coverage":"England, Wales & Northern Ireland","update_frequency":"Monthly","questions":["How safe is this postcode / street compared with the borough or national average?","What are the most common offence types here (burglary, ASB, drugs, vehicle crime)?","Is crime trending up or down over the last 12-36 months?","Where are the local crime hotspots and what happened to each case (outcomes)?"],"category":"Crime"}
Local development (both pages fetch data/registry.json, which file:// blocks):
bash
python3 -m http.server 8000 # then http://localhost:8000/report.html?postcode=SW111AA
Caveats
Endpoints were verified against publisher documentation as of 2 August 2026. Government APIs move; treat api as a starting point and check api_docs before depending on it. Some entries require a free API key (Ofcom, BODS, EPC, OS Data Hub, CQC, Companies House, Land Registry CCOD). One entry — live for-sale listings — is explicitly not open data and is included so builders know where the wall is.
Missing a dataset, or spotted a dead endpoint? Open an issue or a PR editing data/registry.json — registry.html and data/registry.csv are regenerated from it.