# Dubizzle Scraper (`automation-lab/dubizzle-uae-scraper`) Actor

Search and export public Dubizzle UAE listings across property, cars, goods, jobs, sellers, agents, and agencies for recurring market monitoring.

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

## Pricing

Pay per event + usage

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/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

## Dubizzle Scraper

Search and export public **Dubizzle UAE listings** for recurring inventory, price, seller, agency, and broker monitoring. The Actor covers property, cars, goods, jobs, and community categories and returns structured records ready for spreadsheets, databases, scheduled comparisons, and data pipelines.

Use a keyword, a UAE city, a category path, or a Dubizzle URL. Results include stable identifiers, prices, locations, category-specific attributes, images, contact-availability flags, and public seller or agency fields when the source provides them.

> This independent Actor is not affiliated with, endorsed by, or sponsored by Dubizzle.

### What can you do with this Dubizzle scraper?

- Search Dubizzle cars in Dubai, Abu Dhabi, Sharjah, or all UAE cities.
- Export property-for-sale and property-for-rent inventory for market analysis.
- Track asking prices and stable listing IDs across scheduled runs.
- Compare agency and agent inventory in a location such as Dubai Marina.
- Collect classifieds, jobs, furniture, mobile, or community listing records.
- Feed current records into Google Sheets, Airtable, a warehouse, or an internal API.
- Start from a copied Dubizzle category, search, or individual listing URL.

The Actor uses Dubizzle's public browser search data directly. It does not log in, reveal hidden contact details, send messages, or modify listings.

### Who is it for?

#### Property analysts and brokers

Build comparable listing sets by city, category, query, price, location, agent, or agency. Stable `listingId` and `uuid` values make recurring comparisons easier.

#### Automotive dealers and researchers

Search current Dubizzle cars and collect price, model, year, mileage, seller type, photos, and category-specific details when available.

#### Marketplace and resale teams

Export public goods inventory for assortment, availability, and advertised-price analysis without copying listing pages manually.

#### Data engineers and automation teams

Schedule the Actor, consume the default dataset through Apify API, and load typed JSON into downstream systems.

### Supported input routes

1. **Keyword search** — provide `query`, optionally with `city` and `category`.
2. **Category discovery** — provide a category such as `motors/used-cars` without a keyword.
3. **Dubizzle URL** — paste a category, search, or listing URL in `startUrls`.
4. **Multiple URLs** — process several Dubizzle scopes in one run, deduplicated by source ID.

A city subdomain in a URL takes precedence over the top-level `city` input. For example, a `dubai.dubizzle.com` URL stays scoped to Dubai.

### Supported UAE cities

- All UAE
- Dubai
- Abu Dhabi
- Sharjah
- Ajman
- Ras Al Khaimah
- Fujairah
- Umm Al Quwain
- Al Ain

Use `uae` when you want results across all available Emirates.

### Supported listing categories

The public search index includes major Dubizzle categories such as:

- Motors and used cars
- Property for sale
- Property for rent
- Jobs
- Classified goods
- Furniture and garden
- Mobile phones and tablets
- Community and local services

Use the category slug visible in the Dubizzle URL. Examples include `motors/used-cars`, `property-for-sale/residential`, and `classified`.

### Input parameters

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `startUrls` | array | — | Dubizzle category, search, or individual listing URLs. |
| `query` | string | — | Search phrase such as `Toyota Land Cruiser` or `Dubai Marina`. |
| `city` | string | `uae` | UAE-wide or one supported city. URL subdomains override it. |
| `category` | string | — | Optional source category slug path. |
| `maxItems` | integer | `20` | Maximum unique records saved, from 1 to 5,000. |

You must provide at least one URL, a query, or a category.

### Getting started

1. Open the Actor input tab.
2. Keep the prefilled Dubai used-cars URL, or replace it with your own scope.
3. Set `maxItems` to the number of records you need.
4. Run the Actor.
5. Open the **Dubizzle listings** dataset view.
6. Export JSON, CSV, Excel, XML, or RSS, or connect the dataset API.

### Example: search Dubizzle cars

```json
{
  "query": "Toyota Land Cruiser",
  "city": "dubai",
  "category": "motors/used-cars",
  "maxItems": 100
}
```

This is useful for tracking model inventory and advertised prices in Dubai.

### Example: export apartment rentals

```json
{
  "startUrls": [
    {
      "url": "https://dubai.dubizzle.com/property-for-rent/residential/apartment/"
    }
  ],
  "maxItems": 250
}
```

The Actor translates supported browser URL category aliases to the corresponding public search category.

### Example: monitor property brokers

```json
{
  "query": "Dubai Marina",
  "city": "dubai",
  "category": "property-for-sale/residential",
  "maxItems": 500
}
```

Schedule this input and compare `listingId`, `price`, `agentId`, `sellerName`, `businessId`, and `businessName` between runs.

