Skip to main content
29M UK properties, one API call. Get an API key →

UK property data API endpoint reference

Responses are JSON unless a route specifies CSV. Authentication uses Authorization: Api-Key YOUR_KEY on every request.

Base URL: https://api.homedata.co.uk/api

Find the property data you need

Resolve a UK address to a UPRN, then retrieve property data as JSON. Use the EPC endpoint for energy ratings and certificate details, or choose a property tier for sold prices, title data and environmental risk in one response.

New to the API? Start with the developer guide or make your first request.

Your revealed leads

Read the leads you have already revealed in Lead Source using your API key. These reads cost 0 tokens; revealing a lead is billed separately.

  • Revealed listings: GET /api/explore/my-leads/
  • Revealed properties: GET /api/explore/my-leads/properties/
  • Full CSV download: GET /api/explore/leads/export.csv

Read a page at a time

Both list routes return JSON, newest reveal first. Send page (default 1) and page_size (default 200, maximum 500). Both must be positive integers; invalid values return HTTP 400 with Must be a positive integer.

curl 'https://api.homedata.co.uk/api/explore/my-leads/?page=2&page_size=100' \
  -H 'Authorization: Api-Key YOUR_KEY'

The response’s meta contains total (all matching leads, not just this page), page, page_size and has_more. For example, with 250 matching leads, page 2 at size 100 has:

"meta": {"total": 250, "page": 2, "page_size": 100, "has_more": true}

Increment page while has_more is true. Use the same parameters on /api/explore/my-leads/properties/ to page through revealed properties.

Download everything as CSV

The export downloads all your revealed leads without paging. Optionally filter by reveal date with from and to, each in YYYY-MM-DD format. Dates are inclusive UK dates; to must be on or after from. Omit both for the full export.

curl 'https://api.homedata.co.uk/api/explore/leads/export.csv?from=2026-11-01&to=2026-11-03' \
  -H 'Authorization: Api-Key YOUR_KEY' \
  -o revealed-leads.csv

Use the dedicated export.csv route: it always returns CSV, regardless of Accept or format. Adding ?format=csv to a list route is unsupported and returns 404.

CRM Match: quote, confirm, enrich

Run the dashboard’s contact matching and move scoring from your code. Matching runs on home.co.uk, where the scores live. This wallet billing workflow uses https://homedata.co.uk/api/v1/crm-match, with Authorization: Api-Key YOUR_KEY. No session or CSRF token is needed. There is no extra request charge.

  1. Quote: POST /match with a JSON csv string. Up to 2,000 rows and 2,000,000 characters. Headers are detected; optionally pass mapping with has_header (boolean), address (zero-based column index), and optional name, email, phone indices.
  2. Confirm: re-post the exact CSV and mapping with the returned run_id and max_tokens equal to the accepted price. One token per scored contact, deduplicated to one contact per property (first contact wins). Matched-but-unscored and unmatched contacts are free.
  3. Enrich: POST /enrich with tier (Base: base, Core: core, Complete: complete) and up to 10 contact tokens. Packs use the property API’s prices: 10, 25 and 50 tokens respectively, per property served. Sending this request authorises those pack charges.

Quote request and response

POST https://homedata.co.uk/api/v1/crm-match/match
{"csv":"name,address\nAlex,12 High Street London SW1A 1AA"}

{"submitted":1,"matched_count":1,"scored_count":1,
 "unscored_count":0,"unmatched_count":0,"skipped":0,
 "pending_payment":true,"run_id":"sealed quote token",
 "price":1,"price_per_contact":1,"requoted":false}

Confirm and results

{"csv":"name,address\nAlex,12 High Street London SW1A 1AA",
 "run_id":"the returned quote token","max_tokens":1}

// Response includes the same counts, plus:
{"charged":1,"balance":99,
 "matches":[{"lead":"Alex","lead_email":null,"lead_phone":null,
   "masked_address":"High Street, SW1A","score":55,"band":"warm"}],
 "contacts":[{"lead":"Alex","lead_email":null,"lead_phone":null,
   "address":"12 High Street London SW1A 1AA",
   "masked_address":"High Street, SW1A","score":55,"band":"warm",
   "token":"sealed enrichment token"}],"unmatched":[]}

Quotes contain counts and price only. If nothing is scored, the first call returns free results directly. matches is the hottest-first preview (up to 100); contacts contains every matched property, including unscored rows with null score and band; unmatched echoes your own unmatched contacts. Only addresses go to the resolver; names, emails and phones are rejoined within the request. Uploads and results are never stored. Responses use Cache-Control: no-store.

Enrichment response

