# Dubizzle Scraper — UAE Property, Cars & Prices (`crawloop/dubizzle-scraper`) Actor

Scrape Dubizzle UAE property for rent or sale and used cars. Each row has the AED price, area, size, seller type, and photos from the public search results. Monitor mode saves only new ads and price changes.

- **URL**: https://apify.com/crawloop/dubizzle-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Real estate, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.95 / 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.
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

## Dubizzle Scraper

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Dubizzle or its affiliates. Data is read from publicly accessible search result pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**Dubizzle scraper** for UAE property and used cars. Each row is one listing: asking price in AED, area, size, seller type, and photos. Search property for rent, property for sale, or used cars, or paste a results URL. Use it as a **Dubizzle API alternative** from **Python**, **Node.js**, **cURL**, or **Apify MCP**.

**Best for:** Dubai rental and sale leads, used-car asking prices, and a scheduled run that saves only new ads and price changes.

| Actor | Role |
| :--- | :--- |
| Dubizzle Scraper ◄── you are here | UAE property and used cars: AED price, area, size, seller type |
| [Sahibinden Scraper](https://apify.com/crawloop/sahibinden-scraper) | Turkey classifieds |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | France classifieds |
| [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper) | Netherlands classifieds |
| [Facebook Marketplace Scraper](https://apify.com/crawloop/facebook-marketplace-scraper) | Marketplace listings |
| [Cars.com Scraper](https://apify.com/crawloop/cars-com-scraper) | US car listings |
| [mobile.de Scraper](https://apify.com/crawloop/mobile-de-scraper) | Germany car listings |

### When to use this Actor

- **Dubai rentals** — Leave Search URLs empty. Section Property for rent, Emirate Dubai.
- **Sales or used cars** — Switch the section. Add a keyword such as marina or a make name.
- **A results page you already opened** — Paste the Dubizzle search URL. Section and keyword are ignored when Search URLs is set.
- **New ads and price cuts** — Turn on monitor mode and schedule the same search. The first run stores a baseline and saves nothing. Later runs save new listing ids and price changes.

### When not to use this Actor

- **Phone numbers or email** — The row only says whether WhatsApp or a phone contact is offered. The number is not collected.
- **Egypt or other country sites** — This Actor reads UAE Dubizzle hosts.
- **A full-city dump in one run** — Cap `maxItems` (350) and `maxPages` (10). Split by section or keyword.

### Key features

- **Search hits** — Title, AED price, rent period, city, neighbourhood, beds, baths, size, seller type, and photos. Residential UAE proxy and a browser session. Default **2048 MB**.
- **Property and motors** — Rent, sale, or used cars.
- **Pasted URL** — Any `dubizzle.com` search URL.
- **Monitor** — Named key-value store of listing id and last price. The seed run opens one page and saves no rows.

### Input

| Field | Required | Description |
| :--- | :--- | :--- |
| Search URLs | No | Dubizzle search URL. Overrides section, emirate, and keyword. |
| Section | No | Property for rent, property for sale, or used cars. Default rent. |
| Emirate | No | Default Dubai. |
| Keyword | No | Passed as the keywords filter on a built URL. |
| Maximum listings | No | Default 35. Maximum 350. |
| Maximum pages | No | Default 3. Maximum 10. |
| Monitor mode | No | Baseline first, then new ads and price changes. |
| Proxy | No | Residential UAE. Required for a clean page. |

```json
{
  "section": "property-for-rent",
  "emirate": "dubai",
  "keyword": "marina",
  "maxItems": 35,
  "maxPages": 1,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "AE"
  }
}
```

### Output

One dataset row per listing.

| Field | Description |
| :--- | :--- |
| `id` | Listing id |
| `title` | Title |
| `price` | Asking price |
| `currency` | AED |
| `pricePeriod` | Yearly or monthly on rents |
| `city` | City |
| `location` | Neighbourhood breadcrumb |
| `bedrooms` / `bathrooms` / `size` | Property figures when the hit has them |
| `sellerType` | Agent or private |
| `hasWhatsapp` / `hasPhone` | Contact offered. No digits. |
| `url` | Listing URL |
| `image` | First photo |
| `postedAt` | UTC timestamp |

```json
{
  "id": "27653930",
  "title": "Spacious 1BR",
  "price": 68000,
  "currency": "AED",
  "pricePeriod": "Yearly",
  "city": "Dubai",
  "location": "Dubai > Dubai Marina",
  "bedrooms": 1,
  "bathrooms": 1,
  "size": 820,
  "sellerType": "Agent",
  "hasWhatsapp": true,
  "hasPhone": true,
  "url": "https://dubai.dubizzle.com/property-for-rent/residential/apartmentflat/example",
  "postedAt": "2026-10-02T18:00:00Z"
}
```

### Use cases

- Build a Dubai rental list by keyword and keep beds, size, and the asking price.
- Watch used-car asking prices and save only new ids or price changes.
- Export a neighbourhood snapshot to a sheet or a CRM without opening each listing.

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/dubizzle-scraper").call({
  section: "property-for-rent",
  emirate: "dubai",
  keyword: "marina",
  maxItems: 35,
  maxPages: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient()
run = client.actor("crawloop/dubizzle-scraper").call(run_input={
    "section": "property-for-sale",
    "emirate": "dubai",
    "maxItems": 35,
    "maxPages": 1,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~dubizzle-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"section":"motors","emirate":"dubai","maxItems":20,"maxPages":1}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store name.

Example prompts:

- "Run Dubizzle Scraper for Dubai property for rent, keyword marina, and return the first 20 rows as JSON"
- "Scrape Dubizzle used cars in Dubai and summarize asking prices"
- "Run Dubizzle Scraper, then compare car rows with Cars.com Scraper for the same model"

### Suite next step

For a car you found here, pull US asking prices with [Cars.com Scraper](https://apify.com/crawloop/cars-com-scraper). For a cross-border classifieds check, continue with [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) or [Sahibinden Scraper](https://apify.com/crawloop/sahibinden-scraper).

### FAQ

**Does this collect phone numbers?**
No. `hasPhone` and `hasWhatsapp` only say that a contact button exists.

**Why residential proxy?**
The site returns an interstitial on a datacenter IP. The default proxy is residential UAE.

**What does monitor mode save?**
The first run stores ids and prices and writes no dataset rows. The next run saves new ids and price changes.

# Actor input Schema

## `startUrls` (type: `array`):

Dubizzle UAE search or category URLs. When this list is set, section, emirate, and keyword are ignored.

## `section` (type: `string`):

Used when Search URLs is empty.

## `emirate` (type: `string`):

Emirate host used when Search URLs is empty. Dubai is the verified default. Paste a URL for a host that does not match.

## `keyword` (type: `string`):

Optional text passed as the keywords filter when the Actor builds the search URL.

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

How many listings to save. One search page is about 35 rows. Monitor mode examines the first page and saves only new ids and price changes.

## `maxPages` (type: `integer`):

How many search pages to open. Each page is a browser load.

## `monitorMode` (type: `boolean`):

The first run for a search stores a baseline and saves nothing. Later runs save new listings and price changes only.

## `monitorStateStore` (type: `string`):

Named key-value store that keeps the baseline between scheduled runs.

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

Residential UAE proxy. Dubizzle answers a datacenter IP with an Imperva interstitial.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://dubai.dubizzle.com/property-for-rent/residential/"
    }
  ],
  "section": "property-for-rent",
  "emirate": "dubai",
  "maxItems": 35,
  "maxPages": 3,
  "monitorMode": false,
  "monitorStateStore": "dubizzle-monitor",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AE"
  }
}
```

# Actor output Schema

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

Default dataset items — one listing per row.

# 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 = {
    "startUrls": [
        {
            "url": "https://dubai.dubizzle.com/property-for-rent/residential/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/dubizzle-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 = { "startUrls": [{ "url": "https://dubai.dubizzle.com/property-for-rent/residential/" }] }

# Run the Actor and wait for it to finish
run = client.actor("crawloop/dubizzle-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 '{
  "startUrls": [
    {
      "url": "https://dubai.dubizzle.com/property-for-rent/residential/"
    }
  ]
}' |
apify call crawloop/dubizzle-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/dubizzle-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/5zdIoXLEoVWjNzcfb/builds/3ibNLazSj5nqbgMNc/openapi.json