### What data does the Actor extract?

| Group | Fields |
| --- | --- |
| Identity | `listingId`, `uuid`, `url`, `shortUrl`, `source` |
| Titles | `title`, `titleAr`, `description` |
| Pricing | `price`, `currency` |
| Location | `city`, `location`, `latitude`, `longitude` |
| Category | `category`, `categoryPath`, `details` |
| Media | `photos` |
| Seller | `sellerType`, `sellerName`, `sellerId` |
| Business | `businessName`, `businessId`, `agentId` |
| Contact signals | `hasPhone`, `hasWhatsApp`, `canChat` |
| Status | `isVerified`, `isPremium`, `isFeatured` |
| Time | `postedAt`, `scrapedAt` |

Fields can be `null` when Dubizzle does not expose them for that category or listing.

### Example output

```json
{
  "listingId": "item:4:2:5965:17566988",
  "uuid": "a1b2c3d4e5f6478899aabbccddeeff00",
  "title": "Furnished apartment with balcony",
  "url": "https://dubai.dubizzle.com/property-for-sale/residential/apartment/example-listing/",
  "shortUrl": "https://dubizzle.com/s/Example",
  "price": 1250000,
  "currency": "AED",
  "city": "Dubai",
  "location": "UAE, Dubai, Dubai Marina",
  "category": "Property for Sale > Residential > Apartment",
  "categoryPath": [
    "property-for-sale/residential/apartment",
    "property-for-sale/residential",
    "property-for-sale"
  ],
  "details": {
    "Bedrooms": "2",
    "Furnished": "Yes"
  },
  "sellerType": "Agent",
  "sellerName": "Example Agent",
  "businessName": "Example Real Estate",
  "hasWhatsApp": true,
  "isVerified": true,
  "source": "dubizzle",
  "scrapedAt": "2025-01-15T12:05:00.000Z"
}
```

The sample preserves the real output shape while anonymizing seller and listing values.

### How much does it cost to scrape Dubizzle listings?

The Actor uses pay-per-event pricing:

- **Start:** $0.005 once per run.
- **Listing:** $0.001336 per saved listing on the Bronze plan, with lower per-item prices on higher plans.

At the Bronze tier, approximate Actor charges are:

| Saved listings | Approximate charge |
| ---: | ---: |
| 10 | 0.01836 USD (`$0.005 + 10 × $0.001336`) |
| 100 | 0.1386 USD (`$0.005 + 100 × $0.001336`) |
| 1,000 | 1.341 USD (`$0.005 + 1,000 × $0.001336`) |

Only normalized records saved to the default dataset trigger the listing event. Duplicate, invalid, empty, or failed records are not charged as listings. Apify platform usage may be billed separately depending on the pricing configuration shown in Console.

### Recurring monitoring workflow

1. Choose a stable query, category, and city.
2. Run once and save the dataset export.
3. Create an Apify schedule for the same input.
4. Join consecutive datasets by `listingId` or `uuid`.
5. Detect new, removed, or price-changed records.
6. Group by `businessId`, `agentId`, category, or location.
7. Send changes to a webhook, spreadsheet, database, or BI tool.

The Actor emits current snapshots. It does not maintain a private historical database or claim that a missing item was sold.

### Pagination, limits, and deduplication

Search results are requested in bounded pages of up to 50 records. The Actor stops when it reaches `maxItems` or the source reports no more pages.

When several inputs overlap, records are deduplicated by the stable Dubizzle search object ID. `maxItems` applies across the whole run, not separately to each URL.

### URL behavior

- Only `dubizzle.com` and its subdomains are accepted.
- Non-Dubizzle URLs fail input validation.
- City subdomains are preserved.
- Category URLs apply equivalent category filters.
- Supported individual listing URLs are resolved through their UUID.
- Unknown URL shapes fail closed or return no matching records; they are not silently broadened to all UAE data.

### Empty results and errors

A valid search can return zero records. That is a successful empty result, not fabricated data.

The Actor fails with a non-zero status for malformed input, unsupported hosts, invalid category syntax, persistent upstream errors, or an unexpected response shape. Transient upstream failures and rate limits receive bounded retries with backoff.

If a formerly working input suddenly fails, retry later and check whether Dubizzle changed its public search configuration. Avoid launching repeated large runs while the source is unavailable.

### API: cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~dubizzle-uae-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Toyota Land Cruiser",
    "city": "dubai",
    "category": "motors/used-cars",
    "maxItems": 100
  }'
```

Use the returned run ID to fetch status and dataset links.

### API: JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/dubizzle-uae-scraper').call({
  query: 'Dubai Marina',
  city: 'dubai',
  category: 'property-for-sale/residential',
  maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API: Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/dubizzle-uae-scraper').call(run_input={
    'query': 'Dubai Marina',
    'city': 'dubai',
    'category': 'property-for-sale/residential',
    'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with Apify MCP

Add this Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/dubizzle-uae-scraper"
```

