Dubizzle.com Scraper - Property, Motors, Agents & UAE Listings
Pricing
from $1.00 / 1,000 listing results
Dubizzle.com Scraper - Property, Motors, Agents & UAE Listings
From $1/1K. Scrape dubizzle.com across the UAE for property, motors, and agent listings. Search by filters or URLs with auto pagination. Returns price, beds, baths, area, agent/agency contacts, WhatsApp, email, GPS, photos, amenities, verification, and Dubai Land Department history.
Pricing
from $1.00 / 1,000 listing results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
16
Total users
2
Monthly active users
9 days ago
Last modified
Categories
Share
Dubizzle Scraper: UAE Property, Motors and Agent Listings
Dubizzle Scraper turns dubizzle.com into structured data across the United Arab Emirates: property for sale, property for rent, used cars (motors) and the property agents directory. Get price, beds, baths, area, GPS coordinates, verification status, and full agent, agency and contact details on every card, plus an optional detail pass for the complete description, categorized amenities, photo gallery and Dubai Land Department transaction history. Search by city and filters, or paste any Dubizzle URL you already refined in a browser, then export to JSON, CSV or Excel, or pull results straight into your app through the API.
Why This Scraper?
- Four sections, one actor. Property for sale, property for rent, motors and the agents directory, across all eight UAE city slugs the site serves.
- Two ways in. Search mode builds the URL from city, price, bedrooms, area, furnishing, completion status and sort, so you don't craft links by hand. URL mode takes any Dubizzle link you already refined in a browser.
- Nothing dropped by default. Every card already returns the full nested agent, agency and contact objects, plus geocoded coordinates, even without the detail pass.
- Optional detail mode. Adds the full description, categorized amenities, agent email, permit numbers, the full photo gallery and, for Dubai property, Dubai Land Department transaction history. Billed when you turn it on, or when you paste a single listing URL in URL mode, which always returns the full detail record.
- One predictable cap. Max listings, not a page limit, decides run size and cost.
- Resumable and checkpointed runs. Point Resume at a previous run to collect only what it doesn't already have, and a run that gets restarted by the platform continues on its own instead of starting over.
- Incremental mode for recurring monitoring. Schedule the same search and get back only what actually changed, with the state tracked for you between runs.
Use Cases
- Property portals and PropTech tools: mirror live for-sale and for-rent inventory with agent contact details already attached.
- Market and pricing research: track price, area and bedroom mix across UAE cities and neighborhoods over time.
- Used-car aggregation: pull motors listings for price comparison and inventory tracking.
- Agency and lead-generation tools: build a directory of agents and agencies with phone, WhatsApp and verification status.
- Change monitoring: schedule a recurring run and get notified only when new listings appear or a tracked listing's price or details change.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing. Every record also carries
scrapedAt(when the row was fetched) anddetailMissing(true only when detail mode was on and this one listing's detail fetch didn't land this run); both are bookkeeping fields, not listing content, so they aren't shown below.
| Field | Example |
|---|---|
id | "12345678" |
url | "https://dubai.dubizzle.com/property-for-sale/residential/apartment/2026/1/1/sample-0/" |
title | "Sample Listing Title" |
price / currency | 1500000 / "AED" |
section | "property-for-sale" |
categorySlug | "apartment" |
bedrooms / bathrooms | 2 / 2 |
area / areaUnit | 1200 / "sqft" |
city / neighborhood | "Dubai" / "Sample Community" |
latitude / longitude | 25.0000 / 55.0000 |
isVerified | true |
agentName | "Agent Name" |
agencyName | "Sample Agency" |
phoneNumber / whatsapp | "+971500000000" / "+971500000000" |
addedOn | 1700000000 |
furnished / completionStatus | true / "completed" |
propertyReference | "REF-0001" |
hasDldHistory / photosCount | true / 12 |
raw | { complete upstream listing object } |
description | full text, detail mode only |
amenities | categorized facility list, detail mode only |
email | agent email, detail mode only |
dldHistory | Dubai Land Department transactions, detail mode only, Dubai property only |
changeType / changedFields | "NEW" / ["price"], incremental mode only |
firstSeenAt / lastSeenAt | ISO timestamps, incremental mode only |
Motors (used cars) and property agents directory results come through this same record shape. A motors record carries the same fields, with the property-only ones (bedrooms, bathrooms, area, completionStatus) empty; vehicle detail like make, model, mileage and year lives inside raw rather than a dedicated top-level field. A property agents record represents the agent's own profile card: agentName is the agent's own display name, phoneNumber and whatsapp are the agent's own numbers, and the property-specific fields are empty.
How to Use
- Pick a mode:
search(city and filters) orurl(paste links). - For search mode, choose the city or cities, the section (property for sale, property for rent, motors, or agents) and any filters. For URL mode, paste one or more Dubizzle links.
- Turn on Include listing details if you need the full description, amenities, email and photo gallery, and set Max listings to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search mode, basic:
{"mode": "search","locations": ["dubai"],"section": "property-for-sale","propertyType": "residential","maxListings": 20}
Search mode with filters and sort:
{"mode": "search","locations": ["dubai", "abu-dhabi"],"section": "property-for-rent","propertyType": "apartment","minPrice": 50000,"maxPrice": 150000,"minBedrooms": 1,"maxBedrooms": 2,"furnishing": "furnished","sortBy": "newest","maxListings": 50}
Motors (used cars):
{"mode": "search","locations": ["dubai"],"section": "motors","maxListings": 30}
URL mode, multiple links, with detail mode on:
{"mode": "url","urls": ["https://dubai.dubizzle.com/en/property-for-sale/residential/","https://uae.dubizzle.com/en/property-agents/"],"fetchDetails": true,"maxListings": 100}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/dubizzle-com-scraper").call(run_input={"mode": "search","locations": ["dubai"],"section": "property-for-sale","maxListings": 20,})for listing in client.dataset(run["defaultDatasetId"]).iterate_items():print(listing["title"], listing["price"], listing["currency"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/dubizzle-com-scraper').call({mode: 'search',locations: ['dubai'],section: 'property-for-sale',maxListings: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Detail mode and the listings cap
Max listings is the one cap that decides run size; Max pages is an optional extra bound on top of it, not a substitute for it, and can be left at 0 so each search walks as deep as the source allows on its own. Detail mode (fetchDetails) adds one extra fetch per listing and is billed as a per-item surcharge only for listings that actually reach the dataset, never for one an incremental run decides to suppress. A single listing URL pasted in URL mode is always fetched as a full detail record and always carries this surcharge, even with detail mode off. Include Dubai Land Department history only takes effect when detail mode is on and the listing is a Dubai property; it's ignored everywhere else.
Resume and incremental mode (recurring updates)
Resume (resumeFromRunId) continues one specific interrupted run: paste its run or dataset id and this run skips every listing already collected there, so a follow-up run plus the original together give you the full set without double charges. The actor also checkpoints its own progress automatically within a run, so a platform restart or a retry of a failed run picks up where it stopped instead of re-collecting anything.
Incremental mode (incrementalMode) is for a different job: scheduling the same search repeatedly and getting back only what changed. The actor remembers the previous run itself, keyed on your filters (or a State key you set, unaffected by Max pages/Max listings), and classifies every listing as NEW, UPDATED (with changedFields), UNCHANGED (skipped and not billed unless Emit unchanged is on), or EXPIRED (only after a run that reached the natural end of every search or URL, with no cap hit and no Resume, and only with Emit expired on). REAPPEARED is not something a normal scheduled run produces by itself: it only appears for a listing that an earlier complete run already marked EXPIRED, and that later shows up again. Combining Incremental mode with Resume fails fast if that search already has saved incremental state; combining them the first time, before any state exists, is fine and bootstraps a new monitoring baseline from the resumed dataset.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search builds the URL from filters; url scrapes pasted URLs. |
locations | array | none (prefill: ["dubai"]) | City slugs: dubai, abu-dhabi, sharjah, ras-al-khaimah, ajman, fujairah, umm-al-quwain, al-ain. Search mode. If left empty, the actor still searches Dubai, a code fallback rather than a schema default. |
section | string | property-for-sale | property-for-sale, property-for-rent, motors, or property-agents. Search mode. |
propertyType | string | residential | Property sub-type for the property sections. Search mode. |
minPrice | integer | none | Minimum price in AED. Search mode. |
maxPrice | integer | none | Maximum price in AED. Search mode. |
minBedrooms | integer | none | Minimum bedrooms. Property sections. |
maxBedrooms | integer | none | Maximum bedrooms. Property sections. |
minArea | integer | none | Minimum built-up area in sqft. Property sections. |
maxArea | integer | none | Maximum built-up area in sqft. Property sections. |
furnishing | string | any | any, furnished, unfurnished. Property sections. |
completionStatus | string | any | any, completed, off-plan. Property sections. |
sortBy | string | popular | popular, newest, oldest, price-asc, price-desc, verified. Search mode. |
urls | array | none (prefill: 1 example URL) | Full Dubizzle URLs. URL mode. Filter fields are ignored here; left empty, URL mode has nothing to scrape. |
maxPages | integer | 0 | Optional bound on pages per search or URL. 0 = walk as deep as the source serves, stopping on its own at the storefront's reported total or a repeated page. Does not cap listings; use Max listings for that. |
maxListings | integer | 20 | The single result cap. 0 = unlimited, bounded by Max pages or the storefront total. |
fetchDetails | boolean | false | Include the full record for each listing (description, amenities, email, full photo gallery, permit numbers). Billed as a per-item surcharge. |
includeDldHistory | boolean | true | With detail mode on, also pull Dubai Land Department history for Dubai property listings. Ignored otherwise. |
resumeFromRunId | string | none | ID of a previous run (or dataset) of this actor. Listings already there are skipped, so this run returns only new ones. |
incrementalMode | boolean | false | For a scheduled run against the same search. Classifies every listing as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against remembered state. |
stateKey | string | none | Names the monitoring campaign so it keeps its own baseline. Left empty, one is auto-derived from your search filters. Incremental mode only. |
emitUnchanged | boolean | false | Also return (and bill) UNCHANGED listings every run. Incremental mode only. |
emitExpired | boolean | false | Also return (and bill) a one-time EXPIRED row for a tracked listing that disappeared, only after a run that reached the natural end of the search. Incremental mode only. |
proxy | object | none (prefill: Apify Residential, country AE) | Connection settings. If this field is omitted, the actor falls back to its own built-in backup connection instead of Apify Residential and logs a warning; see Plan Requirement below. |
mcpConnectors | array | none | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | none | Notion connector only: page under which records are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"id": "12345678","url": "https://dubai.dubizzle.com/property-for-sale/residential/apartment/2026/1/1/sample-0/","title": "Sample Listing Title","price": 1500000,"currency": "AED","section": "property-for-sale","categorySlug": "apartment","bedrooms": 2,"bathrooms": 2,"area": 1200,"areaUnit": "sqft","city": "Dubai","neighborhood": "Sample Community","latitude": 25.0000,"longitude": 55.0000,"isVerified": true,"agentName": "Agent Name","agencyName": "Sample Agency","phoneNumber": "+971500000000","whatsapp": "+971500000000","addedOn": 1700000000,"furnished": true,"completionStatus": "completed","propertyReference": "REF-0001","hasDldHistory": true,"photosCount": 12,"isPremium": false,"recordType": "listing","detailMissing": false,"scrapedAt": "2026-01-01T00:00:00Z","raw": { "external_id": 12345678, "name": { "en": "Sample Listing Title" } }}
Plan Requirement
Dubizzle serves full pages far more reliably to UAE residential connections than to datacenter ones. The Connection field comes prefilled with Apify Residential proxy, country AE, and that is the setting to keep for a dependable run. If Connection is left completely unset, for example when calling the actor from code without passing it, the actor falls back to its own built-in backup connection: the run still starts, but it logs a clear warning and can return few or no listings. A single listing URL pasted in URL mode is always fetched as a full detail record and carries the detail surcharge, even with detail mode off. The Pricing tab has the current per-listing rate and the detail-mode surcharge.
FAQ
How much does it cost?
You pay per listing returned, plus a surcharge only for listings where detail mode actually fetched extra data. The Pricing tab shows current rates. Use Max listings to cap the cost of any run.
Is it legal to scrape Dubizzle?
This actor collects only publicly available listing data. You are responsible for how you use it: follow Dubizzle's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Contact details on a listing belong to the person or agency that posted it, so handle them accordingly.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab against the same search and turn on Incremental mode. Each run then returns only NEW and UPDATED listings, unchanged ones are skipped and not billed, and EXPIRED only appears once a full, uncapped, non-resumed run has confirmed a tracked listing is really gone.
What's the difference between Resume and Incremental mode?
Resume continues one specific interrupted run from a pasted run or dataset id, useful for a single very large one-off collection. Incremental mode is for a recurring, scheduled run against the same search: the actor remembers state itself between runs, no id to paste. They solve different problems and can be combined once, to bootstrap a new monitoring baseline from an existing dataset, but not once that baseline already exists.
Why did my run fail instead of returning an empty dataset?
A run stops with a clear error only when resumeFromRunId points to a run or dataset it cannot read, or when Incremental mode is combined with Resume on a search that already has saved incremental state. Everything else, an empty URLs list in URL mode, a source that rejected every connection attempt this run, or a scheduled Incremental run where nothing changed since last time, finishes as a normal successful run that simply returns zero or few rows. An empty Locations input in search mode does not return zero rows; it falls back to searching Dubai.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each result into Notion, Linear or Airtable.
๐ Want more car data?
Pair this actor with these related scrapers from the same team:
| ๐ Trade Me NZ Scraper Scrape trademe.co.nz across all five sections: Marketplace goods and auctions, Property... | ๐ท๏ธ Subito.it Scrape Subito.it listings across cars, real estate, marketplace, jobs, and more. Search... |
| ๐ท๏ธ Gumtree UK Scrape gumtree.com classifieds across motors, property, jobs, services, pets and goods... | ๐ท๏ธ Kijiji.ca Scraper Scrape Kijiji.ca listings across property, vehicles, jobs, electronics, furniture... |
| ๐ท๏ธ Craigslist Scraper Scrape Craigslist postings in any of 700+ cities worldwide: price, title, posting text... | ๐ Bayut.com Scraper From $0.80/1K. Scrape Bayut.com property listings with prices, beds, baths, area, GPS... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.