Property SDK: Build Smarter with Our Python Toolkit

15 SEPTEMBER 2025

The PropertyX database provides comprehensive coverage of UK commercial and residential properties with detailed attributes suitable for property analysis, market research, energy efficiency studies, and commercial property valuation.

This guide will help you get started uisng the Doorda SDK on PropertyX

Data Summary: Access via Property SDK
  • Total Properties: 34.3 million records
  • Geographic Coverage: 1.88 million unique postcodes across 1,484 towns/cities
  • Data Currency: Records span from August 1997 to August 2025
  • Property Categories: 128 distinct primary categories
  • Total Business Properties: 1.9M
  • With Rateable Values: 1.1M (57.7%)
  • With Identified Ratepayers. 717K properties
  • With Sale Price History: 15.1M (66.9%)
  • Average Sale Price: £267,715
  • With Energy Performance Ratings: 18.6M (82.4%)
  • Location Data: Full addresses, postcodes, geographic coordinates
  • Building Characteristics: Height, floors, basement presence, property size
  • Commercial Data: Business rates, ratepayer details, company registrations
  • Residential Data: Sale prices, energy performance, construction year
  • Energy Certificates: Both domestic (EPC) and non-domestic (NDEPC) ratings
  • Planning Data: Planning application flags
  • Company Data: Director and company registration information

PropertyX provides comprehensive coverage of UK properties with detailed attributes suitable for property analysis, market research, energy efficiency studies, and commercial property valuation.

Use it to:

  • Pull live property attributes (price paid, EPC rating, business rates, owner, height, floors, tenure, company directors, planning flags) in one call
  • Enrich addresses with precise geolocation, UPRN/UDPRN, and government hierarchies (OA, LSOA) for instant spatial analytics
  • Skip brittle APIs and run full SQL joins, aggregations, and bulk exports directly against the database
Quick Start Guide
Installation
wget https://github.com/Doorda/doorda-python-sdk/archive/1.0.9.zip  
unzip 1.0.9.zip  
cd doorda-python-sdk-1.0.9  
python setup.py install

PyPI (recommended for production)

pip install doorda-sdk

from doorda_sdk.host import client
conn = client.connect(
username="your_doorda_username",
password="your_doorda_password",
catalog="views",
schema="doorda"
)
cursor = conn.cursor()

cursor.execute("""
SELECT full_address, residential_price_paid, primary_category
FROM views.doorda.propertyx
LIMIT 5
""")
for row in cursor.fetchall():
print(row)

Core Features
cursor.execute("""
SELECT full_address, business_rates, residential_price_paid
FROM views.doorda.propertyx
WHERE post_town = 'LEEDS'
AND business_rates > 50000
""")
results = cursor.fetchall()

cursor.execute("""
SELECT full_address, primary_category, residential_energy_performance
FROM views.doorda.propertyx
WHERE type = 'Residential'
ORDER BY residential_price_paid DESC
LIMIT 100 OFFSET 0
""")
for row in cursor:
print(row)

import pandas as pd
cursor.execute("SELECT * FROM views.doorda.propertyx WHERE postcode LIKE 'SW1%'")
df = pd.DataFrame(cursor.fetchall(), columns=[desc[0] for desc in cursor.description])
df.to_csv("/home/user/westminster_properties.csv", index=False)

Advanced Usage
from doorda_sdk.host import client try:

conn = client.connect(
username="your_doorda_username",
password="your_doorda_password",
catalog="views",
schema="doorda"
)
cursor = conn.cursor()

# Parameterized query to avoid SQL injection
cursor.execute("""
    SELECT full_address, business_rates, residential_price_paid
    FROM views.doorda.propertyx
    WHERE dars = %s
""", ("D100E8IB3-00001",))

result = cursor.fetchone()
if result:
    print("Property found:", result)
else:
    print("No property found for that DAR.")

except Exception as e:
print("Error:", e)

Example Code Snippets
from doorda_sdk.host import client
conn = client.connect(username='you', password='pass', catalog='views', schema='doorda')
cursor = conn.cursor()

cursor.execute("""
SELECT full_address, residential_price_paid, residential_date_price_paid
FROM views.doorda.propertyx
WHERE postcode LIKE 'E1 4%'
AND residential_price_paid IS NOT NULL
ORDER BY residential_date_price_paid DESC
""")

for row in cursor.fetchall():
print(row)

from doorda_sdk.host import client

conn = client.connect(username='you', password='pass', catalog='views', schema='doorda')
cursor = conn.cursor()

cursor.execute("""
    SELECT full_address, commercial_owner, residential_price_paid_tenure
    FROM views.doorda.propertyx
    WHERE LOWER(commercial_owner) LIKE '%housing association%'
       OR LOWER(commercial_owner) LIKE '%housing society%'
       OR LOWER(commercial_owner) LIKE '%council%'
    ORDER BY full_address
""")

for row in cursor.fetchall():
    print(row)

from doorda_sdk.host import client

conn = client.connect(username='you', password='pass', catalog='views', schema='doorda')
cursor = conn.cursor()

cursor.execute("""
    SELECT full_address,
           residential_address_size,
           residential_energy_performance
    FROM views.doorda.propertyx
    WHERE postcode LIKE 'E1 %'
      AND residential_address_size >= 50
      AND residential_energy_performance IS NOT NULL
    ORDER BY residential_address_size DESC
""")

for row in cursor.fetchall():
    print(row)

Resources & Support
FAQ

Q1: What is the Doorda PropertyX SDK?

A: It’s a lightweight Python library that opens a direct SQL connection to the PropertyX database so you can query every UK address, EPC, business-rate, commercial ownership and occupant in real time—no REST endpoints to learn.

Q2: Which languages are supported?

A: Python 3.6+ today; the underlying Trino wire-protocol also works with any JDBC/ODBC client (Java, R, Go, etc.) if you prefer.

Q3: How do I get database credentials? 

A: Contact our sales team to discuss your requirements sales@doorda.com

Q4: Is there a usage limit?

A: Limits are expressed in MB/GB per month, volume is dependant on your plan. Total dataset is 13GB.