#### Claude Desktop, Cursor, and VS Code

Use the same remote server JSON in Claude Desktop, Cursor, or VS Code MCP settings:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/dubizzle-uae-scraper"
    }
  }
}
```

Example prompts:

- “Run the Dubizzle scraper for Toyota Land Cruiser used cars in Dubai and summarize median advertised price.”
- “Export 200 Dubai Marina property-for-sale records and group them by agency.”
- “Compare these two scheduled datasets by listing ID and show price changes.”

### Integrations

Use Apify integrations to:

- trigger workflows through webhooks;
- write datasets to Google Sheets;
- connect Make or Zapier;
- download CSV or Excel;
- load JSON into BigQuery, Snowflake, or a custom warehouse;
- run from GitHub Actions, Airflow, or another scheduler.

### Legality and responsible use

This Actor accesses publicly visible listing search data. You are responsible for complying with applicable laws, Dubizzle's terms, robots and access policies, and privacy obligations.

Do not use the output to spam sellers, evade platform controls, make automated decisions about people, or republish copyrighted text and images without permission. Contact-availability flags indicate that a contact method exists; they do not grant consent to contact anyone.

Collect only the fields and volume needed for a legitimate purpose. Protect exported datasets and delete them when no longer required.

### Limitations

- Output reflects the public search index at run time, not a guaranteed complete marketplace archive.
- Some fields vary by category and can be absent.
- Hidden phone numbers, email addresses, and private account data are not extracted.
- The Actor does not log in, place ads, message sellers, download media files, or verify listing claims.
- Search ranking is controlled by Dubizzle.
- Public source configuration and search keys can change.
- Naturally sparse queries may return few or zero results.

### Troubleshooting

#### Why did my URL return no records?

Check that it is a current UAE Dubizzle category, search, or listing URL. Very specific URL filters may not map to a public search facet. Start with the parent category and add a keyword.

#### Why are seller or agency fields null?

Dubizzle exposes different fields across categories and seller types. Property agent listings often include agent and agency objects, while private goods listings may expose only a seller classification.

#### Why did the run fail instead of returning an empty dataset?

The Actor distinguishes a valid no-result search from an upstream challenge, rejected request, or malformed response. Failure prevents a source outage from looking like a legitimate empty market.

#### Can I monitor changed listings?

Yes. Schedule repeat runs and compare stable `listingId` or `uuid` values. The Actor produces snapshots but does not store cross-run history itself.

#### Does it scrape Dubizzle Egypt or other countries?

No. This Actor is scoped to the public UAE marketplace and supported UAE city subdomains.

### FAQ

#### Is a proxy required?

No. The shipped Actor uses the public structured search endpoint directly and does not send user traffic through a browser or residential proxy.

#### Can I export to CSV or Excel?

Yes. Open the dataset and select the desired export format, or request it through the dataset API.

#### Are duplicate records charged twice?

Not within one run. Overlapping inputs are deduplicated by stable source ID before saving and charging.

#### Can I scrape more than 5,000 records?

Split the work into narrower city, category, or query runs. The per-run limit keeps execution bounded and predictable.

#### Is the data real-time?

It is a current snapshot from Dubizzle's public search data when the run executes. Source indexing delays may exist, so the Actor does not promise instantaneous updates.

### Related automation-lab Actors

For broader regional or marketplace research, combine this Actor with:

- [OLX Poland Classifieds Scraper](https://apify.com/automation-lab/olx-poland-classifieds-scraper)
- [Yapo Chile Marketplace Listings Scraper](https://apify.com/automation-lab/yapo-chile-marketplace-listings-scraper)
- [Drom.ru Car Marketplace Scraper](https://apify.com/automation-lab/drom-ru-car-marketplace-scraper)

Keep source datasets separate and normalize common fields such as title, price, location, category, URL, and scrape timestamp in your downstream pipeline.

# Actor input Schema

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

Dubizzle category, search, or individual listing URLs. URL category and city scope are preserved.

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

Keywords to match in public Dubizzle listings, such as Toyota Land Cruiser or Dubai Marina apartment.

## `city` (type: `string`):

Limit keyword or category discovery to one city. A city subdomain in a start URL takes precedence.

## `category` (type: `string`):

Optional Dubizzle category path, for example motors/used-cars, property-for-rent/residential, or classified/mobile-phones.

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

Maximum number of unique listing records saved across all inputs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://dubai.dubizzle.com/motors/used-cars/"
    }
  ],
  "city": "uae",
  "maxItems": 20
}
```

# Actor output Schema

## `overview` (type: `string`):

Dataset containing all saved listing records in the overview view.

# 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/motors/used-cars/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/dubizzle-uae-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/motors/used-cars/" }] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/dubizzle-uae-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/I2eGCthue0LAUSqxg/builds/0HpQcWvJZm9g4g0hN/openapi.json
