Dubai Real Estate Location Scraper avatar

Dubai Real Estate Location Scraper

Pricing

from $3.00 / 1,000 property scrapeds

Go to Apify Store
Dubai Real Estate Location Scraper

Dubai Real Estate Location Scraper

γ€Œ π™Šπ™‰π™‡π™” $𝟬.𝟬𝟬𝟯/π—½π—Ώπ—Όπ—½π—²π—Ώπ˜π˜† γ€πŸ  Market's best price! Extract 1000+ Bayut listings in minutes instead of hours. Stop copying Dubai & UAE properties manually! Advanced filters (price, rooms, area, agency), clean JSON/CSV. Zero technical skills needed. Real estate pros choose us! 🎯

Pricing

from $3.00 / 1,000 property scrapeds

Rating

5.0

(3)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

4

Bookmarked

24

Total users

17

Monthly active users

20 hours ago

Last modified

Share

Dubai Real Estate Location Scraper - Extract UAE Property Areas, Coordinates & Listing Counts πŸš€

SIÁN Agency StoreSmart Idealista ScraperInstagram AI Transcript ExtractorBest TikTok AI Transcript Extractor

πŸŽ‰ Get Every Bayut Location β€” Plus Full Property Listings With Prices, Photos, Agents & Amenities

One actor, two modes: build a complete UAE/KSA/Egypt property location database AND extract live listings with 50+ data points each


πŸ“‹ Overview

The Bayut Property Scraper gives you the complete intelligence behind Bayut's property portal. Run it in two modes:

  1. Location mode β€” every city, neighbourhood, and sub-area with GPS coordinates and live listing counts
  2. Property mode β€” full property listings inside any location: prices, photos, agent contact details, amenities, permit numbers, floor plans, and 50+ data points per record

Coverage spans the full Bayut footprint: United Arab Emirates (Dubai, Abu Dhabi, Sharjah), Saudi Arabia, and Egypt β€” anywhere realtyAPI's Bayut endpoint reaches.

Perfect for proptech developers, real estate agents, market analysts, and lead-generation teams who need structured property intelligence.

Why real estate professionals choose us:

  • βœ… Two modes in one actor: location autocomplete + full property search, no extra setup
  • πŸ“ GPS Coordinates Included: Latitude & longitude on every record β€” map-ready instantly
  • πŸ“Š Live Listing Counts: See exactly how many active properties exist in each area
  • 🏠 50+ Property Fields: Price, beds, baths, area, photos, amenities, agent contact, permit number
  • 🎯 25+ Search Filters: Price range, area, bedrooms, furnishing, completion status, agency, media filters, and more
  • πŸ“ž Direct Agent Contact: Listing agent name + mobile/office/WhatsApp numbers
  • πŸ“„ Bulk Mode (PAID): Process multiple locations or location IDs in a single run
  • πŸ’° Risk-Free Trial: Test with FREE tier, no credit card required

✨ Features

Location mode:

  • πŸ—ΊοΈ Full hierarchy: Level 1 (city), Level 2 (neighbourhood), Level 3 (sub-area) with parent tracking
  • πŸ“ GPS coordinates (lat + lng) for every location
  • πŸ“Š adCount shows real-time listing supply per area
  • πŸ”’ Internal + external Bayut IDs for API integration

Property mode:

  • 🏷️ Listing essentials: price, rentFrequency, purpose, propertyTitle, slug
  • πŸ“ Specs: rooms, baths, area, plotArea, pricePerSqft, categoryName (apartment, villa, townhouse, …)
  • ✨ Features: furnishingStatus, completionStatus, amenities array, permitNumber, floorPlanID
  • πŸ“Έ Media: coverPhotoUrl, photoUrls array, photoCount, videoCount, panoramaCount
  • πŸ‘€ Agent: agentName, phoneMobile, phoneOffice, phoneWhatsapp, agentIsTruBroker, agentSlug
  • 🏒 Agency: agencyName, agencyId, agencyLogoUrl, agencySlug, agencyTier
  • πŸ“ Geography: city, neighbourhood, lat, lng
  • πŸ•’ Timestamps: createdAt, updatedAt, reactivatedAt, scrapedAt

🎬 Quick Start

Get listings in Dubai Marina, for sale:

curl -X POST 'https://api.apify.com/v2/acts/sian.agency/bayut-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"location_external_id": "5002", "purpose": "for-sale"}'

Find the location ID for "Marina" first:

curl -X POST 'https://api.apify.com/v2/acts/sian.agency/bayut-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"locationName": "Marina", "pageNumber": 0}'

πŸš€ Getting Started

