# Bayut UAE Property Listings Scraper (`drramerets/bayut-listings`) Actor

Property listings from Bayut across all eight UAE emirates: sale and rent, apartments to plots. Price, size, rooms, exact location, amenities, photos, and the agency and agent behind each one, with their phone and WhatsApp.

- **URL**: https://apify.com/drramerets/bayut-listings.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 $0.60 / 1,000 listings

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

## Bayut UAE Property Listings Scraper

Export property listings from Bayut across the UAE — apartments, villas, townhouses,
offices, plots, shops, hotel apartments and penthouses, both for sale and for rent.
Every listing comes with price, size, bedrooms, exact location with map coordinates,
amenities, photos, the listing agency and agent, and their contact numbers.

Filter by purpose, property type, emirate, price, bedrooms, completion status and
furnishing — no need to hunt for URLs first.

### What you get

| Field | Description |
|---|---|
| `id`, `external_id`, `reference` | Listing identifiers and the agency's own reference |
| `url` | Link to the listing |
| `title`, `title_ar` | Title in English and Arabic |
| `purpose` | `for-sale` or `for-rent` |
| `price`, `currency`, `price_hidden` | Price in AED; some agencies hide it |
| `rent_frequency` | Yearly, monthly, weekly or daily — for rentals only |
| `rooms`, `baths` | Bedrooms (studios are 0) and bathrooms |
| `area_sqm`, `plot_area_sqm` | Built-up area, and plot area for villas and plots |
| `property_type`, `category_path` | Type and its full category path |
| `emirate`, `area_name`, `location_path` | Emirate, community and the full location path |
| `lat`, `lng` | Map coordinates |
| `completion_status`, `completion_date` | Ready or off-plan, and the expected handover |
| `furnishing` | Furnished, unfurnished or partly furnished |
| `is_verified` | Whether Bayut verified the listing |
| `amenities` | Pool, gym, maids room and the rest, as one line |
| `keywords` | The portal's own marketing tags for the listing, as one line |
| `agency`, `agency_id` | Listing agency |
| `agent`, `agent_id` | Listing agent |
| `phone`, `whatsapp` | Numbers published on the listing |
| `contact_call`, `contact_sms`, `contact_whatsapp`, `contact_email` | Which contact channels the agent accepts |
| `photos`, `cover_photo`, `photos_count` | Full-size photo URLs |
| `has_panorama` | Whether a 360° tour is attached |
| `project`, `project_id` | Development the unit belongs to, for off-plan units |
| `payment_pre_handover_percent`, `payment_post_handover_percent` | Instalment split before and after handover, for off-plan |
| `promotion_tier` | How much the agency paid to boost this listing's placement: `superhot`, `hot`, `default`, or empty |
| `dld_property_id` | Dubai Land Department identifier, where published |
| `created_at`, `reactivated_at` | When the listing appeared and was last refreshed |

### Input

```json
{
  "purpose": ["for-sale"],
  "propertyTypes": ["Apartments", "Penthouses"],
  "emirates": ["Dubai"],
  "priceMin": 700000,
  "priceMax": 3000000,
  "minRooms": 1,
  "completionStatus": ["completed"],
  "verifiedOnly": true,
  "maxItems": 1000
}
```

Leave every filter empty to cover the whole of the UAE.

### Output

One row per listing:

```json
{
  "id": 12462225,
  "url": "https://www.bayut.com/property/details-15948201.html",
  "title": "Best Deal in Town | Fully Furnished | Metro Access",
  "purpose": "for-sale",
  "price": 889000.0,
  "currency": "AED",
  "rooms": 1,
  "baths": 2,
  "area_sqm": 58.06,
  "property_type": "Apartments",
  "emirate": "Dubai",
  "area_name": "Downtown Jebel Ali",
  "lat": 24.97679,
  "lng": 55.09188,
  "completion_status": "under-construction",
  "furnishing": "furnished",
  "is_verified": true,
  "amenities": "Electricity Backup, Waste Disposal, Gym or Health Club",
  "agency": "Hills Field Real Estate",
  "agent": "Oussama Karar",
  "phone": "+971588302064",
  "contact_call": true,
  "contact_whatsapp": true,
  "project": "Raw District by Imtiaz",
  "payment_pre_handover_percent": 50,
  "payment_post_handover_percent": 50,
  "promotion_tier": "superhot",
  "photos_count": 13,
  "dld_property_id": "15948201",
  "created_at": "2026-07-25T05:26:39Z"
}
```

### How results come back

Bayut serves listings in order of how much the agency paid for placement, not by date and
not randomly. The most-boosted listings (`superhot`) come first, then the next tier
(`hot`), and only after those does anything else appear — on a broad, popular search you
can page through a large number of results before you reach a listing that was not paid
for at all.

