Skip to content
Dubai Wealth Index
Search
Search areas, projects and buildings by name.

Every field, and what its absence means

The reference for the JSON records and for every machine-readable representation of this index.

A null in these records is a suppressed figure, not a zero. That distinction is the one most often lost in translation, so every field below states what its absence means as well as what its presence does.

Identity and provenance

id
Stable absolute identifier for the record, of the form <canonicalUrl>#record. It does not change across data refreshes.
Grainone building recordWhen nullNever null.
canonicalUrl
The human-readable page this record mirrors. Cite this, not the JSON URL.
Grainone building recordWhen nullNever null.
dataAsOfISO date
The edition of the registered data every figure in the record was computed from. Quote it with any figure taken from here.
Grainthe whole recordWhen nullNever null on a published record.
sources
The registries the figures came from. Airbnb appears only where short-term metrics are present.
Grainthe whole recordWhen nullNever null.
bedroom
One of all, studio, 1br, 2br, 3br, 4br_plus. "all" is the building-wide median across every unit size, not a sum or an average of the rows below it.
Grainone metric rowWhen nullNever null.
purpose
Which market the row measures: sale, rent, offplan or short_let. A building has a row per bedroom type per purpose.
Grainone metric rowWhen nullNever null.

Sale prices

medianPriceAED
Median registered sale price: the middle of what units actually sold for.
Grainbuilding × bedroom, trailing 12 monthsWhen nullToo few registered sales in the window to publish a median that would hold. It does not mean nothing sold.
medianPriceSqftAED per sqft
Median registered sale price per square foot of measured floor area.
Grainbuilding × bedroom, trailing 12 monthsWhen nullNo publishable price median, or no measured area on the records.
fairPsfAED per sqft
The recorded price: median price per square foot over the trailing 12 months, requiring at least five registered READY sales. medianPriceSqft and yieldPrice use the same period but pool ready and off-plan sales. Read it with fairWindowMonths and fairSaleCount; the figure is not publishable without them.
Grainbuilding x bedroom, trailing 12 monthsWhen nullNo window in the last 12 months held five ready sales. Not zero and not stale — the building has not traded enough recently for a median to mean anything.
fairPriceAED
Median total price over the same window as fairPsf. A median across the units that happened to trade, never a valuation of one apartment: floor, view, condition and layout all move a real price and none is in this figure.
Grainbuilding x bedroom, same window as fairPsfWhen nullAs fairPsf.
fairWindowMonthsmonths
The recorded-price window: 12 months for current snapshots. Historical snapshots may carry 3 or 6. A price whose window is unstated is not evidence, so every surface prints this beside the figure.
Grainbuilding x bedroomWhen nullfairPsf is null.
fairSaleCountsales
Registered ready sales inside the window. Never fewer than five: a price computed from two sales moves by a third when one penthouse trades.
Grainbuilding x bedroomWhen nullfairPsf is null.
fairAsofdate
Date of the most recent sale inside the window. A 12-month window whose newest sale is eleven months old is a different claim from one closing last week, and this is what separates them.
Grainbuilding x bedroomWhen nullfairPsf is null.
launchPsfAED per sqft
Median price per square foot of off-plan sales registered in the twelve months after the building's first off-plan sale: the developer's opening-year price for that unit type. Carried on the off-plan row only, and published at five or more launch sales.
Grainbuilding x bedroomWhen nullFewer than five off-plan sales in the launch year, no off-plan history, or an edition built before 2026-09.
launchCountsales
Off-plan sales registered in the launch year behind launchPsf.
Grainbuilding x bedroomWhen nullNo off-plan history, or an edition built before 2026-09.
growth12mPctpercent
Change in the median price per square foot, last 12 months against the 12 before. Positive is a rise.
Grainbuilding × bedroomWhen nullOne of the two windows has too few sales to compare. A flat market returns 0, not null.
psfPrev12AED per sqft
The comparison side of growth12mPct: median price per square foot over the prior 12-month window. growth12mPct = 100 × (medianPriceSqft ÷ psfPrev12 − 1). Sale rows only.
Grainbuilding × bedroom, the 12 months before the trailing 12When nullNo sales in the prior window, or an edition built before 2026-10.
txnCountPrev12sales
Sales with a price per square foot behind psfPrev12. growth12mPct is published only when this and psfCount12m are both five or more, so a null growth with a count here says which side was thin.
Grainbuilding × bedroom, prior 12 monthsWhen nullAn edition built before 2026-10.
psfCount12msales
Sales with a price per square foot in the trailing 12 months. This is the current sample behind growth12mPct, appreciation3yPct and appreciation5yPct. It can be smaller than txnCount12m when some registered sales have no usable area. Sale rows only.
Grainbuilding × bedroom, trailing 12 monthsWhen nullNo such sales, a rent or off-plan row, or an edition built before the column existed.
appreciation3yPctpercent
Change in median price per square foot, trailing 12 months against the calendar year three years before the data date (psfY3). Every building's figure covers the same span.
Grainbuilding × bedroomWhen nullFewer than five sales in the anchor year.
psfY3AED per sqft
Median price per square foot in the anchor year of appreciation3yPct.
Grainbuilding × bedroom, one calendar yearWhen nullNo sales that year, or an edition built before 2026-10.
txnCountY3sales
Sales behind psfY3; appreciation3yPct needs five.
Grainbuilding × bedroom, one calendar yearWhen nullAn edition built before 2026-10.
appreciation5yPctpercent
As appreciation3yPct, against the calendar year five years before the data date (psfY5).
Grainbuilding × bedroomWhen nullFewer than five sales in the anchor year.
psfY5AED per sqft
Median price per square foot in the anchor year of appreciation5yPct.
Grainbuilding × bedroom, one calendar yearWhen nullNo sales that year, or an edition built before 2026-10.
txnCountY5sales
Sales behind psfY5; appreciation5yPct needs five.
Grainbuilding × bedroom, one calendar yearWhen nullAn edition built before 2026-10.
yearlyAED and AED per sqft
Per-year medians and transaction counts. Rows exist per bedroom type and per purpose — filter to one of each before plotting a line, or a mix shift reads as a price move.
Grainbuilding × bedroom × purpose × yearWhen nullEmpty for a building with no history in the registry.
monthlyAED and AED per sqft
Monthly medians. Carried at bedroom 'all' only. Future-dated rent contracts exist in the registry, so clip the series at dataAsOf.
Grainbuilding × month × purposeWhen nullEmpty where the monthly series is too thin to publish.
fallbackAED
On a 24-month page only: medianPrice and medianPriceSqft over the 24 months to the data date, with saleCount, psfCount and lastSaleDate. The row's 12-month price fields are null on such a page, because they would rest on one or two sales.
Grainbuilding all-bedroom sale rowWhen nullNull on every row that is not a 24-month page.