This actor runs in two modes. Pick whichever fits the job β€” or chain them.

Mode 1: Location Autocomplete (Step 1)

Start here when you don't know the location_external_id yet, or when you need a clean location database for an autocomplete UI / map.

  1. Type a city or area name in locationName (e.g. Dubai, Marina, Abu Dhabi)
  2. Click Run
  3. Get a list of matching locations, each with its externalID, lat, lng, and adCount

Mode 2: Property Search (Step 2)

Use the externalID from Mode 1 as location_external_id, set purpose (for-rent or for-sale), and add any filters you want.

  1. Set location_external_id (e.g. 5002 for Dubai Marina)
  2. Set purpose to for-rent or for-sale (required)
  3. Optionally apply filters (price range, beds, baths, furnishing, agency, etc.)
  4. Click Run
  5. Get full property listings with prices, photos, agents, and amenities

Mode detection: if you supply location_external_id (or bulkLocationExternalIds), the actor runs Property Search. Otherwise it runs Location Autocomplete.


πŸ“₯ Input Configuration

Step 1 β€” Location Autocomplete

FieldTypeRequiredDescription
locationNamestringYes (single mode)Location name to look up (e.g. Dubai, Marina)
bulkLocationNamesarrayNoMultiple location names per run (PAID tier)
pageNumberintegerNoAutocomplete page (0-indexed). Default 0.
FieldTypeRequiredDescription
location_external_idstringYes (single mode)The externalID from Step 1 (e.g. 5002)
bulkLocationExternalIdsarrayNoMultiple location IDs per run (PAID tier)
purposestringYesfor-rent or for-sale
hitsPerPageintegerNoListings per page (1–100, default 25)
pageintegerNoProperty results page (0-indexed)

Step 2 β€” Optional Property Filters

FieldTypeDescription
categorystringresidential or commercial
category_external_idstringSpecific property type: apartment, villa, townhouse, penthouse, hotel apartment, villa compound, residential plot/floor/building, office, shop, warehouse, labour camp, commercial villa/plot/floor/building, factory, industrial land, mixed-use land, showroom, other commercial
min_price / max_pricestringPrice range in local currency (AED/SAR/EGP)
min_area / max_areastringArea range in square feet
roomsstringBedrooms β€” studio, 1–7
bathsstringBathrooms β€” 1–7
furnishingStatusstringfurnished / unfurnished
rent_frequencystringdaily / weekly / monthly / yearly (rent only)
completionStatusstringunder-construction / completed (sale only)
productstringhot (featured) / superhot (premium) listings only
hasFloorplanbooleanOnly listings with a floor plan
hasPanoramabooleanOnly listings with a 360Β° panorama
hasVideobooleanOnly listings with a video
agency_external_idsstringComma-separated agency IDs to filter by

Single-location property search:

{
"location_external_id": "5002",
"purpose": "for-sale",
"min_price": "500000",
"max_price": "2000000",
"rooms": "2",
"hitsPerPage": 25
}

Location autocomplete:

{
"locationName": "Dubai Marina",
"pageNumber": 0
}

Bulk property search (PAID):

{
"bulkLocationExternalIds": ["5002", "5003", "5004"],
"purpose": "for-rent",
"hasVideo": true
}

πŸ“€ Output

Location records (Mode 1)

FieldTypeDescription
locationIdintegerBayut's internal location ID
externalIDstringExternal reference ID (use this in Mode 2)
namestringLocation name
slugstringURL slug used in Bayut links
locationTypestringcity, neighbourhood, or unknown
levelinteger1 = city, 2 = neighbourhood, 3 = sub-area
parentstringParent location name
lat / lngnumberGPS coordinates
adCountintegerActive listings count
originalLocationNamestringThe search input that returned this match
page / scrapedAtint / stringPagination + ISO timestamp

Property records (Mode 2)

Listing essentials, specs, features, media, agent + agency contact, geography, and timestamps. Full field list:

GroupFields
IDspropertyId, externalID, referenceNumber, permitNumber, searchLocationExternalId
ListingpropertyTitle, slug, purpose, product, isVerified, score
Pricingprice, pricePerSqft, rentFrequency, hidePrice
Specsrooms, baths, area, plotArea, categoryName, categoryExternalID
FeaturesfurnishingStatus, completionStatus, amenities, keywords, floorPlanID
MediacoverPhotoUrl, photoUrls (array), photoCount, videoCount, panoramaCount
AgentagentName, agentSlug, agentExternalID, agentPhotoUrl, agentIsTruBroker, contactName, phoneMobile, phoneOffice, phoneWhatsapp
AgencyagencyName, agencyId, agencyExternalID, agencySlug, agencyLogoUrl, agencyTier
Geographycity, neighbourhood, lat, lng, locationPurposeTier
TimestampscreatedAt, updatedAt, reactivatedAt, scrapedAt

