# Dubai Off-Plan & New Projects Scraper (`drramerets/dubizzle-new-projects`) Actor

Off-plan and new-build project data from Dubizzle: developer, handover quarter, construction progress, starting price, down payment and the full instalment plan by stage. Filter by developer, status or price to compare payment terms and track launch pipelines across the UAE.

- **URL**: https://apify.com/drramerets/dubizzle-new-projects.md
- **Developed by:** [Andrey](https://apify.com/drramerets) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 projects

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/platform/actors/running/actors-in-store#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 Off-Plan & New Projects Scraper

Export off-plan and newly built residential projects across the UAE with the details
listing sites leave out: the developer, handover quarter, construction progress,
starting price, down payment and the pre-handover payment plan.

Property portals show you individual units for sale. This returns the **projects**
behind them — which is what you need to compare developers, track launch pipelines
or model payment terms.

### What you get

| Field | Description |
|---|---|
| `id`, `project_id` | Project identifiers |
| `url`, `slug` | Link to the project page |
| `name_en`, `name_ar` | Project name in English and Arabic |
| `description` | The developer's own description of the project |
| `developer` | Developer name, e.g. Emaar, DAMAC Properties, Aldar, Sobha Realty |
| `status` | Under construction or completed |
| `handover_date`, `handover_year`, `handover_at` | Expected handover, e.g. `Q3 2026` |
| `is_past_handover` | Whether the stated handover date has already passed |
| `completion_percentage` | How much of the project is built |
| `starting_price` | Lowest advertised price in AED |
| `downpayment_percent` | Down payment required, in percent |
| `payment_pre_handover_percent`, `payment_post_handover_percent` | Share of the price payable before handover and on/after it, in percent — sum to 100 |
| `payment_plan` | Full instalment schedule as published, one readable string: `"Down payment 20%, During construction 20%, On handover 60%"` — order and stage count vary by project |
| `property_types` | Unit categories on offer, e.g. `Apartments` or `Apartments, Townhouses` |
| `bedrooms_min`, `bedrooms_max` | Range of bedroom counts offered across the project's unit mix (`0` = studio) — filled for about 94% of projects |
| `bathrooms_min`, `bathrooms_max` | Range of bathroom counts offered, same convention — filled for only about 10% of projects (292 of 2,927 on our full-catalog run); Dubizzle itself publishes this far less often than bedrooms, `null` on the rest is not a defect |
| `amenities` | Pool, gym, barbecue area and the rest, comma-separated |
| `city`, `location`, `location_path`, `neighbourhoods` | Where the project is |
| `lat`, `lng` | Map coordinates |
| `cover_image` | The project's main image |
| `images`, `images_count` | All project image URLs, comma-separated, and how many |
| `offplan_listings_count` | How many units are currently listed for this project |
| `is_master_project`, `has_parent_project`, `child_projects_count` | Position in a master development |
| `added`, `posted_at` | When the project was added and last posted |

`bedrooms_min`/`bedrooms_max` and `bathrooms_min`/`bathrooms_max` describe the **project's**
unit mix, not one specific apartment — a project offering studios through 3-bedroom units
returns `bedrooms_min: 0, bedrooms_max: 3`. This is the developer's product range, not a
count for any single listing.

A brochure-link field was tried and dropped: Dubizzle's own `brochure_url` attribute came
back empty on every one of the 2,927 projects in our full-catalog run, so it was removed
rather than shipped as a column that always reads empty.

The number of columns in this table does not change between runs: every field that could
otherwise vary in length — images, amenities, unit types, the payment schedule — is
flattened into a single string or a min/max pair, so CSV and Excel exports always have the
same width regardless of how many images or amenities a given project happens to have.

### Input

```json
{
  "developers": ["Emaar", "Sobha Realty"],
  "status": ["under-construction"],
  "startingPriceMin": 700000,
  "startingPriceMax": 3000000,
  "maxItems": 1000
}
```

Leave every filter empty to take all projects.

### Output

One row per project:

```json
{
  "id": 18834,
  "url": "https://dubai.dubizzle.com/new-projects/binghatti-developers/binghatti-hillside/",
  "name_en": "Binghatti Hillside",
  "developer": "Binghatti Developers",
  "status": "Under Construction",
  "handover_date": "Q3 2026",
  "handover_year": 2026,
  "completion_percentage": 70,
  "starting_price": 700000,
  "downpayment_percent": 20,
  "payment_pre_handover_percent": 40,
  "payment_post_handover_percent": 60,
  "payment_plan": "Down payment 20%, During construction 20%, On handover 60%",
  "property_types": "Apartments",
  "bedrooms_min": 0,
  "bedrooms_max": 1,
  "amenities": "Barbeque Area, Gym or Health Club, Swimming Pool",
  "city": "Dubai",
  "location": "Dubai Science Park",
  "lat": 25.070937,
  "lng": 55.24622,
  "offplan_listings_count": 1519,
  "cover_image": "https://dbz-images.dubizzle.com/images/2025/12/12/.../955b161f-.jpg?impolicy=dpv",
  "images_count": 4,
  "added": "2025-01-30T20:00:00Z"
}
```

### Use cases

- **Developer benchmarking.** Compare handover timelines, payment terms and starting
  prices across Emaar, DAMAC, Aldar, Sobha, Meraas and the rest.
- **Launch pipeline tracking.** Watch what is coming to market by handover year and area.
- **Payment-term analysis.** Model down payments and pre/post-handover splits across the
  market instead of one project at a time.
- **Construction progress.** Track completion percentage over time by re-running on a
  schedule.
- **Location analysis.** Map where new supply concentrates using the coordinates.

### What is and is not included

Included: everything in the field table above, for off-plan and new projects across
the UAE — around 2,900 projects at the time of writing. This is a narrow, high-value
dataset, not a mass listings feed: expect thousands of projects, not hundreds of
thousands of listings.

Not included:

- individual units for sale within a project, and their prices — this returns the
  project level, with the lowest advertised price as `starting_price`
- developer or agent contact details
- resale and secondary-market listings

Some projects are published without a starting price or a handover year; those fields
come back as `null` rather than being dropped. Setting a price range skips projects
with no starting price.

### What it costs

**$5.00 per 1,000 projects.** No charge for starting a run, and no charge for the filters
you try before you find the right ones.

This is a narrow, specialised dataset — a few thousand projects UAE-wide, not hundreds
of thousands of listings — priced closer to what direct off-plan project trackers on
Apify charge ($5–10 per 1,000) than to our own mass-listings actors (`bayut-listings`,
`propertyfinder-listings`), which cover a much larger and more contested market.

On top of that Apify bills your account for what the run consumes on the platform —
computing time and data transfer. This actor reads the project index directly, without a
browser, so that part stays negligible: in our own measurements a thousand projects came
to well under a cent.

### Support

Questions, a field you need that is not here, or another portal — write to
**admin@noonseller.ae** or visit **[noonseller.ae](https://noonseller.ae)**.

*This is an independent tool. It is not affiliated with, endorsed by, or connected to
Dubizzle.*

### FAQ

**How do I filter by developer?** Names must match exactly as the developer publishes
them — `Emaar`, `DAMAC Properties`, `Aldar`, `Sobha Realty`, `Meraas`,
`Azizi Developments`. Leave the field empty to take every developer, then filter the
results yourself.

**How current is the construction progress?** It reflects what the developer last
published. Re-run on a schedule to build a history.

**Do `bedrooms_min`/`bedrooms_max` describe one apartment?** No — a project's unit mix.
`bedrooms_min: 0, bedrooms_max: 3` means the project offers everything from studios to
3-bedroom units, not that any single listed unit has that many rooms.

**Why is `payment_plan` a single string instead of separate fields per stage?** Projects
publish anywhere from two to four instalment stages, in different orders and splits —
a fixed set of columns would either truncate longer plans or leave empty columns on
shorter ones. `payment_pre_handover_percent`/`payment_post_handover_percent` give you the
two numbers most useful for comparison across projects; `payment_plan` gives you the full
stage-by-stage detail as published.

**Can I get everything at once?** Yes, up to the run limit you set. If anything matched
your filters but could not be returned, the run summary says so.

# Actor input Schema

## `developers` (type: `array`):

Keep only projects by these developers. Names must match exactly, for example Emaar, DAMAC Properties, Aldar, Sobha Realty, Meraas, Azizi Developments. Leave empty to cover every developer.

## `status` (type: `array`):

Keep only projects with these statuses. Leave empty to cover both.

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

Optional keyword, for example marina or waterfront. Leave empty to take every project in scope.

## `startingPriceMin` (type: `integer`):

Projects with a lower starting price are skipped.

## `startingPriceMax` (type: `integer`):

Projects with a higher starting price are skipped.

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

Hard limit on how many projects this run returns. Start with a small number to preview the output.

## Actor input object example

```json
{
  "developers": [],
  "status": [],
  "query": "",
  "maxItems": 1000
}
```

# Actor output Schema

## `projects` (type: `string`):

One row per project: developer, handover date, unit types, prices and the full payment plan broken down by stage.

# 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 = {
    "developers": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("drramerets/dubizzle-new-projects").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 = { "developers": [] }

# Run the Actor and wait for it to finish
run = client.actor("drramerets/dubizzle-new-projects").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 '{
  "developers": []
}' |
apify call drramerets/dubizzle-new-projects --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,drramerets/dubizzle-new-projects"
        }
    }
}

```

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/PmxPzl5GBvO883Jdv/builds/9Hvelyop2fsVEt0cU/openapi.json