POST https://homedata.co.uk/api/v1/crm-match/enrich
{"tier":"base","tokens":["the contact's returned token"]}

{"tier":"base","fields":[],"results":[
 {"index":0,"status":"ok","tokens":10,"data":{"uprn":100012345}}
],"out_of_tokens":false}

The data object is the full property-tier response (abbreviated above). Match results expose only the masked property address and a sealed token, never a resolved UPRN or property ID. Your own input address is echoed unchanged. A paid pack includes its full address and UPRN. Tokens expire after 120 minutes and are bound to your organisation. Per-row statuses are ok, expired, failed, not_found or out_of_tokens; only successful packs are charged. Keep successful rows and stop sending batches on out_of_tokens. Pack enrichment retries are new paid property calls.

For individual columns, replace tier with fields, for example ["epc_rating","council_tax_band"]. Available keys: epc_rating, council_tax_band, bedrooms, floor_area, construction_age_band, property_type, last_sold, garden, parking, roof, broadband. Uses the dashboard’s per-field prices and masking; do not send both fields and tier.

Retries, expiry and errors

A quote lasts 30 minutes and is bound to the exact file, mapping and organisation. An expired or changed quote, or a price exceeding max_tokens, returns a new pending_payment quote without charging or revealing rows. Review it before confirming. Retry a lost confirmation response with the same body and run ID: wallet debits are idempotent. A 503 with unconfirmed:true means the charge may have landed; retry that same confirmation. A 503 with charged:false means no debit occurred.

401: missing or invalid key. 403: revoked, expired or unlinked organisation key, or a key whose endpoint list does not include CRM Match (endpoint_not_allowed; standard customer keys include it). 402: insufficient wallet tokens, with required, available and topup_url. 422: invalid CSV, mapping, tier or batch. 429: rate limit (12 match requests and 120 enrich batches per minute). 503: resolver or wallet unavailable. The incident kill switch returns 404 from /match and /enrich.

Complete endpoint catalogue

Every endpoint currently offered in the Playground. Enterprise data is arranged with our team.

  • Address Match GET
    /address/match/
  • Property, Discovery GET
    /property/:uprn/
  • Property, Address tier GET
    /property/:uprn/address/
  • Property, Base tier GET
    /property/:uprn/base/
  • Property, Core tier GET
    /property/:uprn/core/
  • Property, Complete tier GET
    /property/:uprn/complete/
  • Property, Custom (?with=…) GET
    /property/:uprn/
  • All Property Listings Enterprise
    Enquire about this data
  • Sale Events GET
    /property_sale_events/
  • Rooms GET
    /properties/:uprn/rooms/
  • Roof GET
    /properties/:uprn/roof/
  • Garden GET
    /properties/:uprn/garden/
  • Parking GET
    /properties/:uprn/parking/
  • EPC Renovations GET
    /properties/:uprn/epc_renovations/
  • Ground stability GET
    /properties/:uprn/ground_stability/
  • Dimensions GET
    /properties/:uprn/dimensions/
  • Land Area GET
    /properties/:uprn/land/
  • Construction GET
    /properties/:uprn/construction/
  • EPC Rating GET
    /properties/:uprn/epc/
  • EPC History GET
    /properties/:uprn/epc_history/
  • Environmental Risks GET
    /risks/:risk_type/
  • Deprivation Index GET
    /deprivation/
  • Price Distributions GET
    /price_distributions/:outcode/
  • Postcode Lookup GET
    /address/postcode/:postcode/
  • Land Registry Sales Enterprise
    Enquire about this data
  • Council Tax Band GET
    /council_tax_band/:uprn/
  • Council Tax Full GET
    /council_tax/:uprn/
  • Comparables Enterprise
    Enquire about this data
  • Search live listings Enterprise
    Enquire about this data
  • Unlock UPRN + Address POST
    /listing-address/
  • Land Registry Titles GET
    /property_lr_titles/:uprn/
  • Boundary Autocomplete GET
    /boundaries/autocomplete/
  • Planning Applications GET
    /planning/search/
  • Crime Data GET
    /crime/
  • Solar Assessment GET
    /solar-assessment/:uprn/
  • Postcode Profile GET
    /postcode-profile/
  • Price Growth GET
    /price-growth/:outcode/
  • Schools Nearby GET
    /schools/nearby
  • Broadband Speed GET
    /broadband/
  • Mobile Coverage GET
    /mobile-coverage/
  • Mobile coverage (one address) GET
    /properties/:uprn/mobile_coverage/
  • Amenities (all) GET
    /amenities/
  • Food GET
    /amenities/food/
  • Education GET
    /amenities/education/
  • Healthcare (OSM) GET
    /amenities/healthcare/
  • Financial GET
    /amenities/financial/
  • Civic GET
    /amenities/civic/
  • Worship GET
    /amenities/worship/
  • Culture GET
    /amenities/culture/
  • Convenience GET
    /amenities/convenience/
  • Green Spaces GET
    /amenities/green_spaces/
  • Transport GET
    /amenities/transport/
  • Shops GET
    /amenities/shops/
  • Fuel Stations (all) GET
    /fuel-stations/
  • Petrol Stations GET
    /fuel-stations/petrol/
  • EV Chargers GET
    /fuel-stations/ev/
  • Healthcare (all) GET
    /healthcare/
  • GPs GET
    /healthcare/gps/
  • Dentists GET
    /healthcare/dentists/
  • Pharmacies GET
    /healthcare/pharmacies/
  • Hospitals GET
    /healthcare/hospitals/
  • Demographics GET
    /demographics/
  • Listed Buildings GET
    /listed-buildings/
  • Stamp Duty Calculator GET
    /calculators/stamp-duty/
  • Mortgage Calculator GET
    /calculators/mortgage/
  • Rental Appraisal POST
    /rental-appraisal/
  • Flood risk expert Enterprise
    Enquire about this data
  • Plot intelligence Enterprise
    Enquire about this data
  • Development suitability Enterprise
    Enquire about this data
  • Lender-grade AVM Enterprise
    Enquire about this data
  • Subsidence risk Enterprise
    Enquire about this data
  • Land quality Enterprise
    Enquire about this data