This matters for anything you calculate from the data. Take the first 1,000 results for a
popular search and you are not looking at a random slice of the market — you are looking
at the listings whose agencies paid the most to be seen. Average asking price, typical
size, or how "competitive" an area looks will all skew toward what promoted listings tend
to be, which is often pricier and from bigger agencies. `promotion_tier` tells you which
tier each row came from, so you can exclude it or account for it before drawing
conclusions about the market as a whole. It is not a flaw in this actor — it is how the
portal orders its own results.

### Use cases

- **Price research.** Compare asking prices per square metre by community, property type
  and completion status.
- **Agency benchmarking.** See which agencies list what, where, and how much of it.
- **Lead sourcing.** Filter to verified listings in your target community and get the
  listing agent for each.
- **Investment screening.** Combine price, area, bedrooms and payment plan to shortlist
  off-plan units.
- **Location analysis.** Map supply and price by area using the coordinates.
- **Cross-referencing.** `dld_property_id` links a listing to the Dubai Land Department
  record where the portal publishes it.

### What is and is not included

Included: everything in the field table above, for listings across all eight emirates,
both sale and rent.

Not included:

- the listing's free-text description
- email addresses — phone and WhatsApp are returned where the agent published them
- sold or archived listings; this returns what is currently advertised

Some listings are published without a price, an area or a completion date; those fields
come back as `null` rather than being dropped. Setting a price range skips listings with
no price. `rent_frequency` and `payment_pre_handover_percent` / `payment_post_handover_percent`
are only ever set for rentals and off-plan units respectively — they come back `null` on
everything else, which is expected, not missing data. Likewise `plot_area_sqm` is only set
for villas, townhouses and plots; apartments do not have one.

`project` and `project_id` are set only for units that belong to a developer's project —
mostly off-plan. A resale unit in an ordinary, already-completed building has neither.

### What it costs

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

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 listing index directly, without a
browser, so that part stays small: in our own measurements a thousand listings came to a
fraction of 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
Bayut.*

### FAQ

**Which emirates are covered?** Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah,
Fujairah, Umm Al Quwain and Al Ain.

**How are rent prices expressed?** As published, together with `rent_frequency` — yearly,
monthly, weekly or daily. Compare like with like before aggregating.

**Can I get everything at once?** Yes, up to the run limit you set. Very broad requests
can return fewer listings than the limit; the run summary tells you how many more matched
and how to narrow it down.

**Do studios show up?** Yes, with `rooms` set to 0. Set minimum bedrooms to 0 to include
them explicitly.

**Why are `project` and `project_id` empty on most rows?** They are only set for units
that belong to a developer's project, which in practice means off-plan. Filter
`completionStatus` to `under-construction` to see them filled in.

**Can I use this to compute average market prices?** Not from a broad, unfiltered run
without accounting for `promotion_tier` first — see "How results come back" above. Narrow
your filters (price range, community, bedroom count) so the run captures a whole, specific
segment instead of just the top of the queue, and check `promotion_tier` on what you get
back before averaging.

# Actor input Schema

## `purpose` (type: `array`):

Keep only listings for sale or for rent. Leave empty to cover both.

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

Keep only these property types. Leave empty to cover all of them.

## `emirates` (type: `array`):

Limit results to these emirates. Leave empty to cover the whole of the UAE.

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

Optional keyword, for example marina view or maids room. Leave empty to take everything in scope.

## `priceMin` (type: `integer`):

Listings priced below this are skipped.

## `priceMax` (type: `integer`):

Listings priced above this are skipped.

## `minRooms` (type: `integer`):

Studios count as zero bedrooms.

## `maxRooms` (type: `integer`):

Listings with more bedrooms than this are skipped.

## `completionStatus` (type: `array`):

Ready properties, off-plan, or both. Leave empty to cover both.

## `furnishing` (type: `array`):

Keep only listings with this furnishing status. Leave empty to cover all of them.

## `verifiedOnly` (type: `boolean`):

Keep only listings Bayut has verified.

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

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

## Actor input object example

```json
{
  "purpose": [],
  "propertyTypes": [],
  "emirates": [],
  "query": "",
  "completionStatus": [],
  "furnishing": [],
  "verifiedOnly": false,
  "maxItems": 1000
}
```

# Actor output Schema

## `listings` (type: `string`):

One row per listing: price, location, rooms, area, agent and agency, amenities and images.

# 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("drramerets/bayut-listings").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("drramerets/bayut-listings").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 drramerets/bayut-listings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=drramerets/bayut-listings",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/9ASWaQyhtZDRBPrlu/builds/XMQTMpKisyM37hhaq/openapi.json
