# Dubai REST Scraper (`rl1987/dubai-rest-api-scraper`) Actor

Scrape Dubai Land Department (Dubai REST) public real-estate open data: off-plan projects, licensed developers, the area/community gazetteer with coordinates, daily transaction totals, and sales/mortgage/gift transactions broken down by area, community or project. Anonymous guest, no UAE Pass.

- **URL**: https://apify.com/rl1987/dubai-rest-api-scraper.md
- **Developed by:** [R.L.](https://apify.com/rl1987) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result rows

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Dubai REST Scraper – Dubai Land Department Real Estate Open Data API

Extract **Dubai real estate open data** from the **Dubai Land Department (DLD)** — the official
Dubai REST platform — as clean, structured JSON. Pull the **registry of off-plan projects and
licensed developers**, the **area & community gazetteer** (with GPS coordinates), and **market
transaction data** (sales, mortgage, gift) broken down by area, community or project.

Anonymous and account-free — no UAE Pass login required. Fast, structured, and straight from
DLD's own data API. Export to **JSON, CSV, Excel, or the API**.

### 🏗️ What this Dubai REST scraper does

- 🏢 **Off-plan projects** — the full DLD project registry (name, status, completion %, developer;
  with details: location, buildings, lands, facilities).
- 👷 **Developers** — every licensed real-estate developer with logo and registry number.
- 🗺️ **Areas & communities** — the official gazetteer: ids, English/Arabic names, coordinates.
- 📈 **Transaction market data** — daily totals, and sales/mortgage/gift worth & volume by area,
  community or project (worth, count, total area, price per sqm).
- 🌐 English & Arabic output.

### 💡 Use cases

- **Real estate market analytics** — transaction volumes, values and price-per-sqm by area.
- **Off-plan & developer research** — project pipelines and developer activity.
- **Investment & due diligence** — official DLD figures, not portal estimates.
- **Data enrichment** — join DLD area/community/project ids into your own datasets.

### 🧭 Modes — input & output examples

#### 1. Off-plan projects

Input:

```json
{ "mode": "projects", "includeDetails": false, "maxItems": 2000 }
```

Output (one row per project):

```json
{ "number": "11", "name": "La Vista 03", "status": "Finished",
  "completion_ratio": 100.0, "developer_number": "4",
  "developer_name": "Al Manal Development Fzco" }
```

*(with `includeDetails: true` each row also carries `latitude`, `longitude`, `buildings_count`, `lands_count`, `facilities`.)*

#### 2. Developers

Input:

```json
{ "mode": "developers", "maxItems": 2000 }
```

Output:

```json
{ "number": "1", "name": "Meraas Estates (L.L.C)", "name_ar": "مراس العقارية",
  "logo_url": "https://mobile.dubailand.gov.ae/Repository/developers/1.png" }
```

#### 3. Areas (gazetteer)

Input:

```json
{ "mode": "areas" }
```

Output:

```json
{ "id": 451, "name": "Al Hebiah Fifth", "name_ar": "الحبيه الخامسة",
  "latitude": 25.0080936770622, "longitude": 55.238181632008 }
```

#### 4. Communities (gazetteer)

Input:

```json
{ "mode": "communities" }
```

Output:

```json
{ "id": "A-230", "name": "Abu Hail", "name_ar": "ابو هيل",
  "latitude": 25.2856161749436, "longitude": 55.3303925322859 }
```

#### 5. Daily transaction totals

Input:

```json
{ "mode": "dailyTransactions", "transactionType": "sales",
  "fromDate": "2026-06-01", "toDate": "2026-06-30" }
```

Output (one row per day):

```json
{ "date": "2026-06-30T00:00:00", "value": 1726307686.1,
  "off_plan_value": 808589549.89, "existing_plan_value": 917718136.21 }
```

#### 6. Transactions by area / community / project

Input:

```json
{ "mode": "transactions", "grouping": "community", "location": "Business Bay",
  "transactionType": "sales", "fromDate": "2026-06-01", "toDate": "2026-09-01" }
```

Output (one row per entity × property type):

```json
{ "grouping": "community", "entity_id": "A-526", "entity_name": "Business Bay",
  "property_type": "Unit", "worth": 75185365.0, "count": 28.0,
  "total_area": 711.24, "per_sqm": 105710.08 }
```

### 📍 Locations by name

For transactions by area or community, give `location` as a **name** ("Business Bay", "Dubai
Marina") — the scraper resolves it to DLD's internal id automatically. Use the **Areas** /
**Communities** modes to browse the full gazetteer. Raw ids stay an optional advanced override (`ids`).

### 💳 Pricing

**Pay per result — $5 per 1000 rows** ($0.005 each), regardless of type (project, developer,
area, community, daily total, or transaction breakdown row).

### ❓ FAQ

**Do I need a UAE Pass account?** No — this uses only the anonymous public open-data surface. The
account-gated property wallet and Ejari contract management are out of scope.

**Is this official data?** Yes — directly from Dubai Land Department's Dubai REST platform.

### 🛟 Support

Questions or a field you'd like added? Open an issue and we'll help.

# Actor input Schema

## `mode` (type: `string`):

What to scrape from Dubai Land Department's public data. Projects/Developers list the DLD registry; Areas/Communities are the id+name+coordinate gazetteer; Daily transaction totals is a market time-series; Transactions breaks down sales/mortgage/gift by area, community or project.

## `language` (type: `string`):

Response language for names.

## `includeDetails` (type: `boolean`):

Projects mode: also fetch each project's full record (location, buildings, lands, facilities) and merge it in. Adds one request per project.

## `query` (type: `string`):

Projects mode: optional free-text filter (project or developer name).

## `grouping` (type: `string`):

Transactions mode: break the market down by area, community or project.

## `transactionType` (type: `string`):

Transactions / Daily-transactions mode: which registration type.

## `propertyStatus` (type: `string`):

Transactions mode: off-plan vs completed.

## `location` (type: `string`):

Transactions mode (area/community grouping): a place name (e.g. 'Dubai Marina', 'Business Bay'), resolved to its DLD id at runtime. Leave blank for the whole of Dubai.

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

Transactions modes: start date (YYYY-MM-DD). Defaults to 90 days ago.

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

Transactions modes: end date (YYYY-MM-DD). Defaults to today.

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

Roughly how many rows to return (0 = no limit).

## `maxConcurrency` (type: `integer`):

Max requests in parallel.

## `maxRequestRetries` (type: `integer`):

Retries per request.

## `maxSessionRotations` (type: `integer`):

Retries for a blocked status.

## `ids` (type: `array`):

Transactions mode: optional advanced override — raw DLD ids (area ids, community ids like 'A-230', or project numbers), skipping name resolution.

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

Optional. The DLD open-data API is not bot-gated; a proxy is not required.

## Actor input object example

```json
{
  "mode": "projects",
  "language": "en",
  "includeDetails": false,
  "grouping": "community",
  "transactionType": "sales",
  "propertyStatus": "all",
  "maxItems": 1000,
  "maxConcurrency": 5,
  "maxRequestRetries": 5,
  "maxSessionRotations": 10,
  "ids": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "query": "",
    "location": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("rl1987/dubai-rest-api-scraper").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 = {
    "query": "",
    "location": "",
}

# Run the Actor and wait for it to finish
run = client.actor("rl1987/dubai-rest-api-scraper").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 '{
  "query": "",
  "location": ""
}' |
apify call rl1987/dubai-rest-api-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rl1987/dubai-rest-api-scraper"
        }
    }
}

```

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/wJqXWBjiTgeumOgE6/builds/mSlBxWbur8mL18lUs/openapi.json
