The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the UK Property Data listing page.
UK property data in one package. Pulls Land Registry sales, EPC certificates, Rightmove listings, rental yields, stamp duty calculations, planning portal links, and Companies House records.
Use it as a Python library, CLI, HTTP API, or MCP server.
| Data Source | What It Returns |
|---|---|
| Land Registry PPD | Sold prices, dates, property types, area comps with median/percentiles |
| EPC (GOV.UK) | Energy ratings, floor area, heating costs. England & Wales only. Certificate lookup and summary search — see EPC notes below |
| Rightmove | Current listings (sale + rent), prices, agents, listing details |
| Yield Analysis | Gross yield from PPD sales + Rightmove rentals combined |
| Stamp Duty | SDLT calculation with April 2025 bands, BTL surcharge, FTB relief |
| Block Analyzer | Groups flat sales by building to spot investor exits |
| Planning | Local council planning portal lookup (99 verified councils, stdio only) |
| Companies House | Company search and lookup by name or number |
Property and Legal packs coming soon. Please get in contact if you have working experiance or expert knowledge in UK property investing, UK Estate Agents, Property and Conveyencing and would like to help shape this. paul@bouch.dev
No install required — paste the URL into your MCP client config and go.
Claude Code, Cursor, any MCP client:
Extras: [cli] for CLI, [api] for HTTP server.
All models are available at top level:
Interpretation helpers (core returns numbers, you decide how to label them):
Add --api-url http://localhost:8000 to any command to route through the HTTP API instead of calling core directly.
Interactive docs at http://localhost:8000/docs.
Key endpoints:
GET /v1/ppd/comps?postcode=SW1A+1AA&property_type=F&enrich_epc=trueGET /v1/analysis/yield?postcode=NG1+1AA&property_type=FGET /v1/analysis/rental?postcode=NG1+1AA&purchase_price=200000GET /v1/rightmove/search-url?postcode=NG1+1AA&sort_by=newestGET /v1/calculators/stamp-duty?price=300000&additional_property=truePOST /v1/property/report with { "address": "10 Downing Street, SW1A 2AA" }Full endpoint list in USER_GUIDE.md.
The EPC service moved to a GOV.UK Bearer API. Set EPC_API_TOKEN; the old
EPC_API_EMAIL/EPC_API_KEY pair authenticated against a retired host and is
not a supported fallback.
What the new upstream supports, and what it does not:
Flat/Apartment designator aside). Anything less — no address,
no match, or several matches — is refused rather than resolved to a best guess.
See USER_GUIDE.md for the CLI and REST surfaces.None —
unavailable, not zero — because producing them would mean one request per
certificate.complete,
duplicates_removed and unusable_rows; no operation claims a complete
harvest of an area.search_all_by_postcode() is unsupported — use search_summaries() for
candidate discovery, then get_certificate() for the one you need.
Create a .env file in the repo root (it is gitignored) with the variables you need.
Leave optional variables out entirely rather than assigning them empty.
KEY=sets an empty string, which is not the same as unset:os.getenv("KEY", "default")returns"", so the default never applies. This bit the EPC live tests, which sent an empty postcode upstream.
Key variables:
| Variable | Required For | Description |
|---|---|---|
EPC_API_TOKEN | EPC lookups | Bearer token from GOV.UK EPC data |
EPC_API_EMAIL | (deprecated) | Retired service; parsed only to raise a configuration error |
EPC_API_KEY | (deprecated) | Retired service; not a supported fallback |
COMPANIES_HOUSE_API_KEY | Company search | Free key from Companies House |
RIGHTMOVE_DELAY_SECONDS | No (default 0.6s) | Rate limit delay for Rightmove scraping |
OPENAI_API_KEY | Planning scraper | Vision-guided planning portal scraper |
Land Registry PPD and Rightmove work without credentials.
Deployed at https://property-shared.fly.dev with API docs at /docs and MCP endpoint at /mcp.