
Property SDK: Build Smarter with Our Python Toolkit
15 SEPTEMBER 2025Property SDK: Build Smarter with Our Python Toolkit

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
Database Scale & Coverage
- 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
Commercial Properties Insights
- Total Business Properties: 1.9M
- With Rateable Values: 1.1M (57.7%)
- With Identified Ratepayers. 717K properties
Residential Properties Insights
- With Sale Price History: 15.1M (66.9%)
- Average Sale Price: £267,715
- With Energy Performance Ratings: 18.6M (82.4%)
Key Data Features Available
- 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
Source build (latest development version)
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
Authentication
from doorda_sdk.host import client
conn = client.connect(
username="your_doorda_username",
password="your_doorda_password",
catalog="views",
schema="doorda"
)
cursor = conn.cursor()
First Request – Fetch sample data
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
Data Query
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()
Filtering & Pagination
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)
Export to File
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
How do I get the price paid for properties in E1 4%
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)
How do I get a list of addresses owned by housing associations?
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)
How do I get a list of addresses over 50 square metres in size with their EPC score for E1?
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
- Documentation https://portal.doorda.com
- Chatbot https://chat.doorda.ai/
- GitHub Repository https://github.com/Doorda/doorda-python-sdk/releases
- Contact Support support@doorda.com
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.