- Data
- MCP server
- Property record
- Reconcile a property across sources
Reconcile a property across sources
property_reconcileCross-source feature reconciliation for a UPRN — surfaces divergence
Same call over REST
Property reconcile/v1/property/{uprn}/reconcileNot connected yet? Connect your assistant. Sign in with your MarketCode account; no API key needed.
Inputs
Before you call it
- uprn
- A UPRN is the Unique Property Reference Number every UK address carries. Narrow the address with address_autocomplete, which is free, then address_resolve returns the UPRN for 8 credits. property_summary and address_by_postcode return UPRNs too.
Example
An example call to property_reconcile
Use the MarketCode tool property_reconcile with {"uprn":"200003443835"} and show me the result.{
"uprn": "<string>",
"country": "<string>",
"data": {
"data": {
"uprn": 0,
"features": {
"bedrooms": {
"feature_label": "<string>",
"unit": "<string>",
"sources": "<string>",
"distinct_non_null_values": "<string>",
"divergence_ratio": null,
"needs_user_confirmation": false,
"primary_value": null,
"primary_source": null,
"primary_reason": null,
"suspect_sources": "<string>"
},
"bathrooms": {
"feature_label": "<string>",
"unit": "<string>",
"sources": "<string>",
"distinct_non_null_values": "<string>",
"divergence_ratio": null,
"needs_user_confirmation": false,
"primary_value": null,
"primary_source": null,
"primary_reason": null,
"suspect_sources": "<string>"
},
"floor_area_sqm": {
"feature_label": "<string>",
"unit": "<string>",
"sources": "<string>",
"distinct_non_null_values": "<string>",
"divergence_ratio": null,
"needs_user_confirmation": false,
"primary_value": 0,
"primary_source": "<string>",
"primary_reason": "<string>",
"suspect_sources": "<string>"
},
"epc_current": {
"feature_label": "<string>",
"unit": null,
"sources": "<string>",
"distinct_non_null_values": "<string>",
"divergence_ratio": null,
"needs_user_confirmation": false,
"primary_value": null,
"primary_source": null,
"primary_reason": null,
"suspect_sources": "<string>"
},
"council_tax_band": {
"feature_label": "<string>",
"unit": null,
"sources": "<string>",
"distinct_non_null_values": "<string>",
"divergence_ratio": null,
"needs_user_confirmation": false,
"primary_value": null,
"primary_source": null,
"primary_reason": null,
"suspect_sources": "<string>"
},
"tenure_type": {
"feature_label": "<string>",
"unit": null,
"sources": "<string>",
"distinct_non_null_values": "<string>",
"divergence_ratio": null,
"needs_user_confirmation": false,
"primary_value": null,
"primary_source": null,
"primary_reason": null,
"suspect_sources": "<string>"
},
"year_built": {
"feature_label": "<string>",
"unit": null,
"sources": "<string>",
"distinct_non_null_values": "<string>",
"divergence_ratio": null,
"needs_user_confirmation": false,
"primary_value": "<string>",
"primary_source": "<string>",
"primary_reason": "<string>",
"suspect_sources": "<string>"
}
},
"ambiguous_features": [],
"needs_user_confirmation": false,
"execution_time_ms": 0
}
},
"credits_charged": 0
}Shape only. This call returns licensed records, so the keys are real and every value is a placeholder of its type.
Inputs
Arguments property_reconcile takes
| Name | Type | Required | Description |
|---|---|---|---|
| uprn | string | Yes |
Response
What comes back
| Field | Type |
|---|---|
| uprn | string |
| country | string |
| data | object |
| data.data | object |
| data.data.uprn | integer |
| data.data.features | object |
| data.data.features.bedrooms | object |
| data.data.features.bedrooms.feature_label | string |
| data.data.features.bedrooms.unit | string |
| data.data.features.bedrooms.sources | string |
| data.data.features.bedrooms.distinct_non_null_values | string |
| data.data.features.bedrooms.divergence_ratio | null |
| data.data.features.bedrooms.needs_user_confirmation | boolean |
| data.data.features.bedrooms.primary_value | null |
| data.data.features.bedrooms.primary_source | null |
| data.data.features.bedrooms.primary_reason | null |
| data.data.features.bedrooms.suspect_sources | string |
| data.data.features.bathrooms | object |
| data.data.features.bathrooms.feature_label | string |
| data.data.features.bathrooms.unit | string |
| data.data.features.bathrooms.sources | string |
| data.data.features.bathrooms.distinct_non_null_values | string |
| data.data.features.bathrooms.divergence_ratio | null |
| data.data.features.bathrooms.needs_user_confirmation | boolean |
| data.data.features.bathrooms.primary_value | null |
| data.data.features.bathrooms.primary_source | null |
| data.data.features.bathrooms.primary_reason | null |
| data.data.features.bathrooms.suspect_sources | string |
| data.data.features.floor_area_sqm | object |
| data.data.features.floor_area_sqm.feature_label | string |
| data.data.features.floor_area_sqm.unit | string |
| data.data.features.floor_area_sqm.sources | string |
| data.data.features.floor_area_sqm.distinct_non_null_values | string |
| data.data.features.floor_area_sqm.divergence_ratio | null |
| data.data.features.floor_area_sqm.needs_user_confirmation | boolean |
| data.data.features.floor_area_sqm.primary_value | integer |
| data.data.features.floor_area_sqm.primary_source | string |
| data.data.features.floor_area_sqm.primary_reason | string |
| data.data.features.floor_area_sqm.suspect_sources | string |
| data.data.features.epc_current | object |
| data.data.features.epc_current.feature_label | string |
| data.data.features.epc_current.unit | null |
| data.data.features.epc_current.sources | string |
| data.data.features.epc_current.distinct_non_null_values | string |
| data.data.features.epc_current.divergence_ratio | null |
| data.data.features.epc_current.needs_user_confirmation | boolean |
| data.data.features.epc_current.primary_value | null |
| data.data.features.epc_current.primary_source | null |
| data.data.features.epc_current.primary_reason | null |
| data.data.features.epc_current.suspect_sources | string |
| data.data.features.council_tax_band | object |
| data.data.features.council_tax_band.feature_label | string |
| data.data.features.council_tax_band.unit | null |
| data.data.features.council_tax_band.sources | string |
| data.data.features.council_tax_band.distinct_non_null_values | string |
| data.data.features.council_tax_band.divergence_ratio | null |
| data.data.features.council_tax_band.needs_user_confirmation | boolean |
| data.data.features.council_tax_band.primary_value | null |
| data.data.features.council_tax_band.primary_source | null |
| data.data.features.council_tax_band.primary_reason | null |
| data.data.features.council_tax_band.suspect_sources | string |
| data.data.features.tenure_type | object |
| data.data.features.year_built | object |
| data.data.ambiguous_features | array |
| data.data.needs_user_confirmation | boolean |
| data.data.execution_time_ms | number |
| credits_charged | integer |
Fields observed in the example response above; a field the example did not exercise is not listed.
Usage
How to run property_reconcile in your assistant
Ask your assistant in plain English, for example:
"Use the MarketCode tool property_reconcile for <address or area>.
Show the result and the credits charged."
The arguments the assistant will send, for the example on this page:
{"uprn":"200003443835"}The connect steps for Claude, ChatGPT, Codex, Cursor and Claude Code are on the MCP page.
Price and licence
What it costs, and where the data comes from
property_reconcile costs 3 credits per successful call over MCP and over REST, and the two surfaces share one credit balance.
The price covers licensed records in the response, from Ordnance Survey, Valuation Office Agency, Ministry of Housing, Communities and Local Government and Property portals. A call that fails is not charged.
Credits are granted on sign-up and bought in packs; the pricing page lists every call.
Computed by MarketCode from
- Ordnance Survey
National Geographic Database (buildings, land and sites)
Used under licence from Ordnance Survey · Great Britain
- Valuation Office Agency
Council tax valuation list
Crown copyright · England and Wales
- Ministry of Housing, Communities and Local Government
Energy Performance Certificates (domestic and non-domestic)
MHCLG's EPC open data terms · England and Wales
- Property portals
Sale and lettings listings
Collected from publicly marketed listings · Great Britain
How the model or index is built, and where it is weak, is on the methodology page.
Related
Tools used with property_reconcile
- Commercial property report: RV, indexes, yield, owner2 credits
commercial_propertyThe commercial property report, by UPRN or by VOA UARN: the hereditament as the 2026 rating list describes it (rateable value, sector, description), the sector's rent index across the 2010/2017/2023/2026 lists and its capital index (national, plus the local authority where one exists), an income-basis value that capitalises the RV at the district's commercial auction net yield — with the yield's receipt, and `not_available` where the district published none — the auction history at the address, the district's commercial auction market by quarter, the registered owner and the lease. Blocks that cannot be derived today say `not_available` with the reason (the RV history per hereditament; the VOA measured area). RV is a rating measure at the antecedent valuation date, not passing rent — say so when you quote the income-basis figure. UK only.Same category - Council tax bandFree
council_tax_bandVOA council tax band for a property, from the official list.Same category - Energy rating, MEES and the retrofit gap1 credit
property_energy_retrofitThe energy picture for one property: current rating against the certificate's own potential, the points and letter bands available, the fabric and heating the assessor recorded, and MEES.Same category - Registered lease: term, unexpired years, flags1 credit
property_leaseHow long is left on the lease, and does it bite: the governing registered lease at this property with its receipt — term, unexpired years computed today, `is_short_lease` (under 80 years, where extension costs marriage value and lenders start refusing) and the under-60 flag, alienation clause, lease price paid, the enfranchisement note and the valuation note (the estimate does not adjust for a short term). `status: no_lease` with the reason when the register holds none; a freehold house is one such reason. UK only.Same category - Registered leases for up to 100 properties1 credit
property_lease_batch`property_lease` for up to 100 properties in one call, per-item outcomes (ok | no_lease | not_found | error) in input order. Charged per property answered — the sum of the single calls, never more. UK only.Same category - Rent estimate with its basis and yield1 credit
property_rental_estimateWhat this property would let for, and on what basis. Always quote the basis: `unit_asking` is the property's OWN live rental listing (an asking rent, not an achieved one); `area_asking` is the median asking rent for its bedroom band in its postcode district — a locality statistic applied to one property, so quote the p25–p75 range with it rather than the median alone. `unit_hedonic`, a per-unit model, does not exist (gap G1).Same category
FAQ
Questions about property_reconcile
How much does `property_reconcile` cost?
+
property_reconcile costs 3 credits per successful call over MCP and over REST, and the two surfaces share one credit balance. The price covers licensed records in the response, from Ordnance Survey, Valuation Office Agency, Ministry of Housing, Communities and Local Government and Property portals. A call that fails is not charged.
Do I need to resolve the address first?
+
Yes. property_reconcile takes a UPRN, not an address. Start with address_autocomplete (free) to narrow the address, then address_resolve (8 credits) to get the UPRN. An assistant with the MarketCode skills installed does both steps on its own.
Which assistants can run `property_reconcile`?
+
Any MCP client: Claude (claude.ai, Claude Desktop, Claude Code), ChatGPT in developer mode, Codex and Cursor, each documented on the MCP page. You sign in with your MarketCode account over OAuth; there is no key to paste, and the connection is read-only.
Where does the data come from?
+
Computed by MarketCode from Ordnance Survey NGD, Valuation Office Agency council tax list, Ministry of Housing, Communities and Local Government EPC register and Property portals listings. Coverage is the UK. The methodology page describes how the model or index is built.
Can I store or republish the results?
+
The response includes records we license from Ordnance Survey, Valuation Office Agency, Ministry of Housing, Communities and Local Government and Property portals. Use them in your own analysis, reports and products; bulk redistribution of the raw records or building a competing dataset from them is not covered. Ask us if you need a redistribution licence.
Does `property_reconcile` change anything?
+
No. The tool is annotated read-only on the server, so it never writes to your data or ours and an assistant can call it without a confirmation step.
Try property_reconcile in your assistant.
30-minute call. We'll connect your assistant live on a real address.