Commercial Ownership API
Find the company that owns a commercial property in England and Wales, with its Companies House profile and people with significant control
Commercial ownership API overview
Send a non-domestic EPC certificate number, a UPRN, or an address and postcode. The API returns the matched non-domestic EPC, the company that owns the property in HM Land Registry's UK companies (CCOD) and overseas companies (OCOD) datasets, and the Companies House profile and current people with significant control (PSCs) for each owner company.
- Non-domestic EPC fields: rating, band, property type, building environment, main heating fuel, floor area and dates
- Land Registry titles: title number, tenure, property address, and each owner's name, company number, category and address
- Companies House: company status, type, incorporation date, SIC codes and registered office
- Current PSCs: individuals, corporate entities and legal persons
- Match method and confidence for the EPC and for the ownership lookup
Coverage is England and Wales. The Land Registry ownership datasets do not include Scotland.
Authentication
All requests to the Commercial Ownership API require authentication using an API key. You can obtain your API key from your PropertyInsights dashboard after subscribing to an API plan.
Include your API key in the request header as follows:
X-API-Key: your_api_key_here
Security Warning
Commercial ownership API endpoint
/api/v1/property/commercial-ownershipFind the owner of a commercial property
Base URL
https://propertyinsights.co.uk/api/v1/property/commercial-ownership
Query Parameters
Provide exactly one of certificate_number, uprn, or address with postcode. Any other combination returns a 400 error.
| Parameter | Type | Description |
|---|---|---|
| certificate_number | string | Non-domestic EPC certificate number. Up to 40 letters, digits or hyphens. Use on its own. |
| uprn | string | Unique Property Reference Number, 1 to 12 digits. Use on its own. |
| address | string | Property address, up to 200 characters. Use with postcode. |
| postcode | string | UK postcode for the address. Use with address. |
Credits
This lookup needs 10 credits available before it runs, and charges 0, 2 or 10 credits depending on what it finds.
| Result | Credits charged |
|---|---|
| Nothing found: no EPC and no owner | 0 |
| An EPC or an owner, but no Companies House data | 2 |
| Companies House data returned for at least one owner | 10 |
If your account has fewer than 10 credits left, the request is refused with a 402 error before any lookup runs.
Billing details in the response
Successful chargeable JSON responses include a top-level billing object. The endpoint examples on this page focus on the endpoint-specific data, so this repeated block may not be shown in every example.
"billing": {
"mode": "prepaid",
"creditsCharged": 1,
"creditsRemaining": 1999,
"creditsRefreshAt": "2026-08-14T09:30:00.000Z"
}| Field or header | Meaning |
|---|---|
| billing.creditsCharged X-Credits-Charged | Credits charged by this call. Failed and non-chargeable calls return 0 in the header. |
| billing.creditsRemaining X-Credits-Remaining | The credit balance after the call. |
| billing.creditsRefreshAt X-Credits-Refresh-At | The next monthly credit refresh as an ISO 8601 timestamp. Trial and non-renewing balances return null and omit the header. |
All authenticated API-key calls expose the billing headers, including validation errors and zero-credit status or management requests. Only successful chargeable JSON responses add the billing object to the response body.
When credits run out
If your balance is lower than the cost of a request, the API returns HTTP 402 and charges nothing. The error includes the credits needed, your balance and a link to change plan.
{
"statusCode": 402,
"statusMessage": "Payment Required",
"data": {
"success": false,
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request costs 35 API credits. Upgrade your plan or wait for your monthly refresh: https://propertyinsights.co.uk/billing",
"required": 35,
"available": 12,
"upgradeUrl": "https://propertyinsights.co.uk/billing"
}
}
}Response Format
{
"success": true,
"data": {
"epc": {
"certificateNumber": "0000-0000-0000-0000-0001",
"uprn": "100000000001",
"assetRating": 62,
"assetRatingBand": "C",
"propertyType": "Retail/Financial and Professional Services",
"buildingEnvironment": "Heating and Natural Ventilation",
"mainHeatingFuel": "Natural Gas",
"floorArea": 240,
"lodgementDate": "2023-05-01",
"validUntil": "2033-04-30"
},
"ownership": [
{
"titleNumber": "ZZ000001",
"tenure": "Freehold",
"propertyAddress": "Unit 4, Example Trading Estate, Exampletown (ZZ1 1ZZ)",
"ownerType": "uk",
"multipleAddress": false,
"owners": [
{
"name": "EXAMPLE PROPERTIES LIMITED",
"companyNumber": "00000001",
"category": "Limited Company or Public Limited Company",
"address": "1 Example Road, Exampletown, ZZ1 1ZZ"
}
]
}
],
"companies": {
"00000001": {
"status": "ok",
"profile": {
"companyNumber": "00000001",
"name": "EXAMPLE PROPERTIES LIMITED",
"status": "active",
"type": "ltd",
"incorporatedOn": "2010-01-01",
"sicCodes": ["68209"],
"registeredOffice": {
"addressLine1": "1 Example Road",
"addressLine2": null,
"locality": "Exampletown",
"region": null,
"postalCode": "ZZ1 1ZZ",
"country": "England"
}
},
"pscs": [
{
"kind": "individual",
"name": "Ms Example Person",
"naturesOfControl": ["ownership-of-shares-75-to-100-percent"],
"notifiedOn": "2016-04-06",
"countryOfResidence": "England"
}
]
}
},
"match": {
"epc": { "method": "certificate_number", "confidence": 100, "ambiguous": false, "truncated": false },
"ownership": { "method": "fuzzy", "confidence": 80, "ambiguous": false, "truncated": false }
}
}
}Fields
epcis the matched non-domestic EPC, or null. It leaves out the EPC register's address and postcode. The address shown is the Land Registry title'spropertyAddress.ownershiplists every Land Registry title at the best match.ownerTypeisuk(CCOD) oroverseas(OCOD). Overseas owners also havecountryIncorporated.companiesis always present and is an empty object when no company was looked up. It is keyed by company number, matching the numbers inownership. Each entry has astatusofok,not_found,rate_limitedorerror.profileandpscsare null unless the status isok. Companies House data is cached for up to 30 days.pscslists current PSCs only. Each has akind:individual,corporate,legal_personorsuper_secure(details withheld by Companies House).- Individual PSCs show only name, nature of control, notified date, country of residence and
kind. There is no date of birth, nationality or address. - Corporate and legal person PSCs show name, registration number, legal form, nature of control and notified date.
Matching and confidence
match.epc and match.ownership each have method, confidence (0 to 100), ambiguous and truncated.
- When you send a
certificate_numberoruprn, the ownership lookup uses the matched EPC's address. If you send an address, your address is used for ownership. - Matches below a confidence of 60, including ambiguous or truncated ones, are returned in
ownershipwith their flags set, but they are not looked up at Companies House, socompaniesis empty. They cost 2 credits. ambiguousis true when the best matches describe different addresses.truncatedis true when a postcode had too many records to check them all. Both lower the confidence.- A title that covers several addresses (
multipleAddress) caps the confidence at 70. - Overseas owners are looked up at Companies House only when their registration number starts with OE, FC or BR. Other overseas numbers are home-country numbers and are not looked up.
What it does not cover
- Asset managers and managing agents. The owner is the registered proprietor at HM Land Registry, which is often a holding company.
- Contact details and email addresses.
- Company officers such as directors and secretaries. Only people with significant control are returned.
- Properties owned by individuals. The Land Registry company datasets list company owners only.
- Scotland.
Examples
Look up by address and postcode
curl -X GET "https://propertyinsights.co.uk/api/v1/property/commercial-ownership?address=Unit%204%2C%20Example%20Trading%20Estate%2C%20Exampletown&postcode=ZZ1%201ZZ" \
-H "x-api-key: YOUR_API_KEY"Look up by UPRN
curl -X GET "https://propertyinsights.co.uk/api/v1/property/commercial-ownership?uprn=100000000001" \
-H "x-api-key: YOUR_API_KEY"Look up by EPC certificate number
curl -X GET "https://propertyinsights.co.uk/api/v1/property/commercial-ownership?certificate_number=0000-0000-0000-0000-0001" \
-H "x-api-key: YOUR_API_KEY"Error Handling
The API uses standard HTTP response codes and returns detailed error information in JSON format. All errors follow a consistent structure to help you handle them appropriately in your application.
| HTTP Code | Error Code | Description |
|---|---|---|
| 400 | INVALID_INPUT | Provide exactly one of certificate_number, uprn, or address with postcode |
| 400 | INVALID_CERTIFICATE_NUMBER | certificate_number must be up to 40 letters, digits or hyphens |
| 400 | INVALID_UPRN | uprn must be 1 to 12 digits |
| 400 | MISSING_ADDRESS | address is required with postcode |
| 400 | MISSING_POSTCODE | postcode is required with address |
| 400 | INVALID_ADDRESS | address must be 200 characters or fewer |
| 400 | INVALID_POSTCODE | postcode must be a valid UK postcode |
| 401 | AUTHENTICATION_REQUIRED | Valid API key is required |
| 402 | INSUFFICIENT_CREDITS | Not enough API credits remaining to perform operation |
| 500 | DATABASE_ERROR | Error accessing database - please try again |
| 500 | INTERNAL_SERVER_ERROR | An unexpected error occurred |
Error Response Format
{
"success": false,
"error": {
"code": "INVALID_INPUT",
"message": "Provide exactly one of certificate_number, uprn, or address with postcode."
}
}Need Help?
If you have questions about the Commercial Ownership API or need help with implementation, contact our team.
Contact Support