Daemon Data

Dubai Ejari rent contracts (DLD) as JSON API

Dubai Rent Contracts API is a pay-per-record Apify Actor by Daemon Data that returns Registered Dubai rent contracts (Ejari) from the official Dubai Land Department register: annual rent, contract value, size, rent per sqm, area, project, property type, new vs renewed, lease dates. Signed leases, not asking rents. $1 per 1,000 rows. as JSON, CSV or Excel. It costs $0.001 per rent contract row with the default options ($1.00 per 1,000); no login to the source site and no proxy or browser to set up on your side, and the same input runs from the Apify console, one REST call, Python, Node.js, n8n or an AI assistant through MCP.

Daemon Data Dubai Rent Contracts API on Apify   Listing as plain text

Part of the Dubai Property Data API product line with Dubai DLD transactions, Dubai real estate projects (DLD register): one cost table for sample, backfill and daily-feed jobs, and free sample files (CSV and JSON) from all three registers.

Checked on 8 Nov 2026

From 1 to 6 Nov 2026 Ejari registered 19,436 rent contracts (24,631 unit rows: 392 multi-unit contracts repeat their full amount on 5,587 rows). Of the 19,044 single-unit contracts, 53% were renewals and 76% residential. The median annual rent of 12,988 single-unit residential flats was AED 64,240; Marsa Dubai (Dubai Marina) AED 115,000 and Business Bay AED 90,000.

Why teams use it

Output fields

The most useful top-level fields with values from a real record; the full list is registrationDate, registrationDateTime, startDate, endDate, contractDays, version, isNewContract, annualAmountAed, contractAmountAed, sizeSqm, annualRentPerSqmAed, unitsInContract, multiUnitContract, area, project, masterProject, propertyType, propertySubType, usage, freehold, rooms, parking, nearestMetro, nearestMall, nearestLandmark, unitRows, propertySubTypes, arabic, source, scrapedAt. Per-field notes and the OpenAPI definition are on the Apify API page.

FieldTypeExample
registrationDatestring"2026-11-05"
registrationDateTimestring"2026-11-05T10:45:57"
startDatestring"2026-11-01"
endDatestring"2027-10-31"
contractDaysnumber365
versionstring"Renewed"
isNewContractbooleanfalse
annualAmountAednumber41000
contractAmountAednumber41000
sizeSqmnumber55.76
annualRentPerSqmAednumber735.29
unitsInContractnumber1
multiUnitContractbooleanfalse
areastring"Port Saeed"
propertyTypestring"Unit"

Input and how to call it

Example input. Fields and pricing were checked against the public listing on 2026-11-09; this build does not run paid example searches.

{
  "daysBack": 7,
  "areas": [
    "Business Bay",
    "Dubai Marina"
  ],
  "propertySubTypes": [
    "Flat"
  ],
  "maxItems": 200
}

One HTTP call starts a run, waits for it and returns the records (token from console.apify.com):

curl -X POST "https://api.apify.com/v2/acts/data_daemon~dubai-rent-contracts/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"daysBack": 7, "areas": ["Business Bay", "Dubai Marina"], "propertySubTypes": ["Flat"], "maxItems": 200}'

Python: ApifyClient(token).actor("data_daemon/dubai-rent-contracts").call(run_input=...). Python example · Node.js example · n8n workflow. AI assistant (MCP): add the remote server https://mcp.apify.com/?tools=data_daemon/dubai-rent-contracts with header Authorization: Bearer YOUR_APIFY_TOKEN in Claude, ChatGPT, Cursor or VS Code and ask for the data in plain words.

All input fields

FieldTypeMeaning
fromDatestringStart of the range (included), YYYY-MM-DD (DD/MM/YYYY also accepted), matched against the date chosen in Date type (registration date by default). Leave empty to use Days back instead, so a scheduled run never needs a date edit.
toDatestringEnd of the range (included), YYYY-MM-DD. Defaults to today (UTC).
daysBackintegerUsed when From date is empty: the last N days up to To date (or today), both ends included, so N=1 covers yesterday and today. Default 7. Dubai registers about 5,000 rent contract rows per working day (about 25,000-30,000 a week, Nov 2026). For a daily scheduled feed use 2 with Only new contracts on.
dateTypestringWhich contract date the range applies to. registrationDate (default) gives a clean daily feed of newly registered contracts; startDate finds leases starting in the range; endDate finds leases expiring in the range (renewal and churn prospecting).
contractVersionstringFilter by Ejari contract version. About 45% of registrations are new leases and 55% renewals (Nov 2026).
usagestringFilter by property usage: about 76% residential, 23% commercial (Nov 2026).
freeholdstringFreehold areas are where foreigners can own property (Dubai Marina, Downtown, JVC...).
areasarrayOfficial DLD area names, e.g. Business Bay, Al Barsha South Fourth, Marsa Dubai (Dubai Marina), Burj Khalifa (Downtown). Each area is fetched with its own query. Leave empty for all of Dubai. Unknown names are skipped with a suggestion in the run status.
propertySubTypesarrayKeep only these sub-types, e.g. Flat, Villa, Office, Shop, Warehouse, Labor Camps, Hotel apartments. Leave empty for all. Filtered-out rows are not charged.
oneRowPerContractbooleanDLD lists a contract that covers several units (a building, a labour camp) as one row per unit, and every row repeats the whole contract's amount. On: such contracts are merged into one row with unitsInContract, the total sizeSqm and the sub-types, so rent totals are not inflated and you pay per contract (Nov 1-6 2026: 24,631 rows = 19,436 contracts). Off (default): one row per unit, as DLD publishes it.
sortstringOrder by registration time. With Max items set, newestFirst returns the latest contracts.
includeArabicbooleanAdd an arabic object with the Arabic area, project, property type and landmark names.
maxItemsintegerMaximum rows to save (0 = everything in range). Each saved row is one charged event; the default of 200 keeps a first try cheap.
onlyNewbooleanFor scheduled runs: skip (and do not charge) rows that an earlier only-new run with the same State name and filters already delivered. Memory lasts 120 days.
stateNamestringName of the only-new memory. Use a different name for each independent feed.

Price

$0.001 per rent contract row ($1.00 per 1,000). List prices for Apify Free and Starter plans; Scale and Business plans pay 15% to 30% less.

EventPricePer 1,000Charged when
Rent contract row$0.001$1.00One registered Dubai rent contract row (or one merged contract with One row per contract) saved to the dataset. Rows left out by filters or already delivered in only-new mode are never charged.

Cost example: 200 rent contract rows with default options cost $0.2, including any start fee. This is an illustrative record count; set explicit row and total-charge caps for your run. Apify's free plan includes $5 of usage a month, about 5,000 rent contract rows before start fees; the Actor's own compute is included in the per-record price, and records skipped by filters, de-duplication or only-new mode are not charged.

Ready-made example pages

Saved inputs you can run with one click on Apify (Examples tab); each has its own page:

Alternatives, honestly

OptionWhat it gives youWhere it falls short for this job
DLD open-data rents pageOfficial search and CSV download by handManual extracts; multi-unit contracts repeat the full amount on every unit row
DXB Interact / rental indexOfficial charts and the RERA rental indexAverages, not contract-level rows; not a data feed
Paid property data platformsCleaned market data with supportSubscriptions; the Ejari register itself is open data

Published by Daemon Data (data_daemon on Apify Store). Prices, fields and example pages read from the live Apify listing on 2026-11-09; the listing is the canonical description of the Actor.