Registered rents

medianRentAED per year
Median annual rent on new Ejari contracts. Registered contracts, not listing asks.
Grainbuilding × bedroom, trailing 12 monthsWhen nullToo few registered contracts in the window to publish a median.
medianRentSqftAED per year per sqft
Median annual rent per square foot. Annual, not monthly — the most common misreading of this field.
Grainbuilding × bedroom, trailing 12 monthsWhen nullNo publishable rent median, or no measured area.
medianRentRenewAED per year
Median annual rent on renewal contracts — what a sitting tenant pays, as against medianRent for a new one.
Grainbuilding × bedroom, trailing 12 monthsWhen nullToo few renewals registered in the window.
rentGrowth12mPctpercent
Change in the median NEW-contract annual rent, trailing 12 months against the 12 before: 100 × (medianRent ÷ rentPrev12 − 1). Five contracts each side.
Grainbuilding × bedroomWhen nullOne of the two windows has fewer than five new contracts.
rentPrev12AED per year
The comparison side of rentGrowth12mPct: median new-contract annual rent over the prior 12-month window.
Grainbuilding × bedroom, prior 12 monthsWhen nullNo new contracts in the prior window, or an edition built before 2026-10.
rentCountPrev12contracts
New contracts behind rentPrev12.
Grainbuilding × bedroom, prior 12 monthsWhen nullAn edition built before 2026-10.
rentGrowth3yPctpercent
Change in the median new-contract rent, trailing 12 months against the calendar year three years before the data date (rentY3). Five contracts at each end from the 2026-10 edition on.
Grainbuilding × bedroomWhen nullFewer than five new contracts at either end.
rentY3AED per year
Median new-contract annual rent in the anchor year of rentGrowth3yPct.
Grainbuilding × bedroom, one calendar yearWhen nullNo new contracts that year, or an edition built before 2026-10.
rentCountY3contracts
New contracts behind rentY3.
Grainbuilding × bedroom, one calendar yearWhen nullAn edition built before 2026-10.
rentSource
The grain the rent was measured at: building, project or vicinity. A project- or vicinity-grain rent is pooled from nearby stock and is weaker evidence for this building than a building-grain one.
Grainone metric rowWhen nullNo rent figure on the row.

