Bayut UAE Real Estate Scraper avatar

Bayut UAE Real Estate Scraper

Pricing

Pay per event

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 event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours 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, TruCheck verification status, and photo count straight from the search results — no extra page fetch, no extra cost. 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 price-per-sqft inputs 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 the number is publicly exposed on the listing; otherwise null by design.
verifiedbooleanBayut 'TruCheck' badge.
photos_countintegerGallery photo count.
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",
"verified": true,
"photos_count": 18,
"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.20One-off warm-up charge per run
result-row$0.008Charged for each listing row written to the dataset

Example: 1 000 results at the rates above ≈ $8.20. 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. Every field comes straight from the search-results page — this Actor does not fetch a per-listing detail page, so DLD permit number, amenity tag lists, and listed date are not part of the output (we would rather not sell a column at all than sell one that comes back empty). 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.

Does this Actor fetch permit_number, amenities, or listed_date?

No — we removed the detail-page fetch that used to gate those fields. It doubled our cost per row (roughly $62/1,000 rows against ~$8/1,000 of revenue) and two of the three fields it unlocked came back empty on real runs anyway. Rather than ship a slower, costlier Actor that still doesn't reliably deliver those fields, we cut them from the output — every field this Actor sells today comes straight from the search-results page, at the price above, every run.

💬 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.