Open data
Open Dubai Property Graph
A public join of Dubai's unit register with registered sales and Ejari rents: every building (or project) by home type and bedrooms, with its registered stock, sale and rent ranges, turnover, and the DLD IDs that link the registers. Built from Dubai Land Department open data, with the hit rate of the join published below.
Data as of · 25,980 archetypes · 22,668 crosswalk rows · prices only with at least 6 ready sales in 12 months (rents: 6 new contracts).
Download
| File | Format | Rows | Size | SHA-256 |
|---|---|---|---|---|
| Archetypes One row per building (or project) × home type × bedrooms | PARQUET | 25,980 | 1.1 MB | 55580076 |
| CSV | 25,980 | 9.0 MB | a66c4b3b | |
| JSONL | 25,980 | 30.7 MB | e4c85b77 | |
| Crosswalk DLD IDs and names linking units, buildings, projects, sales and Ejari | PARQUET | 22,668 | 547 KB | 95689919 |
| CSV | 22,668 | 2.8 MB | f29f2b0a | |
| JSONL | 22,668 | 9.1 MB | 5937ceed | |
| Match report How many sales and Ejari contracts reach a building, and how | JSON | 7 KB | 98c5e85a | |
| MD | 5 KB | 1be87365 | ||
| Data package Frictionless descriptor: column dictionary, sources, licence, hashes | JSON |
Parquet is the smallest and keeps column types. Each file name stays the same between versions; the folder carries the date (/data/open/2026-10-26/). Full hashes are in the data package.
How well the registers join
The DLD publishes sales, Ejari rent contracts, the unit register, buildings and projects as separate datasets with no common key for a building. We join them only on official identifiers: the DLD project number, or else an exact project name that points to a single project in the same DLD area. Nothing else is matched: no fuzzy names, no guessing which tower is which.
| Records, last 12 months | n | Building | Project only | Sale name only | Unassigned |
|---|---|---|---|---|---|
| DLD sales · All | 151,182 | 50.0% | 44.4% | 4.9% | 0.7% |
| DLD sales · Apartments, off-plan | 107,055 | 58.7% | 41.1% | 0.2% | 0.0% |
| DLD sales · Apartments, ready | 28,240 | 44.9% | 29.4% | 25.7% | 0.0% |
| DLD sales · Villas, off-plan | 10,583 | 0.0% | 100.0% | 0.0% | 0.0% |
| DLD sales · Villas, ready | 5,304 | 0.0% | 79.6% | 0.0% | 20.4% |
| Ejari rents · All | 613,449 | 15.6% | 15.9% | 0.0% | 68.5% |
| Ejari rents · Apartments, new contracts | 218,778 | 28.3% | 17.5% | 0.0% | 54.2% |
| Ejari rents · Apartments, renewals | 331,676 | 10.1% | 8.4% | 0.0% | 81.5% |
| Ejari rents · Villas, new contracts | 28,706 | 0.0% | 64.7% | 0.0% | 35.3% |
| Ejari rents · Villas, renewals | 34,289 | 0.0% | 38.0% | 0.0% | 62.0% |
- Building: assigned to one building of the DLD unit register (single-building projects, or buildings with no project).
- Project only: the project has several towers and the register does not say which is which, or it is a villa project. Those rows stay at project level.
- Sale name only: a sale with no DLD project, kept under its own building name in its DLD area, with no register stock and no rent.
- Unassigned: no project and no building name. Ejari never names the building.
Where a record carries both a project number and a matching name, the two methods disagree in 0 sales and 0 Ejari contracts.
Unit register: 1,491,416 residential units, 82.0% assigned to a building or project.
Limitations
- Ejari (rent_contracts) never names the building, and about two thirds of contracts carry no DLD project, so they can only be linked to an area or master project. Rents are attached to a building only when the project has one residential building.
- In projects with several towers, `units` identifies each building by an ID but not by name, and `transactions` names the tower but gives no ID. Those projects are published at project level, never split by guesswork.
- Older freehold buildings with no DLD project in the records (International City, Discovery Gardens, The Greens, parts of Business Bay and others) appear only under their transaction building name: no registry stock and no rent.
- The units registry includes off-plan units registered before completion, so stock and turnover in projects under construction count units that are not built yet.
- Bedrooms come from the DLD record; sales and units without a bedroom count are left out of the archetypes. Villa sales without bedrooms take them from the buildings registry by exact plot size (same rule as the site).
- The `projects` table is the version served by data.dubai on the snapshot date (see datapackage sources), which may be newer than as_of.
What is in it, and what is not
- Aggregates only. Nothing below building × home type × bedrooms: no unit numbers, no plot numbers, no transaction or contract numbers, no owners or tenants.
- No value per unit. We do not publish an estimated value for each flat: it would add nothing to the building figures and would look like a valuation.
- Registered figures, not forecasts. Our 12-month forecasts are a model and live on the area pages and the API, labelled as such; they are not in this dataset.
- No portal data. Nothing comes from listing portals. Every figure comes from the DLD datasets below.
- Abstention. A price is published only with enough registered deals; otherwise the row says why it abstains.
Method: how we price. One building at a time, with the same IDs: resolve_entity in our MCP server and API.
Column dictionary
Archetypes (43 columns)
| Column | Type | Meaning |
|---|---|---|
archetype_id | string | Stable key: entity_id + ':' + segment. |
as_of | date | Last DLD transaction date in the data; all 12-month windows end here. |
level | string | building = one DLD registry building; project = a whole DLD project (several towers, or villas); transactions_only = a building name seen only in DLD transactions. |
entity_id | string | b<DLD building ID>, p<DLD project_id> or t<hash of area + building name>. |
property_type | string | apartment or villa (villas include townhouses). |
segment | string | FairSqft segment key, e.g. apartment-2br, apartment-5br-plus, villa-4br. |
bedrooms | string | studio, 1, 2, … with '+' for the top bucket (apartments 5+, villas 7+). |
area_id | string | DLD area_id. |
area_name_en | string | DLD area name (area_name_en). |
fairsqft_area_slug | string | FairSqft area (DLD master project, or DLD area) used for the site's area pages. |
master_project_id | string | DLD master_project_id (registry), when present. |
master_project_en | string | DLD master project name. |
project_id | string | DLD project_id (units, buildings, projects). |
project_number | string | DLD project_number (projects, transactions, Ejari). |
project_name_en | string | DLD project name, most frequent spelling (registry first). |
dld_building_id | string | ID of the building record: the parent_property_id shared by its units in DLD `units`. Never a unit's or a villa's ID. |
building_name_en | string | Building name as written in DLD transactions (most frequent spelling). |
n_buildings_registry | integer | Residential buildings of the project in DLD `units`. |
names_seen | array | Up to 10 distinct names of this entity in units, buildings, transactions and Ejari, most frequent first (CSV: JSON-encoded list). |
stock_units | integer | Registered units of this type and bedrooms: apartments from DLD `units` (complete registry), villas from DLD `buildings`. Includes off-plan units already registered. |
stock_source | string | units or buildings. |
ready_n_12m | integer | Ready (resale) DLD sales in 12 months, after the site's cleaning rules. |
ready_p25_aed | integer | 25th percentile of ready sale prices (AED, rounded to 5,000); null if n < 6. |
ready_median_aed | integer | Median ready sale price (AED, rounded to 5,000); null if n < 6. |
ready_p75_aed | integer | 75th percentile of ready sale prices (AED, rounded to 5,000); null if n < 6. |
ready_median_aed_per_sqft | integer | Apartments: median ready price per sqft; null if n < 6. |
ready_abstain | boolean | True when ready sales are below 6 in 12 months: no price verdict (FairSqft /method/). |
ready_abstain_reason | string | Why there is no price verdict. |
offplan_n_12m | integer | Off-plan DLD sales in 12 months. |
offplan_p25_aed | integer | 25th percentile of off-plan prices (AED, 5,000); null if n < 6. Descriptive only: FairSqft never prices off-plan. |
offplan_median_aed | integer | Median off-plan price (AED, 5,000); null if n < 6. Descriptive only. |
offplan_p75_aed | integer | 75th percentile of off-plan prices (AED, 5,000); null if n < 6. Descriptive only. |
rent_new_n_12m | integer | New Ejari contracts (single property) started in 12 months. |
rent_new_p25_aed | integer | 25th percentile of new annual rents (AED, rounded to 1,000); null if n < 6. |
rent_new_median_aed | integer | Median new annual rent (AED, 1,000); null if n < 6. |
rent_new_p75_aed | integer | 75th percentile of new annual rents (AED, 1,000); null if n < 6. |
rent_abstain | boolean | True when new Ejari contracts are below 6 in 12 months: no rent verdict. |
rent_abstain_reason | string | Why there is no rent verdict. |
rent_renewal_n_12m | integer | Ejari renewals started in 12 months. |
rent_renewal_p25_aed | integer | 25th percentile of renewal rents (AED, 1,000); null if n < 6. |
rent_renewal_median_aed | integer | Median renewal rent (AED, 1,000); null if n < 6. |
rent_renewal_p75_aed | integer | 75th percentile of renewal rents (AED, 1,000); null if n < 6. |
turnover_12m | number | ready_n_12m / stock_units: share of the registered stock resold in 12 months. |
Crosswalk (16 columns)
| Column | Type | Meaning |
|---|---|---|
source | string | DLD dataset of this row: transactions, rent_contracts, units, buildings (villas) or projects. |
property_type | string | apartment or villa. |
area_id | string | DLD area_id. |
area_name_en | string | DLD area name (area_name_en). |
master_project_id | string | DLD master_project_id (registry), when present. |
master_project_en | string | DLD master project name. |
project_id | string | DLD project_id (units, buildings, projects). |
project_number | string | DLD project_number (projects, transactions, Ejari). |
project_name_en | string | DLD project name, most frequent spelling (registry first). |
building_name_en | string | Building name as written in DLD transactions (most frequent spelling). |
dld_building_id | string | ID of the building record: the parent_property_id shared by its units in DLD `units`. Never a unit's or a villa's ID. |
match_method | string | project_number, project_name (exact name in the same area, unique project_id), project_id or parent_property_id (registry), building_name_in_area (transactions without a project), or none. |
level | string | Level of the entity the row is assigned to (null: not assigned). |
entity_id | string | Archetype entity the row is assigned to (null: not assigned). |
n_records | integer | Records with this combination: sales and Ejari in 24 months, registry units or villas, or 1 for a project. |
n_records_12m | integer | Sales or Ejari records with this combination in 12 months. |
Licence and sources
Source: Dubai Land Department (DLD) open data, published on data.dubai. Analysis: FairSqft. Not endorsed by the DLD or the Government of Dubai.
These derived DLD figures are offered under the same Open Data Licence, with no additional terms (clauses 3.1 and 3.3). Credit the Dubai Land Department and link the source dataset (clause 3.2). Do not imply endorsement by the DLD or the Government of Dubai (clause 3.2.2). Licence: Dubai Open Data Licence (data.dubai). A link to this page is welcome but not required.
- Dubai Land Department: Real Estate Transactions · retrieved 2026-10-28
- Dubai Land Department: Rent Contracts (Ejari) · retrieved 2026-10-28
- Dubai Land Department: Registered Freehold Real Estate Units · retrieved 2026-10-28
- Dubai Land Department: Building and Property Project Records · retrieved 2026-10-28
- Dubai Land Department: Real Estate Projects · retrieved 2026-11-13
Based on Dubai Land Department open data. Not a valuation, not financial advice. FairSqft is independent and not endorsed by the DLD or the Government of Dubai. Questions or a number that looks wrong: hello@fairsqft.com.