# Bayut UAE Property Listings & Agents Scraper (`jungle_synthesizer/bayut-uae-property-listings-agents-scraper`) Actor

Extract UAE property listings from Bayut with full agent contact details (mobile, landline, WhatsApp), agency info, and the DLD register join key that ties every asking price to the government's recorded-transaction data.

- **URL**: https://apify.com/jungle\_synthesizer/bayut-uae-property-listings-agents-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Real estate, Business
- **Stats:** 2 total users, 1 monthly users, 92.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

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?

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 & Agents Scraper

Extract property listings from [Bayut](https://www.bayut.com/), the largest UAE real estate portal, complete with the listing agent's full contact details and the DLD (Dubai Land Department) join key that ties every asking price to the government's recorded-transaction register. Covers both for-sale and for-rent listings across all seven Emirates.

### Bayut Scraper Features: Listings, Agent Contacts & DLD Join Key

- Every record carries the listing agent's mobile, landline (where published) and WhatsApp number, plus their name and agency
- Agency name, licence numbers, and product tier (premium/standard — the tier the agency pays Bayut for placement) on every row
- `dld_property_sk` — a stable join key present on every listing, for matching Bayut's asking price against the Dubai Land Department's recorded-transaction data
- `reactivated_at` alongside `created_at` — surfaces which "new" listings are actually months-old inventory that was relisted
- Filter by purpose (for-sale / for-rent) and by price range
- Full property detail: price, area, rooms, baths, category, location hierarchy, completion status, furnishing, amenities, photos
- Pay-per-event pricing

### Who Uses Bayut Listing Data and Why?

- **Real-estate lead-gen and CRM vendors** selling into UAE brokerages — the agent contact block is a ready-made prospect list, and the agency product tier shows which agencies already spend on portal placement
- **Proptech and portal competitors** benchmarking inventory and pricing
- **Yield and mortgage analysts** — the DLD join key lets you compare asking prices against recorded transaction prices, property by property
- **Buyer-side agents and investors** tracking new inventory by community and price band

### How It Works

1. You choose a purpose (for-sale, for-rent, or both), and optionally a price range.
2. The actor returns clean, structured listing records — one row per property — up to your requested item count.
3. Each row includes the full agent and agency contact block plus the DLD join key, ready for export to JSON, CSV, or the Apify API.

### Input

#### Basic: pull the newest for-sale listings

```json
{
  "maxItems": 100
}
```

#### For-rent listings only

```json
{
  "purposes": ["for-rent"],
  "maxItems": 100
}
```

#### For-sale listings in a specific price range

```json
{
  "purposes": ["for-sale"],
  "minPrice": 1000000,
  "maxPrice": 2000000,
  "maxItems": 100
}
```

#### Input Parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| purposes | string\[] | both | `for-sale`, `for-rent`, or both. Leave empty to crawl both. |
| minPrice | integer | none | Optional minimum price in AED. |
| maxPrice | integer | none | Optional maximum price in AED. |
| locationSlug | string | none | Optional Bayut location slug to narrow to one area, e.g. `/dubai` or `/abu-dhabi/al-reem-island`. |
| maxItems | integer | 10 | Maximum number of listings to return. |

### Output Fields

Each record includes: `id`, `external_id`, `url`, `state`, `purpose`, `price`, `rent_frequency`, `hide_price`, `area_sqm`, `plot_area`, `rooms`, `baths`, `category_path`, `location_path`, `latitude`, `longitude`, `completion_status`, `furnishing_status`, `amenities`, `ad_features`, `keywords`, `title`, `photo_count`, `photo_ids`, `contact_name`, `agent_mobile`, `agent_phone`, `agent_whatsapp`, `agent_external_id`, `agent_name`, `agent_is_trubroker`, `agency_name`, `agency_external_id`, `agency_licenses`, `agency_product_tier`, `dld_property_sk`, `is_verified`, `verification_status`, `created_at`, `updated_at`, `reactivated_at`, `reference_number`.

`rent_frequency` is only populated on for-rent listings (yearly/monthly/weekly/daily) — it is intentionally empty on for-sale rows. `plot_area` is only populated on land/villa-plot listings. `agent_phone` and `furnishing_status`/`amenities`/`agency_licenses` are populated where the listing publishes them, which is not every row.

### FAQ

#### Does this include the listing agent's phone number?

Yes — every listing includes the agent's mobile number, and most also include a WhatsApp number and agency name. This is the core of the dataset.

#### Can I filter by price?

Yes, set `minPrice` and/or `maxPrice` (in AED). Combine with `purposes` to scope to for-sale or for-rent.

#### What is `dld_property_sk`?

A stable identifier present on every listing that can be used to match Bayut's asking price against Dubai Land Department recorded-transaction data, giving an ask-vs-recorded price comparison per property.

***

**Further reading:** [How to Find Real Estate Leads From Property Portal Data](https://orbtop.com/articles/real-estate-lead-data/)

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

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

Maximum number of records to scrape

## `purposes` (type: `array`):

Which listing purposes to include. Leave empty to crawl both for-sale and for-rent.

## `minPrice` (type: `integer`):

Optional minimum price in AED to narrow the crawl (applies to whichever purpose(s) are selected). Leave blank to sweep the full built-in price-band ladder.

## `maxPrice` (type: `integer`):

Optional maximum price in AED to narrow the crawl. Leave blank for no upper bound.

## `locationSlug` (type: `string`):

Optional Bayut location slug to narrow results to one area, e.g. /dubai or /abu-dhabi/al-reem-island. Leave blank to crawl all of UAE.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "purposes": []
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/bayut-uae-property-listings-agents-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/bayut-uae-property-listings-agents-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10
}' |
apify call jungle_synthesizer/bayut-uae-property-listings-agents-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/bayut-uae-property-listings-agents-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/4B0fSicj77qLjEFwt/builds/UQrR2hfVilXC9lbrZ/openapi.json