Some fields are returned as null when the upstream listing doesn't have them populated (e.g. rentFrequency is null on for-sale listings, permitNumber is null for unverified or off-plan listings).

Example property record:

{
"propertyId": 12345678,
"externalID": "12345678",
"propertyTitle": "Stunning 2BR Apartment with Marina View",
"purpose": "for-sale",
"price": 1850000,
"pricePerSqft": 1542.5,
"rooms": 2,
"baths": 3,
"area": 1200,
"categoryName": "Apartment",
"furnishingStatus": "furnished",
"completionStatus": "completed",
"isVerified": true,
"permitNumber": "12345-67",
"photoCount": 24,
"coverPhotoUrl": "https://images.bayut.com/...",
"photoUrls": ["https://images.bayut.com/...", "..."],
"agentName": "Jane Doe",
"phoneMobile": "+9715XXXXXXXX",
"phoneWhatsapp": "+9715XXXXXXXX",
"agencyName": "Marina Real Estate",
"city": "Dubai",
"neighbourhood": "Dubai Marina",
"lat": 25.0819,
"lng": 55.1367,
"amenities": ["Central A/C", "Balcony", "Maids Room", "Shared Pool"],
"scrapedAt": "2026-05-07T10:30:00.000Z"
}

πŸ’Ό Use Cases & Examples

1. Build a UAE Property Search Tool

Input: Mode 1 β€” locationName: "", paginate Output: Full location ID + name + slug database Use: Populate location dropdowns, validate user input, build the autocomplete layer

2. Live Property Feed for a Marketplace

Input: Mode 2 β€” location_external_id: "5002", purpose: "for-sale" Output: Every active for-sale listing in Dubai Marina with photos, prices, agents Use: Power your own property aggregator or comparison site

3. Real-Estate Agent Lead Generation

Input: Mode 2 β€” filter by agency_external_ids to track competitor listings, or scrape an entire neighbourhood Output: agentName + phoneMobile + phoneWhatsapp + listing count per agent Use: Identify top-performing agents, build a contact list (respect local rules β€” see legal note)

4. Market Heat Map

Input: Mode 1 β€” locationName: "Dubai" Output: All Dubai neighbourhoods with lat, lng, adCount Use: Plot bubbles on Google Maps / Mapbox sized by listing volume β€” instant supply-side heat map

5. Investment Analysis (Yield Estimation)

Input: Mode 2 β€” same location twice: once purpose: "for-sale", once purpose: "for-rent" Output: pricePerSqft for sale + monthly rents for the same area Use: Compute gross rental yield per neighbourhood, spot under-priced vs over-priced areas

6. Permit Compliance Monitoring

Input: Mode 2 β€” scrape any city, filter by isVerified: false (via post-process) Output: Listings with missing or invalid permitNumber Use: Flag potentially non-compliant listings for regulators or aggregators


πŸ”— Integration Examples

JavaScript/Node.js

const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
// Step 1: location lookup
const locRun = await client.actor('sian.agency/bayut-property-scraper').call({
locationName: 'Dubai Marina',
});
const { items: locations } = await client.dataset(locRun.defaultDatasetId).listItems();
const dubaiMarinaId = locations[0].externalID;
// Step 2: property search
const propRun = await client.actor('sian.agency/bayut-property-scraper').call({
location_external_id: dubaiMarinaId,
purpose: 'for-sale',
min_price: '500000',
max_price: '2000000',
hitsPerPage: 25,
});
const { items: properties } = await client.dataset(propRun.defaultDatasetId).listItems();
console.log(`Found ${properties.length} listings β€” first: ${properties[0].propertyTitle} @ AED ${properties[0].price}`);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
# Step 1
loc_run = client.actor('sian.agency/bayut-property-scraper').call(
run_input={'locationName': 'Dubai Marina'}
)
locations = list(client.dataset(loc_run['defaultDatasetId']).iterate_items())
dubai_marina_id = locations[0]['externalID']
# Step 2
prop_run = client.actor('sian.agency/bayut-property-scraper').call(
run_input={
'location_external_id': dubai_marina_id,
'purpose': 'for-rent',
'rent_frequency': 'yearly',
}
)
for p in client.dataset(prop_run['defaultDatasetId']).iterate_items():
print(f"{p['propertyTitle']}: AED {p['price']}/yr β€” {p['rooms']}BR")

cURL