GET

Core Property
/properties/{uprn}
GET

Core Property
/epc-checker/{uprn}/
GET

Risk & Environment
/risks/{risk_type}/?uprn={uprn}
GET

Aggregator
/postcode-profile?postcode={postcode}
GET

Market & Pricing
/price_distributions/{outcode}/
GET

Core Property
/address/postcode/{postcode}/
GET

Core Property
/address/match/
GET

25 tokens
/valuations/estimate/
GET

Core Property
/property/{uprn}/{tier}/
GET

Area Intelligence
/broadband?postcode={postcode} or ?outcode={outcode}
GET

Source: Ofcom
/mobile-coverage/?postcode={postcode}
GET

Included for every account
/boundaries/autocomplete/?q={query}
GET

Planning & Land
/property_lr_titles/{uprn}/
GET

Live Core Property
GET

Live Core Property
/council_tax/{uprn}/
GET

Planning & Land
/planning/search/?postcode={postcode}
GET

Risk & Environment
/crime/?postcode={postcode}
GET

Risk & Environment
/solar-assessment/{uprn}/
GET

/amenities/  ·  /amenities/{group}/
GET

/healthcare/  ·  /healthcare/{kind}/
GET

/fuel-stations/  ·  /fuel-stations/{kind}/
GET

/deprivation/?postcode={postcode}
GET

Area Intelligence
/schools/nearby
GET

/price-growth/{outcode}/
GET

/demographics/?postcode={postcode}
GET

Heritage
/listed-buildings/?postcode={postcode}
POST

1,000 tokens
/rental-appraisal/
GET

Calculator
/calculators/stamp-duty/?price={price}&buyer_type={type}
GET

Calculator
/calculators/mortgage/?price={price}&deposit={deposit}&rate={rate}&term={years}

Try every endpoint with your own key

The developer playground runs live requests against your account and gives you copy-paste curl / Python / Node / PHP snippets for every endpoint above.

Open the Playground →

Calling from the browser?

Don't put your API key in client-side JavaScript. Create a public key scoped to the tools and domains you need, then call the relay at /embed/v2/{tool_slug} with the public key in an Authorization: Public-Key header. Or skip the wiring entirely: drop-in widget bundles are ready for the common tools.

Integrate into your own product

Pay as you go
Homedata API Scientific, granular measurements

All 40+ production endpoints return UPRN-matched, structured JSON responses with consistent field naming and OGL-licensed source attribution: covering 29M+ UK properties across address, property, EPC, risks, planning, council tax, and market data via a single authenticated API key.

Structured as JSON · queryable by UPRN or postcode · ready to embed in any application

Exact measurements

Real values (distances, concentrations, counts) not rounded ratings

29 million UK properties covered

Every address queryable by UPRN or postcode

REST API

JSON responses and OpenAPI docs: first call in under 5 minutes

Pay as you go: 100 tokens = £1 across every endpoint, no subscription needed. Bonus tokens with an optional monthly subscription, and your first top-up matched 100%. See pricing →