Bayut UAE Real Estate Scraper avatar

Bayut UAE Real Estate Scraper

Pricing

Pay per usage

Go to Apify Store
Bayut UAE Real Estate Scraper

Bayut UAE Real Estate Scraper

Scrape normalized property listings from Bayut, the UAE's top real-estate portal — one row per listing with price, specs, geo-location, agency/agent details, DLD permit number, verification status, and amenities. Search by URL, purpose, location, or custom polygon.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share


🎯 What this scrapes

Bayut is the UAE's #1 property portal — Dubai, Abu Dhabi, Sharjah and every other emirate list for-sale and to-rent properties there first. This Actor wraps Bayut's own listing data directly, writing one structured row per property: price, bed/bath count, floor area, precise geo-coordinates, agency and agent details, the DLD Trakheesi permit number, TruCheck verification status, and amenity tags — a richer combined field set than any single Bayut scraper on the Apify Store ships today. Search by purpose + location, a custom polygon boundary, or direct search URLs.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Investor deal screening — pull every for-sale listing in a target area with price, size, and DLD permit number to spot underpriced units fast.
  • Rental market tracking — snapshot to-rent listings across an emirate to build price-per-sqft benchmarks.
  • Agency/agent lead lists — collect agency names, agent names, and (optionally) public phone numbers behind active listings.
  • Polygon-bound area research — draw a custom boundary instead of picking a fixed emirate/area slug for hyper-local coverage.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchUrlsarrayno'—'Direct Bayut search URLs to scrape as-is, e.g. https://www.bayut.com/for-sale/apartments/dubai/downtown-dubai/. Up to 50
purposestringno'for-sale'Sale vs. rent listings. Required (together with Location) if Search URLs and Polygon are unset.
propertyTypestringno'apartments'Bayut's own property-type vocabulary.
locationstringno'dubai/downtown-dubai'Emirate/area path slug, e.g. dubai/downtown-dubai. Required (together with Purpose) if Search URLs and Polygon are unset
polygonarrayno'—'Custom search boundary — a list of at least 3 [lat, lng] pairs. Alternative to Purpose + Location / Search URLs.
minBedsintegerno'—'Minimum bedrooms (0 = studio).
maxBedsintegerno'—'Maximum bedrooms.
minPriceintegerno'—'Minimum price in AED.
maxPriceintegerno'—'Maximum price in AED.
maxListingsintegerno50Hard cap on dataset rows for this run.
localestringno'en'Scrape the English or Arabic (/ar/) site mirror.
includeAgentPhonebooleannofalseEnrich rows with the listing agent's public phone number, where exposed.
proxyConfigurationobjectno{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Mandatory-by-default RESIDENTIAL — direct/datacenter-IP requests are blocked before reaching listing data.

Example input

{
"purpose": "for-sale",
"location": "dubai/downtown-dubai",
"propertyType": "apartments",
"maxListings": 3,
"locale": "en",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringBayut internal ID — dedup key.
listing_urlstringCanonical detail URL.
localestringLocale fetched under — 'en' or 'ar'.
titlestringListing headline.
purposestring'for-sale' or 'to-rent'.
property_typestringe.g. 'apartments'.
price_amount['number', 'null']Numeric price.
price_currencystringAlways 'AED' in v1.
price_frequency['string', 'null']'yearly' for rent, null for sale.
bedrooms['integer', 'null']0 = studio.
bathrooms['integer', 'null']Bathroom count.
area_value['number', 'null']Numeric floor area.
area_unit['string', 'null']'sqft' or 'sqm', as displayed.
location_hierarchyarrayBreadcrumb, coarse to fine ([0] = emirate).
latitude['number', 'null']WGS-84 latitude.
longitude['number', 'null']WGS-84 longitude.
agency_name['string', 'null']Listing agency.
agent_name['string', 'null']Listing agent.
agent_phone['string', 'null']Set only if includeAgentPhone=true and public.
permit_number['string', 'null']DLD Trakheesi ad-permit number.
verifiedbooleanBayut 'TruCheck' badge.
amenitiesarrayAmenity tags.
photos_countintegerGallery photo count.
listed_date['string', 'null']ISO YYYY-MM-DD.
scraped_atstringISO-8601 UTC row creation timestamp.

Example output

{
"listing_id": "8523104",
"listing_url": "https://www.bayut.com/property/details-8523104.html",
"locale": "en",
"title": "Luxury 2BR | Burj Khalifa View",
"purpose": "for-sale",
"property_type": "apartments",
"price_amount": 2450000,
"price_currency": "AED",
"price_frequency": null,
"bedrooms": 2,
"bathrooms": 3,
"area_value": 1450.0,
"area_unit": "sqft",
"location_hierarchy": [
"Dubai",
"Downtown Dubai",
"Burj Khalifa"
],
"latitude": 25.1972,
"longitude": 55.2744,
"agency_name": "Example Real Estate Brokers",
"agent_name": "Jane Doe",
"agent_phone": "+971501234567",
"permit_number": "12345678",
"verified": true,
"amenities": [
"Balcony",
"Shared Pool",
"Covered Parking"
],
"photos_count": 18,
"listed_date": "2026-07-15",
"scraped_at": "2026-07-20T14:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.01One-off warm-up charge per run
result-row$0.002Charged for each listing row written to the dataset

Example: 1 000 results at the rates above ≈ $2.01. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

v1 covers UAE listings only — Saudi Arabia is a separate Bayut property and out of scope. Off-plan project microsites, the mortgage calculator, and area-guide content are not scraped. permit_number ships verbatim from the listing; it is not independently verified against DLD/RERA registries. verified reflects Bayut's own TruCheck badge flag, not OCR of the badge graphic.

❓ FAQ

Do I need a Bayut account or API key?

No. This Actor scrapes Bayut's own publicly listed property data — no login, no API key.

Why does this default to a residential proxy?

Bayut blocks direct/datacenter-IP requests before they reach listing data. We default proxyConfiguration to Apify's RESIDENTIAL group so runs clear that check without you tuning anything.

Can I search a custom area instead of a fixed emirate/area?

Yes — supply polygon as a list of at least 3 [lat, lng] pairs instead of purpose + location.

Does agent_phone always populate?

Only when includeAgentPhone is true and the agent's number is publicly exposed on the listing; otherwise it's null.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.