# Property search β€” Dubai Marina, for sale, 2BR, with video
curl -X POST 'https://api.apify.com/v2/acts/sian.agency/bayut-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"location_external_id": "5002",
"purpose": "for-sale",
"rooms": "2",
"hasVideo": true,
"hitsPerPage": 25
}'

N8N Workflow

  1. Trigger: schedule daily / on-demand
  2. HTTP Request 1: call actor with locationName to resolve target areas
  3. Loop: for each location, HTTP Request 2 with its externalID + purpose
  4. Action: write to Google Sheets, Airtable, Postgres, or hand off to a CRM

πŸ“Š Performance & Reliability

  • Output per page: up to 25 location records (Mode 1) or up to 100 property listings (Mode 2, controlled by hitsPerPage)
  • FREE tier: 5 records per run β€” enough to validate inputs and try the output shape
  • PAID tier: unlimited records + bulk mode (bulkLocationNames, bulkLocationExternalIds)
  • Coverage: any market reachable by realtyAPI's Bayut endpoint β€” UAE, Saudi Arabia, Egypt
  • Timeout: up to 7 days
  • Memory: 128 MB (lightweight, cost-efficient)

πŸ’° Pricing

View current pricing in Apify Console

FREE Tier (Testing & Validation)

  • 5 records per run (works in both modes)
  • Full feature access β€” same output quality as PAID
  • No credit card required
  • Unlimited records per run
  • Bulk mode: scrape multiple locations or location IDs in one run
  • Priority processing

🎯 Start with FREE β€” upgrade when you're ready to go full scale!


❓ Frequently Asked Questions

Q: Which countries are covered? A: Bayut covers the UAE (Dubai, Abu Dhabi, Sharjah), Saudi Arabia, and Egypt. Use Mode 1 to discover any location in those markets, then Mode 2 to extract its listings.

Q: Do I need to run Mode 1 before Mode 2? A: Only the first time. Once you have the location_external_id for the area you care about, save it β€” it doesn't change. After that, you can call Mode 2 directly.

Q: What's the difference between for-sale and for-rent? A: purpose switches the upstream search. For-sale records carry completionStatus; for-rent records carry rentFrequency. The other fields are identical.

Q: Are agent phone numbers always included? A: For most listings, yes β€” phoneMobile, phoneOffice, and phoneWhatsapp are populated when the agency provides them. Some listings (typically high-end or off-market) may hide contact info.

Q: What's permitNumber? A: In the UAE, every legitimate property listing must carry a regulator-issued permit number (DLD/RERA in Dubai, ADREC in Abu Dhabi). It's null on listings that don't have one β€” useful for compliance monitoring.

Q: How do I paginate through all results? A: For Mode 1, increment pageNumber until a page returns no results. For Mode 2, increment page (note: zero-indexed) β€” combine with hitsPerPage: 100 to minimise calls.

Q: Can I filter by amenities? A: Yes via the boolean filters (hasFloorplan, hasPanorama, hasVideo) and indirectly via category_external_id. The richer amenities array is returned per listing for post-filtering (Central A/C, Balcony, Pool, Gym, etc.).

Q: Is it legal to scrape Bayut data? A: This actor extracts publicly available data β€” the same data visible to any visitor on Bayut. No private user data is extracted. See the disclaimer below.


πŸ› Troubleshooting

No results returned (Mode 1)

  • Try a broader locationName (e.g. "Dubai" instead of "Dubai Marina Creek")
  • Increase pageNumber if you've already pulled the first page

No results returned (Mode 2)

  • Confirm purpose is set (for-rent or for-sale) β€” it's required
  • Confirm the location_external_id is valid β€” re-run Mode 1 to verify
  • Loosen filters: very tight price/area ranges or rare combinations of bedrooms + completionStatus may return zero matches

Run charges a record but the dataset looks empty

  • Most likely a timeout or upstream error β€” check the run log; the finally block still pushes a retry-helper record so you can resume

This actor extracts publicly available property data β€” the same listings, agent contact details, and prices any visitor can see on Bayut. It does not access private user accounts or content behind authentication.

However, listings include personal data (agent contacts) which is protected by GDPR and the UAE Data Protection Law, plus equivalent regulations in Saudi Arabia and Egypt. Use the data responsibly: legitimate B2B research, price benchmarking, internal CRM enrichment. Do not use it for unsolicited bulk marketing without consent. If in doubt, consult your legal team.

Read more: Apify's blog post on the legality of web scraping


🀝 Support

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools

⭐ Enjoying this actor? Leave a 5-star review β€” it helps other real estate professionals find it!


βš–οΈ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Bayut or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.