# Abu Dhabi Property Transactions API – ADREC Sold Prices (`data_daemon/abu-dhabi-property-transactions`) Actor

Abu Dhabi real estate sales from ADREC's official market data (DARI), for brokers, valuers, proptech and investors: 127,000+ sales since 2019 with AED price, price per sqm, district, community, project, bedrooms, off-plan or ready, primary or resale. $1 per 1,000 sales.

- **URL**: https://apify.com/data_daemon/abu-dhabi-property-transactions.md
- **Developed by:** [Daemon Data](https://apify.com/data_daemon) (community)
- **Categories:** Real estate, Agents
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 sales

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

## Abu Dhabi Property Transactions API – ADREC Sold Prices

**Abu Dhabi registered property sales as JSON in one call.** The Abu Dhabi Real Estate Centre (ADREC) publishes a table of sales on its market-data page (the DARI platform); this Actor returns that table as clean JSON rows for any date range since January 2019, with no UAE Pass, API key or proxy:

```bash
curl -X POST "https://api.apify.com/v2/acts/data_daemon~abu-dhabi-property-transactions/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"daysBack": 7, "maxItems": 0}'
```

$1 per 1,000 sales, read live from the source on every run. Checked on 12 November 2026: the table held 127,379 sales from 2 January 2019 to 11 November 2026, 3,046 of them in October 2026 (2,934 in Abu Dhabi City, 94 in Al Ain, 18 in Al Dhafra; 2,407 off-plan, 628 ready, 11 court-mandated).

**Abu Dhabi Property Transactions** is a pay-per-result Apify Actor that returns the sales ADREC publishes for the emirate of Abu Dhabi as JSON, CSV or Excel: each sale with its date, price in AED, price per square metre, sold area and plot area, municipality, district, community and project, property type, layout and bedrooms, off-plan or ready, and primary sale or resale. It is for brokers and agencies, valuers and mortgage teams, proptech portals and data teams, developers and investors who need registered prices rather than asking prices. Price: $1 per 1,000 sales; no UAE Pass, API key or proxy.

Pick a date range, or leave it empty and set **Days back** (default 7; for a daily feed keep `7` with **Only new sales** on). Filter by municipality, off-plan vs ready, primary vs resale, asset class, property type, bedrooms, district, community or project. **$1 per 1,000 sales.**

### Abu Dhabi property transactions API: what common jobs cost

Four ways teams use this Actor, with the rows each job returned when we measured it and the price at the listed $0.001 per sale (Apify Free and Starter plans; higher plans pay 15-30% less). Row counts are the source's own totals, read on 12 November 2026.

| Job | Input | Rows (measured) | Cost |
|---|---|---|---|
| **Sample**: the 200 newest sales of the last 7 days | `{}` | 200 | $0.20 |
| **Backfill, one month**: every sale of October 2026 | below | 3,046 | about $3.05 |
| **Backfill, one year**: 2025 | `fromDate` / `toDate` | 25,114 | about $25 |
| **Backfill, everything**: 2 January 2019 to today | below | 127,379 | about $127 |
| **Daily feed**: one scheduled run a day, each sale delivered and charged once | below | about 100-250 per working day (3,046 in October 2026) | about $3 a month |

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

```json
{}
```

**Backfill** (one calendar month: 3,046 rows in 22 seconds on 12 November 2026; for everything use `"fromDate": "2019-01-01"`, about 600 rows a second, so the whole table takes about 4 minutes):

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

**Daily feed** (save as a task, schedule it daily; `onlyNew` skips sales an earlier run already delivered, so the 7-day window never double-charges and late registrations are still caught):

```json
{"daysBack": 7, "onlyNew": true, "stateName": "abu-dhabi-sales-daily", "maxItems": 0}
```

Sales by year in the table on 12 November 2026:

| Year | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 to 11 Nov |
|---|---|---|---|---|---|---|---|---|
| Sales | 9,990 | 16,775 | 7,270 | 9,130 | 15,106 | 16,358 | 25,114 | 27,636 |

### What teams run, and what it costs

| Who | What they run | Typical cost |
|---|---|---|
| **Brokers and agencies** | Recent sales in one district or project before a listing or a price talk | 50-500 rows, $0.05-0.50 |
| **Valuers and mortgage teams** | Comparable sales by project, layout and date | a few hundred rows per file |
| **Proptech and portals** | The whole table once, then the daily feed, to show sold prices next to asking prices | about $127 once, then about $3 a month |
| **Developers and investors** | Off-plan primary sales by project, to follow sell-out speed and price per sqm | one project or district per run |
| **Analysts and researchers** | Price per sqm by district, off-plan share, resale share, Abu Dhabi against Dubai | a year at a time, about $25 |

### Why use this instead of copying the page

- **Every row, once.** The page's table is paged by a single column, and rows that tie on it change order between requests. On 12 November 2026 a plain read of October 2026 at 1,000 rows per page repeated or lost 71 of 3,046 rows (448 at 300 per page). This Actor reads with a full ordering and checks every window against the source's own count: the same month came back complete, row for row.
- **History in one place.** The table goes back to 2 January 2019, so one run returns almost eight years of sales (the 9,990 sales of 2019 came back in 26 seconds).
- **Municipality on every row.** The source does not put the municipality on a row; the Actor reads each municipality separately and adds it.
- **A feed that never charges twice.** Only-new mode remembers what a feed has delivered.
- **Clean fields.** Bedrooms as a number, `offPlan` as true / false, price per sqm rounded, and the same field names as our [Dubai DLD transactions Actor](https://apify.com/data_daemon/dubai-property-transactions) where the meaning is the same, so one pipeline can hold both emirates.

### Input

| Field | What it does |
|---|---|
| `fromDate`, `toDate` | Date range (`YYYY-MM-DD`), both ends included. Empty: use `daysBack`. |
| `daysBack` | Last N days (default 7). |
| `municipality` | `all`, `abuDhabiCity`, `alAin`, `alDhafra`. |
| `offPlan` | `all`, `offplan`, `ready`, `courtMandated`. |
| `saleSequence` | `all`, `primary` (first sale by the developer), `secondary` (resale). |
| `assetClass` | `all`, `residential`, `commercial`, `agricultural`, `other`. |
| `propertyTypes` | List, e.g. `["apartment", "villa", "townhouse / attached villa"]`. |
| `layouts` | List, e.g. `["studio", "1 bed", "2 beds"]`. |
| `districts`, `communities`, `projects` | Lists of names as ADREC spells them (copy them from the `district`, `community` and `project` fields of any row). Case does not matter; a name ADREC does not list is reported in the run's status message. |
| `maxItems` | Stop after this many sales (default 200; `0` = all in range). |
| `onlyNew`, `stateName` | Daily-feed mode and the name of the feed's memory. |
| `sort` | `newest` (default) or `oldest`; matters only when `maxItems` cuts the range short. |

Resale villas on Yas Island and Saadiyat this year:

```json
{
    "fromDate": "2026-01-01",
    "districts": ["Yas Island", "Al Saadiyat Island"],
    "propertyTypes": ["villa", "townhouse / attached villa"],
    "saleSequence": "secondary",
    "maxItems": 0
}
```

Off-plan primary sales in one project:

```json
{ "fromDate": "2025-01-01", "projects": ["River Cove Residences"], "offPlan": "offplan", "maxItems": 0 }
```

### Output

One row per sale. You can download the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.

```json
{
    "transactionDate": "2026-11-11",
    "municipality": "Abu Dhabi City",
    "district": "Al Bahyah",
    "community": "RBE2",
    "project": "River Cove Residences",
    "assetClass": "residential",
    "propertyType": "apartment",
    "layout": "2 beds",
    "bedrooms": 2,
    "saleType": "off-plan",
    "offPlan": true,
    "saleSequence": "primary",
    "transactionValueAed": 2392432,
    "soldAreaSqm": 94.1,
    "plotAreaSqm": 49853.68,
    "soldShare": 1,
    "pricePerSqmAed": 25424.36,
    "source": "Abu Dhabi Real Estate Centre (ADREC) market data",
    "scrapedAt": "2026-11-12T11:54:00.805Z"
}
```

| Field | Meaning | Filled (October 2026, 3,046 rows) |
|---|---|---|
| `transactionDate` | Date of the sale application | 100% |
| `municipality` | Abu Dhabi City, Al Ain City or Al Dhafra Region | 100% |
| `district`, `community`, `project` | Location as ADREC names it | 100% |
| `assetClass` | residential, commercial, agricultural, other | 100% |
| `propertyType` | apartment, villa, townhouse / attached villa, plot for villa, office, retail, farm and others | 100% |
| `layout`, `bedrooms` | Layout label and the number of bedrooms when it states one (studio = 0) | 100% / 89% (plots and commercial units have no bedrooms) |
| `saleType`, `offPlan` | off-plan, ready or court-mandated | 100% |
| `saleSequence` | primary or secondary | 100% |
| `transactionValueAed` | Sale price in AED | 100% |
| `soldAreaSqm`, `pricePerSqmAed` | Sold area and price per square metre | 99% |
| `plotAreaSqm` | Ground area of the land plot (for an apartment, the plot of the whole building) | 100% |
| `soldShare` | Share of the property sold (1 = whole) | 100% |

### Scheduling & automation

- **Daily feed:** save the daily-feed input above as a task and add a schedule (once a day is enough: ADREC publishes a day's sales on the following day). With `onlyNew` on, each sale is delivered and charged once per `stateName`.
- **API:** `run-sync-get-dataset-items` returns the rows in the same HTTP call (see the top of this page); for long back-fills start the run and read the dataset when it finishes.
- **Integrations:** Google Sheets, Make, n8n, Zapier, webhooks, and the Apify MCP server for AI agents (`https://mcp.apify.com/?tools=data_daemon/abu-dhabi-property-transactions`).

### Pricing

Pay per result: **$0.001 per sale** ($1 per 1,000) on Apify Free and Starter plans; higher plans pay 15-30% less. No start fee. Sales that only-new mode skips, and rows left out by your filters, are never charged. Set a maximum charge per run in the run options to cap spend; the run stops cleanly at the cap.

### Tips

- For a daily feed keep `daysBack` at 7: on 12 November 2026 the table showed 44 sales for 10 November and 115 for 11 November, and a day's count can still grow for a few days.
- Only-new memory covers the last 120 days of sale dates. Run a history back-fill without `onlyNew`, then start the feed.
- A sale is a row without a transaction number. Units of one release sold on one day at one price are published as identical rows (370 of 3,046 in October 2026); they are separate sales and all are returned.
- `plotAreaSqm` of an apartment is the plot of the building, not of the flat: use `soldAreaSqm` for size.
- Mortgages, gifts and lease registrations are not in this table. The same page shows Abu Dhabi rents only as averages and indices, which this Actor does not return.

### FAQ

**Is there an official API for Abu Dhabi property transactions?**
ADREC's website lists an "ADREC APIs" subscription page for organisations; we have not used it. Its public market-data page shows the sales table to every visitor, and this Actor returns that table as JSON.

**How far back does the data go?**
To 2 January 2019. Earlier dates return nothing, and the run says so.

**How fresh is it?**
A day's sales appear on the following day. On 12 November 2026 the newest rows were dated 11 November.

**Does it cover the whole emirate?**
Yes: Abu Dhabi City, Al Ain City and Al Dhafra Region. Use `municipality` to pick one.

**What do the numbers look like?**
From 1 January to 11 November 2026 the table held 27,636 sales worth AED 137.5 billion, 77.5% of them off-plan. The median apartment sold for AED 2.01 million (AED 20,700 per sqm), the median villa for AED 6.9 million. Tables by district, size and project: [What do homes actually sell for in Abu Dhabi?](https://dev.to/datadaemon/what-do-homes-actually-sell-for-in-abu-dhabi-27636-registered-sales-in-2026-by-district-and-1pne)

**Can I get Dubai as well?**
Yes, with the sibling Actors: [Dubai DLD property transactions](https://apify.com/data_daemon/dubai-property-transactions) (sales, mortgages, gifts), [Dubai rent contracts (Ejari)](https://apify.com/data_daemon/dubai-rent-contracts) and the [Dubai projects register](https://apify.com/data_daemon/dubai-real-estate-projects). Shared field names: `transactionDate`, `transactionValueAed`, `pricePerSqmAed`, `offPlan`, `project`, `propertyType`.

**Are buyer or seller names included?**
No. The source publishes none, and the Actor adds none.

**Why did my run return fewer rows than `maxItems`?**
The range held fewer sales, only-new mode skipped delivered ones, or the run reached its maximum charge. The status message says which.

### Related Actors by Daemon Data

- [Dubai DLD Property Transactions API](https://apify.com/data_daemon/dubai-property-transactions): registered sales, mortgages and gifts in Dubai.
- [Dubai Rent Contracts API (Ejari)](https://apify.com/data_daemon/dubai-rent-contracts): registered rents in Dubai.
- [Dubai Real Estate Projects API](https://apify.com/data_daemon/dubai-real-estate-projects): off-plan projects, developers and escrow accounts.
- [Saudi Etimad Tenders API](https://apify.com/data_daemon/saudi-etimad-tenders): Saudi government tenders and awards.
- [All Actors by Daemon Data](https://apify.com/data_daemon)

### Support

Missing a field, or a number that does not match the source? Open an issue on the Actor's **Issues** tab with the run ID; we answer there.

### Data source

Sales are read from the market-data page of the Abu Dhabi Real Estate Centre on the DARI platform (https://www.dari.ae). This Actor is not affiliated with ADREC, DARI or the Department of Municipalities and Transport. Check the source's terms before you republish the data.

# Actor input Schema

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

Start of the range, `YYYY-MM-DD` (DD/MM/YYYY also accepted), matched against each sale's `transactionDate`. Leave empty to use **Days back** instead, so a scheduled run never needs a date edit. The table starts on 2 January 2019. An invalid date is ignored with a warning.

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

End of the range (included), `YYYY-MM-DD`. Defaults to today (UTC). ADREC publishes a day's sales on the following day.

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

Used when **From date** is empty: fetch the last N days up to **To date** (or today). Default 7. Abu Dhabi registers about 100-250 sales per working day (3,046 in October 2026) and almost none on weekends. For a daily scheduled feed use 7 with **Only new sales** on: late registrations are caught and nothing is charged twice.

## `municipality` (type: `string`):

`all`, `abuDhabiCity`, `alAin` or `alDhafra`. October 2026: Abu Dhabi City 2,934 sales, Al Ain 94, Al Dhafra 18. Every row carries its `municipality`.

## `offPlan` (type: `string`):

Sale type: `all`, `offplan`, `ready` or `courtMandated`. October 2026: 2,407 off-plan, 628 ready, 11 court-mandated.

## `saleSequence` (type: `string`):

`all`, `primary` (first sale by the developer) or `secondary` (resale). October 2026: 2,152 primary, 894 secondary.

## `assetClass` (type: `string`):

`all`, `residential`, `commercial`, `agricultural` or `other`. About 96% of sales are residential.

## `propertyTypes` (type: `array`):

Keep only these property types, e.g. `apartment`, `villa`, `townhouse / attached villa`, `duplex`, `penthouse`, `plot for villa`, `office`, `retail`, `farm`. Use the values of the `propertyType` field. Empty = all.

## `layouts` (type: `array`):

Keep only these layouts: `studio`, `1 bed`, `2 beds`, `3 beds`, `4 beds`, `5 beds`, `5+ beds`, `6+ beds`. Empty = all.

## `districts` (type: `array`):

Keep only these districts, e.g. `Al Reem Island`, `Yas Island`, `Al Saadiyat Island`, `Al Hidayriyyat`, `Khalifa City`. Spelling follows ADREC (the `district` field of any row); case does not matter. A name ADREC does not list is reported in the run's status. Empty = all.

## `communities` (type: `array`):

Keep only these communities (the `community` field, e.g. `RT7`, `Al Hidayriyyat Island`). Empty = all.

## `projects` (type: `array`):

Keep only these projects (the `project` field, e.g. `Reem Hills - Phase 1C`, `River Cove Residences`). Exact names, case does not matter. Empty = all.

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

Stop after this many sales (0 = all in range). Each sale costs $0.001, so the default 200 = $0.20 and a month of about 3,000 = $3. The whole table since 2019 is about 127,000 sales ($127).

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

For scheduled feeds: skip sales an earlier only-new run already delivered, so overlapping date windows are never charged twice. Memory is kept per **Feed state name** and filter combination in the named key-value store `abu-dhabi-sales-only-new` and covers the last 120 days of sale dates. Recommended schedule: daily with **Days back** 7 and this on. Don't run two only-new runs of the same feed at the same time.

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

Name of your only-new feed, e.g. `abu-dhabi-sales-daily`. Separate names keep separate memories. Ignored unless **Only new sales** is on.

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

`newest` or `oldest` by sale date. Matters only when `maxItems` cuts the range short.

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

Optional. Not needed: the source answers without a proxy.

## Actor input object example

```json
{
  "daysBack": 7,
  "municipality": "all",
  "offPlan": "all",
  "saleSequence": "all",
  "assetClass": "all",
  "propertyTypes": [],
  "layouts": [],
  "districts": [],
  "communities": [],
  "projects": [],
  "maxItems": 200,
  "onlyNew": false,
  "stateName": "default",
  "sort": "newest",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Registered sales 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 = {
    "propertyTypes": [],
    "layouts": [],
    "districts": [],
    "communities": [],
    "projects": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_daemon/abu-dhabi-property-transactions").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 = {
    "propertyTypes": [],
    "layouts": [],
    "districts": [],
    "communities": [],
    "projects": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_daemon/abu-dhabi-property-transactions").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 '{
  "propertyTypes": [],
  "layouts": [],
  "districts": [],
  "communities": [],
  "projects": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_daemon/abu-dhabi-property-transactions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_daemon/abu-dhabi-property-transactions"
        }
    }
}
```

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/kekPVFHgEf84zp1O2/builds/b5Y3Vw5LLGKgQOSrZ/openapi.json
