What the dubizzle scraper collects
Scrapes dubizzle UAE listing pages across every vertical — motors, property for rent and sale, classifieds, jobs and community — in English or Arabic. One row per ad with price in AED, payment frequency, emirate, seller, year, kilometres, bedrooms and the full attribute set, written to JSON and CSV with a run-metadata sidecar.
Used cars
Input: A motors listing URL, optionally with the site's own filtersOne row per car ad with make, year, kilometres, price in AED, emirate, seller kind and up to 20 vehicle attributes.
Property for rent or sale
Input: A property listing URLOne row per property ad with price, payment_frequency (yearly vs monthly rent), bedrooms, bathrooms, size in sq ft and location.
Classifieds (electronics and more)
Input: A classified category URLOne row per item ad with price, location, photos count and posting/bump dates.
Filtered or Arabic listings
Input: Any listing URL with filters, or the /ar pathThe site's own filters in the URL survive pagination; the Arabic version is selected by the /ar path and diffs against English as the same ads.
From zero to dubizzle data in 3 steps
Install
Clone the repository and install one browser engine. Python 3.9+.
$ git clone https://github.com/2scraper/dubizzle-scraper.git && cd dubizzle-scraper $ python3 -m venv .venv && . .venv/bin/activate $ pip install -r requirements.txt -r requirements-playwright.txt $ python -m playwright install chromium
Run a scraper
Pick what you need and run it. Every flag is documented in the README.
$ python3 playwright_scraper.py --url 'https://uae.dubizzle.com/motors/used-cars/' --pages 3 --format both --out cars$ python3 playwright_scraper.py --url 'https://uae.dubizzle.com/property-for-rent/residential/apartmentflat/' --pages 2$ python3 playwright_scraper.py --url 'https://uae.dubizzle.com/classified/electronics/televisions/'$ python3 playwright_scraper.py --url 'https://uae.dubizzle.com/motors/used-cars/?price_max=50000&year_min=2020'Get structured data
Rows land in JSON or CSV (
--format), with a.meta.jsonsidecar recording status, pages fetched and why the run stopped.
dubizzle data fields
40 columns per row in a predictable schema. The most useful ones:
| Field | What it holds |
|---|---|
sku | The ad's locale-stripped URL path — present on every vertical |
title | Ad title |
price | Price as a number; null where the site publishes none (most jobs and community ads) |
currency | AED, as stated by the site |
payment_frequency | Rent period, e.g. yearly or monthly |
brand | Car make from the site's own taxonomy (motors only) |
vertical | motors, property, classified, jobs or community |
city | Emirate the ad is published in |
location | Full location path, e.g. UAE > Dubai > … |
year | Model year (cars) |
kilometers | Mileage (cars) |
bedrooms | Bedrooms (property) |
size_sqft | Property size in square feet |
seller_kind | Owner or dealer/agent |
listing_kind | organic, or the promoted slot the site injects |
attributes | Every per-vertical detail the ad publishes, as one object |
[
{
"source": "dubizzle.com",
"scraped_at": "2026-09-14T14:09:57.407908+00:00",
"url": "https://dubai.dubizzle.com/motors/used-cars/mercedes-benz/a-class/2026/08/22/mercedes-b…",
"sku": "/motors/used-cars/mercedes-benz/a-class/2026/08/22/mercedes-benz-a-class-a-45-s-amg-202…",
"title": "Mercedes-Benz A-Class A 45 S+ AMG 2021 | Korean Specs | Performance Hatchback",
"brand": "Mercedes-Benz",
"price": 112500.0,
"currency": "AED",
"original_price": null,
"discount_pct": null,
"rating": null,
"review_count": null,
"in_stock": true,
"image_url": "https://dbz-images.dubizzle.com/images/2026/08/22/fba17845b57a439493a256c43f0178de-.png…",
"category": "motors/used-cars/mercedes-benz/a-class",
"price_source": "next_data+jsonld",
"page": 1,
"position": 1,
"vertical": "motors",
"listing_id": 16951013,
"listing_uuid": "ac0df37b468f4757aebf3a7c36ccf0a1",
"short_url": "https://dubizzle.com/s/DOBJHj1",
"city": "Dubai",
"location": "UAE > Dubai > Dubai Creek Harbour > Creek Rise > Creek Rise 2 Tower",
"seller_name": null,
"seller_kind": "owner",
"seller_id": 22169399,
"is_verified": true,
"is_premium": true,
"listing_kind": "organic",
"photos_count": 6,
"posted_at": "2026-08-22T13:10:35+00:00",
"bumped_at": "2026-09-14T14:03:45+00:00",
"payment_frequency": null,
"bedrooms": null,
"bathrooms": null,
"size_sqft": null,
"year": 2021,
"kilometers": 82500,
"attributes": {
"make_model_trim": "Mercedes-Benz A-Class A 45 S+ AMG",
"interior_color": "Black",
"motors_trim": "A 45 S+ AMG",
"steering_side": "Left Hand",
"horsepower": "400 - 499 HP",
"exterior_color": "Silver",
"doors": "5+ doors",
"body_type": "Hatchback",
"no_of_cylinders": "4",
"fuel_type": "Petrol",
"seating_capacity": "5 Seater",
"year": "2021",
"regional_specs": "Korean Specs",
"kilometers": "82500",
"transmission_type": "Automatic Transmission",
"engine_capacity_cc": "1500 - 1999 cc",
"seller_type": "Owner",
"exterior_features": "Alloy Wheels, Power Tailgate, Rear Window Defogger, Rain-Sensing Wipers, Daytime Runnin…",
"driver_assistance_and_safety": "360 Camera, Alarm / Anti-Theft System, Adaptive Brake Lights, Anti-Lock Brakes (ABS), A…",
"comfort_and_convenience": "Air Conditioning, Ambient Interior Lighting, Keyless Entry, Leather Seats, Performance …",
"warranty": "No",
"entertainment_and_technology": "AM/FM Radio, Touchscreen Display, Navigation System, Steering Wheel Audio Controls, App…",
"vehicle_reference": "1791/16951013",
"price": "112500.00",
"badges": "No Accidents, Service History",
"make": "Mercedes-Benz",
"model": "A-Class"
}
},
{
"source": "dubizzle.com",
"scraped_at": "2026-09-14T14:09:57.408013+00:00",
"url": "https://dubai.dubizzle.com/motors/used-cars/nissan/patrol/2026/08/29/4896-pm-nismo-niss…",
"sku": "/motors/used-cars/nissan/patrol/2026/08/29/4896-pm-nismo-nissan-warranty-til-mar-2027-2…",
"title": "4,896 P.M | Nismo | Nissan Warranty til Mar 2027 | 0% Downpayment",
"brand": "Nissan",
"price": 249999.0,
"currency": "AED",
"original_price": null,
"discount_pct": null,
"rating": null,
"review_count": null,
"in_stock": true,
"image_url": "https://dbz-images.dubizzle.com/images/2026/08/29/b3baac760e694aa6bce15a69562845f6-.jpg…",
"category": "motors/used-cars/nissan/patrol",
"price_source": "next_data+jsonld",
"page": 1,
"position": 2,
"vertical": "motors",
"listing_id": 16958447,
"listing_uuid": "13dde2f0b7fe49c5a53b02517f0dbbe6",
"short_url": "https://dubizzle.com/s/DOBJJfV",
"city": "Dubai",
"location": "UAE > Dubai > Al Quoz",
"seller_name": "ALBA MOTORS L.L.C",
"seller_kind": "dealer",
"seller_id": 1505540,
"is_verified": true,
"is_premium": true,
"listing_kind": "organic",
"photos_count": 15,
"posted_at": "2026-08-29T13:05:35+00:00",
"bumped_at": "2026-09-14T13:56:04+00:00",
"payment_frequency": null,
"bedrooms": null,
"bathrooms": null,
"size_sqft": null,
"year": 2022,
"kilometers": 43000,
"attributes": {
"make_model_trim": "Nissan Patrol Nismo",
"interior_color": "Red",
"motors_trim": "Nismo",
"steering_side": "Left Hand",
"horsepower": "400 - 499 HP",
"exterior_color": "Grey",
"doors": "4 door",
"body_type": "SUV",
"no_of_cylinders": "8",
"fuel_type": "Petrol",
"year": "2022",
"seating_capacity": "7 Seater",
"regional_specs": "GCC Specs",
"kilometers": "43000",
"transmission_type": "Automatic Transmission",
"engine_capacity_cc": "4000+ cc",
"seller_type": "Dealer",
"exterior_features": "Sunroof",
"driver_assistance_and_safety": "Parking Sensors - Front, Parking Sensors - Rear",
"comfort_and_convenience": "Keyless Entry, Leather Seats, Keyless Start",
"warranty": "Yes",
"target_market": "UAE (can be exported)",
"entertainment_and_technology": "Navigation System, Apple CarPlay, Android Auto",
"price": "249999.00",
"badges": "Service History",
"make": "Nissan",
"model": "Patrol",
"agent": "ALBA MOTORS L.L.C"
}
}
]First 2 of 10 rows from a real run — sample_output.json. Long values shortened here.
Handles what breaks naive dubizzle scrapers
Works on every vertical, not just cars and flats
JSON-LD is absent on three of six verticals, so the primary source is the site's own __NEXT_DATA__ payload, with JSON-LD as enrichment and a URL-anchored DOM fallback.
Refusals told apart from content
The site's 'Pardon Our Interruption' refusal is HTTP 200. A page counts as served only when it is built from dubizzle's own asset hosts — hundreds of references on every real page, zero on both refusals.
No phantom rows past the end
A page past the end still renders one promoted Car of the Week. Such pages are classified empty and not parsed, and the promoted slot is marked in listing_kind on real pages.
Honest nulls and rent periods
price_source ends in :no-price when the site published no price, and payment_frequency keeps yearly and monthly rents from being compared as equals.
Scraping infrastructure included
The same tested core runs every 2scraper repository, so the hard parts work the same way on every site.
CAPTCHA handling
Detects the challenge a page really serves and, with a 2Captcha key, solves it only when it blocks the data — a capped number of solves per page.
Proxy rotation
Single proxy or a pool from a file, rotated on blocks with a fresh browser per exit. Credentials stay out of argv and logs.
Fingerprints
Optional complete device identity from the 2Captcha Fingerprint API — user agent, client hints, locale and timezone that agree with each other.
Scraping Browser API
Point --cdp-endpoint at a managed Chromium with its own exit country — no browser infrastructure to run yourself.
Honest run metadata
Every run writes a .meta.json sidecar and distinct exit codes: complete, blocked, empty and partial are never confused, and a failed run never overwrites good data.
Diff two runs
diff_runs.py compares two complete dubizzle snapshots by id — new, removed and changed rows for monitoring.
What teams do with dubizzle data
Used-car price monitoring
Track asking prices by make, model, year and mileage across emirates, sliced with the site's own filters.
Rental yield and property research
Collect rents with their payment period, bedrooms and size to compare areas and building prices per square foot.
Dealer and inventory tracking
Follow dealer versus owner listings, bump dates and listing ages to watch inventory turnover.
Second-hand electronics pricing
Benchmark resale prices for electronics and other classified categories over time with diff_runs.py.
Free to run. Pay only for what the site requires.
Needs a residential exit or the Scraping Browser API
The exit address has to be in the UAE: Imperva fronts the site and, in measurements from Sep 2026, refused European addresses whatever the browser. The README's live runs all used the Scraping Browser API with a country-ae login; a UAE residential proxy with your own browser is the other route. No challenge was rendered to anonymous visitors on listing pages, so captcha solving has nothing to do on the read path; fingerprints are optional.
Optional 2Captcha services — captcha solving, the Scraping Browser API, residential proxies and fingerprints — work behind one key.
Good to know
- The site caps pagination (e.g. 400 pages on a motors listing), so large catalogues need filter slices.
- rating and review_count are null on every row: dubizzle rates sellers, not ads.
- Selenium's content path was not live-verified; it cannot use an authenticated CDP endpoint or proxy.
2scraper vs. hosted scraper APIs
| 2scraper | Typical hosted API | |
|---|---|---|
| Code | Open source, MIT — read and patch it | Closed |
| Cost | Free; optional services billed only when used | Subscription or per request / per result |
| Runs on | Your machine, server or CI | The vendor's infrastructure |
| Output | JSON/CSV files + run metadata | API responses |
| When the site changes | Fix it yourself or open an issue / PR | Wait for the vendor |
dubizzle scraper FAQ
Do I need a proxy?
Yes — a UAE exit. Use the Scraping Browser API with country-ae in the login, or a proxy with region-ae. A larger pool of non-UAE addresses buys nothing here.
Which dubizzle sites are supported?
uae.dubizzle.com in English and Arabic. The Bahrain, Oman and Egypt sites run a different platform and are refused with that reason.
Why are prices null on jobs ads?
The site publishes no salary on job ads and most community ads quote on request; price_source marks those rows with :no-price.
How many pages can I scrape?
As many as the site addresses — but it caps them: a used-cars listing of 34,619 ads published only 400 pages (Sep 2026). Use the site's filters to slice a large category.
Why did a hub URL return zero rows?
Pages like / and /motors/ are hubs with no result grid. Pass a listing one or two levels down, such as /motors/used-cars/.
Is scraping dubizzle legal?
The scraper reads public listing pages only — no login, no posting, no contacting sellers. Follow the site's terms and the law where you operate.