# Dubai Rent Contracts API – Ejari Registered Rents (DLD) (`data_daemon/dubai-rent-contracts`) Actor

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.

- **URL**: https://apify.com/data_daemon/dubai-rent-contracts.md
- **Developed by:** [Daemon Data](https://apify.com/data_daemon) (community)
- **Categories:** Real estate, Agents
- **Security:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 rent contract rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Dubai Rent Contracts API – Ejari Registered Rents (DLD)

**Registered Dubai rent contracts (Ejari) as JSON in one call.** The Dubai Land Department publishes every registered tenancy contract as open data; this Actor returns them as clean rows for any date range: annual rent, contract value, size, rent per sq m, area, project, property type, new lease or renewal, and lease start and end dates. No UAE Pass, API key or proxy.

```bash
curl -X POST "https://api.apify.com/v2/acts/data_daemon~dubai-rent-contracts/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"daysBack": 1, "maxItems": 0, "propertySubTypes": ["Flat"]}'
```

**These are signed leases, not asking rents.** Listing portals show what landlords ask; Ejari shows what tenants actually agreed to pay, registered with the government. From 1 to 6 November 2026, Dubai registered **24,631 rent contract rows** (19,436 contracts): 55% renewals, 45% new leases, 76% residential.

$1 per 1,000 rows, read live from the DLD register on every run.

### Dubai rental data API (Ejari data): what common jobs cost

Three ways teams use this Actor, with the rows each job returned when we measured it and the price at the listed $0.001 per row (Apify Free and Starter plans; higher plans pay 15-30% less; Apify platform compute adds about $0.004 per 1,000 rows). Row counts are the DLD gateway's own totals, read on 9 November 2026; a multi-unit contract is one row per unit unless `oneRowPerContract` is on.

| Job | Input | Rows (measured) | Cost |
|---|---|---|---|
| **Sample**: 200 rent contract rows from the last 7 days | `{}` | 200 | $0.20 |
| **Backfill, one month**: every contract registered in October 2026 | below | 112,045 unit rows; 95,572 with `oneRowPerContract` | about $112 (about $96 per contract) |
| **Backfill, year to date**: 1 January to 9 November 2026 | `fromDate` / `toDate` | 995,340 unit rows | about $995 (fewer with `oneRowPerContract`, or filter by `areas`, `usage` or `propertySubTypes`) |
| **Daily feed**: one scheduled run a day, each row delivered and charged once | below | about 3,300-3,600 a day (112,045 in October; 26,592 on 1-8 November) | about $100-112 a month; about $96 with `oneRowPerContract` |

**Sample** (the default input; also what **Try for free** runs):

```json
{}
```

**Backfill** (one calendar month, one row per contract; for the year so far use `"fromDate": "2026-01-01"`):

```json
{"fromDate": "2026-10-01", "toDate": "2026-10-31", "oneRowPerContract": true, "maxItems": 0}
```

**Daily feed** (save as a task, schedule it daily; `onlyNew` skips rows an earlier run already delivered, so the 2-day window never double-charges):

```json
{"daysBack": 2, "onlyNew": true, "stateName": "ejari-daily", "oneRowPerContract": true, "maxItems": 0}
```

For comparison, per-seat analytics subscriptions for Dubai property data are typically listed at about AED 1,000 a month, or AED 5,000-15,000 a year, per seat (published and estimated list prices, November 2026); a full month of every registered Ejari contract here is about $96-112, billed per row, with no seat licence. The DLD gateway serves the current calendar year; earlier years are in the Dubai Pulse open-data files.

**One product line, three registers.** Registered rents here, registered sales in [Dubai DLD Property Transactions API](https://apify.com/data_daemon/dubai-property-transactions) and the project register in [Dubai Real Estate Projects API](https://apify.com/data_daemon/dubai-real-estate-projects): same gateway, same field style, so `area` and `project` join across the three (rental yield = rent per sq m / sale price per sq m). Overview, free sample files (500 sales, 500 rent contracts, all active projects as CSV/JSON) and the cost table for all three: [Dubai Property Data API](https://datadmon.github.io/dubai-property-data/).

### What teams run, and what it costs

| You are | You run | Cost |
|---|---|---|
| Investor / fund | Rents by area for **rental yield**: combine with registered sale prices from [Dubai DLD Property Transactions](https://apify.com/data_daemon/dubai-property-transactions) | a month of flats, about 60,000-70,000 rows: about $60-70 |
| Broker / property manager | New leases in your communities last week (`areas`, `contractVersion: "new"`) for rent comparables | a few dollars per week |
| Valuer / bank | Rent per sq m benchmarks by area and sub-type for income valuations | per area, cents to a few dollars |
| Proptech / data team | Daily feed of every new registration (`daysBack: 2`, `onlyNew: true`) | about 5,000 rows per working day: about $5 per day |
| Leasing / renewals team | Leases **ending** next month (`dateType: "endDate"`) to find renewal and relocation prospects | depends on the range |

Export JSON, CSV or Excel, connect by API, webhook, Google Sheets, Make or n8n, or ask an AI agent through the Apify MCP server.

### What the data shows (1–6 November 2026, single-unit flats)

| Area (DLD name) | Flat contracts | Median annual rent (AED) | Median AED / sq m / year | New leases |
|---|---|---|---|---|
| Al Barsha South Fourth (JVC) | 841 | 60,000 | 958 | 54% |
| Al Khairan First (Dubai Creek Harbour) | 637 | 118,000 | 1,328 | 70% |
| Business Bay | 555 | 90,000 | 1,200 | 68% |
| Al Warsan First (International City) | 544 | 37,750 | 627 | 38% |
| Jabal Ali First (Discovery Gardens, Al Furjan) | 539 | 60,000 | 862 | 36% |
| Burj Khalifa (Downtown Dubai) | 479 | 170,000 | 1,621 | 56% |
| Marsa Dubai (Dubai Marina, JBR) | 438 | 115,000 | 1,118 | 56% |

12,797 single-unit flat contracts, median AED 65,000 a year. Computed from this Actor's output (`unitsInContract = 1`, `propertySubType = Flat`).

### Why use this instead of a portal or a spreadsheet download

- **Registered rents.** Every Ejari contract, not a sample of listings. New leases and renewals are both included and labelled.
- **No double counting.** DLD lists a contract that covers several units (a building, a labour camp) as one row per unit, and **each row repeats the whole contract's rent**. In the first week of November 2026, 392 such contracts produced 5,587 rows, one of them with 482 rows of AED 4,033,177.50 each. Summing those rows would add about AED 1.9 billion of rent for that one contract. Every row here carries `unitsInContract`, `annualRentPerSqmAed` is only computed when rent and size describe the same thing, and **One row per contract** merges them (you then pay per contract).
- **Community names work.** DLD uses official area names ("Marsa Dubai", "Al Barsha South Fourth"); this Actor also accepts Dubai Marina, JBR, Downtown, JVC, JVT, JLT, Dubai Hills, Sports City, Motor City, Damac Hills, Discovery Gardens, Al Furjan, International City, Silicon Oasis, Arjan, Town Square, Creek Harbour and Dubai South. A name like "Al Barsha" includes its numbered sub-areas.
- **Complete paging.** Rows come sorted by registration time; the rows of one contract always arrive together, so nothing is repeated or lost between pages. Checked against day-by-day pulls: 24,631 of 24,631 rows, 0 extra, 0 missing.
- **Open data, no personal data.** No tenant or landlord names, no contract numbers.

### How to use it

1. Click **Try for free**. The default input returns the 200 earliest contracts of the last 7 days.
2. Set **From date** / **To date**, or **Days back**. Pick **Date type**: registration (default), lease start or lease end.
3. Optionally filter: **New or renewed**, **Usage**, **Freehold**, **Areas**, **Property sub-types**.
4. Set **Max items** to `0` for everything in range, and run. Download as JSON, CSV or Excel, or call the API.

For a daily feed, schedule it with `daysBack: 2` and `onlyNew: true`: each contract is delivered and charged once, and late registrations are still caught.

### Input

| Field | What it does |
|---|---|
| `fromDate`, `toDate` | Range, both ends included (`YYYY-MM-DD`). `toDate` defaults to today. |
| `daysBack` | When `fromDate` is empty: last N days up to `toDate` (default 7; 1 = yesterday and today). |
| `dateType` | `registrationDate` (default), `startDate` or `endDate` of the lease. |
| `contractVersion` | `all`, `new` or `renewed`. |
| `usage` | `all`, `residential`, `commercial` or `other`. |
| `freehold` | `all`, `freehold` or `nonfreehold`. |
| `areas` | DLD area or community names, e.g. `["Business Bay", "Dubai Marina", "JVC"]`. Empty = all Dubai. |
| `propertySubTypes` | e.g. `["Flat", "Villa"]`, `["Office", "Shop"]`, `["Warehouse"]`. Empty = all. Other rows are not charged. |
| `oneRowPerContract` | Merge the unit rows of multi-unit contracts into one row (default off). |
| `sort` | `oldestFirst` (default) or `newestFirst` by registration time. |
| `maxItems` | Rows to save, `0` = all (default 200). |
| `onlyNew`, `stateName` | Skip and do not charge rows an earlier only-new run already delivered (120-day memory). |
| `includeArabic` | Add Arabic names. |

### Output

```json
{
  "registrationDate": "2026-11-05",
  "registrationDateTime": "2026-11-05T10:45:57",
  "startDate": "2026-11-01",
  "endDate": "2027-10-31",
  "contractDays": 365,
  "version": "Renewed",
  "isNewContract": false,
  "annualAmountAed": 41000,
  "contractAmountAed": 41000,
  "sizeSqm": 55.76,
  "annualRentPerSqmAed": 735.29,
  "unitsInContract": 1,
  "multiUnitContract": false,
  "area": "Port Saeed",
  "propertyType": "Unit",
  "propertySubType": "Office",
  "usage": "Commercial",
  "freehold": false,
  "nearestMetro": "Deira City Centre",
  "nearestMall": "Dubai Mall",
  "nearestLandmark": "Dubai International Airport",
  "source": "Dubai Land Department open data (Ejari rent contracts)",
  "scrapedAt": "2026-11-07T13:19:57.198Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

| Field | Meaning |
|---|---|
| `registrationDate`, `registrationDateTime` | When the Ejari contract was registered (Dubai time). |
| `startDate`, `endDate`, `contractDays` | Lease period. |
| `version`, `isNewContract` | New lease or renewal. |
| `annualAmountAed` | Annual rent. For a multi-unit contract, the whole contract's rent. |
| `contractAmountAed` | Total contract value (differs from annual rent for leases shorter or longer than a year). |
| `sizeSqm` | Size in sq m (sum of the units when merged). |
| `annualRentPerSqmAed` | Annual rent / size, only when both describe the same thing. |
| `unitsInContract`, `multiUnitContract` | How many units the contract covers. |
| `area`, `project`, `masterProject` | DLD area; project when DLD has it (about 28% of rows). |
| `propertyType`, `propertySubType`, `usage` | Unit / Villa / Land / Building / Virtual Unit; Flat, Office, Shop, Villa, Labor Camps...; Residential, Commercial or Other (Industrial, Storage, Educational: DLD stopped sending usage names on 9 November 2026, so the Actor labels rows from DLD's own usage filter; Industrial and Storage now share `Other`) |
| `freehold` | Freehold area. |
| `rooms`, `parking` | Only when DLD has them (rare, about 3% of rows). |
| `nearestMetro`, `nearestMall`, `nearestLandmark` | Location context from DLD. |

### How much does it cost to get Dubai rent data?

Pay per result: **$1 per 1,000 rows** (lower on higher Apify plans), no monthly fee. Rows you filter out (other sub-types, rows already delivered with `onlyNew`) are not charged. Volumes in November 2026: about 5,000 rows per working day, fewer on Sundays (883 on 1 November), so a full week is about $25-30 and a month of flats about $60-70. Use `propertySubTypes`, `areas` or `usage` to fetch only what you need, or `oneRowPerContract` to pay per contract.

### Tips

- **Rental yield:** take the median `annualRentPerSqmAed` of single-unit flats in an area and divide by the median sale price per sq m from [Dubai DLD Property Transactions](https://apify.com/data_daemon/dubai-property-transactions) for the same area.
- **Comparables:** filter `areas` and `propertySubTypes`, and keep `contractVersion: "new"` for current market rents (renewal increases are limited by the RERA rent index).
- **Speed:** DLD answers each query in about 20-40 seconds, whatever its size. The Actor asks for 5,000 rows at a time; a month of all contracts takes a few minutes.
- `rooms` is almost always empty in the register; use `sizeSqm` for unit size.

### FAQ

**Is this Ejari data?** Yes: the rent contracts registered through Ejari, as published by the Dubai Land Department on its open data page.

**What do Dubai tenants actually pay?** In October 2026 DLD registered 95,572 rent contracts (112,048 rows). The median single-unit flat rented for AED 65,000 a year (middle half AED 47,000-94,000), AED 885 per sq m, and new leases registered about 10% above renewals per sq m in the same area (34% citywide, because new leases cluster in newer districts). Villas had a median of AED 177,300; a third of office contracts are Virtual Units, so exclude them from office benchmarks. Full tables by area, size band and property type, computed from this Actor's output: [What Dubai tenants actually pay: 95,572 Ejari rent contracts in October 2026](https://dev.to/datadaemon/what-dubai-tenants-actually-pay-95572-ejari-rent-contracts-registered-in-october-2026-by-area-2nkd).

**Why can a contract appear as many rows?** One Ejari contract can cover many units. DLD publishes one row per unit and repeats the contract's amounts on each. Use `unitsInContract`, or turn on **One row per contract**.

**Why does my area return nothing?** DLD uses official area names. Try the community name (Dubai Marina, JVC, Downtown...), or check the run status for suggestions. Some DLD names are spelled unusually (e.g. "Al Barshaa South Third" for Arjan).

**Is it legal?** The data is published by the Dubai Land Department as open data, and contains no personal data. You are responsible for how you use it.

**Something wrong or missing?** Open an issue on the Issues tab with the input you used.

### Related Actors by Daemon Data

- [Dubai DLD Property Transactions](https://apify.com/data_daemon/dubai-property-transactions) – registered sales, mortgages and gifts with AED value and price per sq m, daily
- [Dubai Real Estate Projects API (DLD register)](https://apify.com/data_daemon/dubai-real-estate-projects) – every DLD-registered project: developer, status, value, escrow account, % complete, units, dates
- [India New Company Registrations](https://apify.com/data_daemon/india-new-company-registrations) – newly incorporated Indian companies daily: CIN, type, state, activity, capital
- [UK Gazette Insolvency Notices](https://apify.com/data_daemon/uk-gazette-insolvency-notices) – winding-up petitions, administrations and liquidations
- [Magicbricks Scraper](https://apify.com/data_daemon/magicbricks-property-scraper) – India property listings: price, price per sq ft, carpet area, BHK, locality

All Daemon Data Actors: [apify.com/data_daemon](https://apify.com/data_daemon).

# Actor input Schema

## `fromDate` (type: `string`):

Start 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.

## `toDate` (type: `string`):

End of the range (included), `YYYY-MM-DD`. Defaults to today (UTC).

## `daysBack` (type: `integer`):

Used 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.

## `dateType` (type: `string`):

Which 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).

## `contractVersion` (type: `string`):

Filter by Ejari contract version. About 45% of registrations are new leases and 55% renewals (Nov 2026).

## `usage` (type: `string`):

Filter by property usage: about 76% residential, 23% commercial (Nov 2026).

## `freehold` (type: `string`):

Freehold areas are where foreigners can own property (Dubai Marina, Downtown, JVC...).

## `areas` (type: `array`):

Official 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.

## `propertySubTypes` (type: `array`):

Keep 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.

## `oneRowPerContract` (type: `boolean`):

DLD 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.

## `sort` (type: `string`):

Order by registration time. With **Max items** set, `newestFirst` returns the latest contracts.

## `includeArabic` (type: `boolean`):

Add an `arabic` object with the Arabic area, project, property type and landmark names.

## `maxItems` (type: `integer`):

Maximum rows to save (0 = everything in range). Each saved row is one charged event; the default of 200 keeps a first try cheap.

## `onlyNew` (type: `boolean`):

For 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.

## `stateName` (type: `string`):

Name of the only-new memory. Use a different name for each independent feed.

## `proxyConfiguration` (type: `object`):

Not needed: the DLD gateway answers directly. Provided in case DLD starts limiting requests.

## Actor input object example

```json
{
  "daysBack": 7,
  "dateType": "registrationDate",
  "contractVersion": "all",
  "usage": "all",
  "freehold": "all",
  "areas": [],
  "propertySubTypes": [],
  "oneRowPerContract": false,
  "sort": "oldestFirst",
  "includeArabic": false,
  "maxItems": 200,
  "onlyNew": false,
  "stateName": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Rent contracts as JSON items in the default dataset (also downloadable as CSV, Excel, XML).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("data_daemon/dubai-rent-contracts").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("data_daemon/dubai-rent-contracts").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call data_daemon/dubai-rent-contracts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_daemon/dubai-rent-contracts"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sWQ0zNlAEiVGQhnkG/builds/eZEfEXUxBnTbE7NZq/openapi.json