Returns

grossYieldPctpercent
A year of registered rent (median new Ejari contract, 12 months) as a share of yieldPrice (median of the same 12 months of sales, requiring at least 3). Gross — before service charge, agency fees, maintenance and vacant months.
Grainbuilding × bedroomWhen nullSuppressed, not zero: the price base behind the yield was too thin to publish, or the median price falls below the publication floor.
yieldPriceAED
The yield's denominator: the median of the building's registered sales in the last 12 months where there are at least 3. No older-sale fallback is used. Ready and off-plan pooled. grossYieldPct is exactly 100 × medianRent ÷ yieldPrice, and the modelled short-term yield divides by the same figure. It equals medianPrice on sale rows when the sale gate is met.
Grainone metric rowWhen nullFewer than 3 sales in the last 12 months; no yield is published.
yieldBasis
How the yield denominator was built: current snapshots use 'current', the trailing 12 months. 'last_sales' is retained only for historical snapshots built before the aligned-window methodology.
Grainone metric rowWhen nullNo published yield on the row.
yieldPriceNcount
How many sales the yield's denominator rests on.
Grainone metric rowWhen nullNo published yield on the row.
yieldPriceAsofISO date
Date of the most recent sale in the yield's denominator. Within the same trailing 12-month period as the rent leg in current snapshots.
Grainone metric rowWhen nullNo published yield on the row.
turnoverUpsidePctpercent
The gap between what a new tenant pays and what a sitting tenant renews at, in the same building and bedroom type.
Grainbuilding × bedroomWhen nullBelow the materiality floor, or too few renewals. Dubai rents cluster on round numbers, so small gaps are noise and are not published.
offplanUpliftPctpercent
Unpaired median price difference: trailing twelve-month ready-resale median against the all-history off-plan sale median at building × bedroom grain. The cohorts are not matched units or buyers; excludes costs and does not measure investor return.
Grainbuilding × bedroomWhen nullInsufficient eligible launch or resale evidence, or the comparison fails the publication gate. Absence does not establish that no individual unit resold.

Short-term

medianAdrAED per night
Median nightly asking rate from public Airbnb search results, sampled for every month of the next twelve. An asking rate, not a transaction.
Grainbuilding × bedroomWhen nullNo short-term listings seen for this building and bedroom type.
distinctListingscount
How many distinct public listings the nightly rate was taken from. A floor, not a census of the building's short-term stock.
Grainbuilding × bedroomWhen nullNo short-term listings seen.
shortLetMonthlyAED per night
The forward nightly-rate curve: one row per month of the next twelve, with the listing count behind each. strSource says whether the rate is the building's own or pooled from within 500m.
Grainbuilding × bedroom × stay monthWhen nullEmpty where no short-term pricing was collected.

Evidence

txnCount12mcount
Registered sales in the trailing 12 months. This is the sample behind the median sale price. Price-per-square-foot growth uses psfCount12m, which can be smaller when some sales have no usable area.
Grainbuilding × bedroomWhen nullNever null; zero means no registered sales in the window.
rentCount12mcount
Registered new rental contracts in the trailing 12 months. The sample size behind the rent figures.
Grainbuilding × bedroomWhen nullNever null; zero means no new contracts registered in the window.
isPageEligible
Whether this row cleared the 12-month publication gate. False rows exist in the data; on the building's all-bedroom sale row, a false value with pageWindowMonths 24 means the page stands on the 24-month fallback.
Grainone metric rowWhen nullNever null.
pageWindowMonthsmonths
The window the sale page stands on: 12 where the building had 3 or more sales in the last 12 months, 24 where it had fewer than 3 in 12 but 3 or more in 24. A 24-month page publishes the 24-month median in `fallback` and no yield, growth or bedroom figure.
Grainbuilding sale rowWhen nullNull on rent, short-term and off-plan rows, on rows with no page, and on editions before 2026-10.