Property Finder MENA Listings & Agent Contact Extractor
Reads Property Finder listings across the UAE, Saudi Arabia, Qatar, Bahrain, and Egypt, returning price, size, location hierarchy, amenities, and agent or brokerage contact details.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to scrape. Search listings by filters, scrape specific listing URLs, or collect agent/broker profiles. |
country | string | optional | Market to search or the country used for bare agent/broker ids. |
city | string | optional | City, province or governorate to search. Choose All cities for a country-wide search. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to scrape. Search listings by filters, scrape specific listing URLs, or collect agent/broker profiles. |
country | string | optional | Market to search or the country used for bare agent/broker ids. |
city | string | optional | City, province or governorate to search. Choose All cities for a country-wide search. |
purpose | string | optional | Buy, rent, or the commercial equivalents. |
propertyType | string | optional | Residential types: apartment, villa, townhouse, penthouse, duplex, compound, land, whole building, half floor. Commercial types: office, shop, warehouse, factory, showroom. |
bedrooms | string | optional | Bedroom filter for residential searches. Studio is supported for apartments and mixed-type searches. |
priceMin | integer | optional | Minimum asking price in the market's local currency (AED, SAR, QAR, BHD or EGP). |
priceMax | integer | optional | Maximum asking price in the market's local currency. |
furnishing | string | optional | Furnished or unfurnished. Leave on Any furnishing to include both. |
completionStatus | string | optional | Ready or off-plan. Applies to residential for-sale searches; ignored for rentals and commercial searches. |
maxItems | integer | optional | Maximum number of listings or profiles to return. |
includeDetails | boolean | optional | Open each listing page to add the full photo gallery, permit validation link, licences, floor plans and agent ratings. Turn off for a faster, lighter dataset. |
startUrls | array | optional | Property Finder landing, search, listing or short URLs. Used with mode=listings. Sitemap and sitemap-index URLs are also accepted. |
agentUrls | array | optional | Property Finder agent profile URLs, or bare numeric agent IDs. Used with mode=agents. |
brokerUrls | array | optional | Property Finder broker/agency profile URLs, or bare numeric broker IDs. Used with mode=brokers. |
Download the published input schema
View complete JSON
{
"description": "Search Property Finder listings across the UAE, Saudi Arabia, Qatar, Bahrain and Egypt, or scrape listing, agent and broker URLs. Returns property details and public brokerage contact data.",
"properties": {
"agentUrls": {
"description": "Property Finder agent profile URLs, or bare numeric agent IDs. Used with mode=agents.",
"editor": "stringList",
"items": {
"type": "string"
},
"sectionCaption": "Profiles",
"sectionDescription": "Agent and broker profiles return public profile data and the brokerage's published contact details.",
"title": "Agent profile URLs or IDs",
"type": "array"
},
"bedrooms": {
"default": "any",
"description": "Bedroom filter for residential searches. Studio is supported for apartments and mixed-type searches.",
"editor": "select",
"enum": [
"any",
"studio",
"1",
"2",
"3",
"4",
"5",
"6",
"7+"
],
"enumTitles": [
"Any bedrooms",
"Studio",
"1 bedroom",
"2 bedrooms",
"3 bedrooms",
"4 bedrooms",
"5 bedrooms",
"6 bedrooms",
"7+ bedrooms"
],
"prefill": "any",
"title": "Bedrooms",
"type": "string"
},
"brokerUrls": {
"description": "Property Finder broker/agency profile URLs, or bare numeric broker IDs. Used with mode=brokers.",
"editor": "stringList",
"items": {
"type": "string"
},
"title": "Broker profile URLs or IDs",
"type": "array"
},
"city": {
"default": "dubai",
"description": "City, province or governorate to search. Choose All cities for a country-wide search.",
"editor": "select",
"enum": [
"all",
"dubai",
"abu-dhabi",
"sharjah",
"ajman",
"ras-al-khaimah",
"fujairah",
"umm-al-quwain",
"al-ain",
"ar-riyadh",
"makkah-al-mukarramah",
"eastern",
"al-madinah-al-munawwarah",
"al-qassim",
"asir",
"tabuk",
"hail",
"najran",
"jazan",
"doha",
"lusail",
"al-wakra",
"al-khor",
"al-daayen",
"al-shamal",
"umm-salal-mohammed",
"dukhan-highway",
"capital-governorate",
"northern-governorate",
"southern-governorate",
"muharraq-governorate",
"central-governorate",
"cairo",
"giza",
"alexandria",
"north-coast",
"new-capital",
"asyut",
"demyat",
"qalyubia",
"al-fayum",
"red-sea",
"south-sainai",
"matrouh",
"port-saeed",
"suez",
"sharqia",
"el-esmailia",
"al-behera",
"al-daqahlya",
"al-gharbeya",
"al-menofeya"
],
"enumTitles": [
"All cities (country-wide)",
"Dubai (AE)",
"Abu Dhabi (AE)",
"Sharjah (AE)",
"Ajman (AE)",
"Ras Al Khaimah (AE)",
"Fujairah (AE)",
"Umm Al Quwain (AE)",
"Al Ain (AE)",
"Riyadh (SA)",
"Makkah (SA)",
"Eastern Province (SA)",
"Madinah (SA)",
"Al Qassim (SA)",
"Asir (SA)",
"Tabuk (SA)",
"Hail (SA)",
"Najran (SA)",
"Jazan (SA)",
"Doha (QA)",
"Lusail (QA)",
"Al Wakrah (QA)",
"Al Khor (QA)",
"Al Daayen (QA)",
"Al Shamal (QA)",
"Umm Salal Mohammed (QA)",
"Dukhan Highway (QA)",
"Capital Governorate (BH)",
"Northern Governorate (BH)",
"Southern Governorate (BH)",
"Muharraq Governorate (BH)",
"Central Governorate (BH)",
"Cairo (EG)",
"Giza (EG)",
"Alexandria (EG)",
"North Coast (EG)",
"New Capital (EG)",
"Asyut (EG)",
"Damietta (EG)",
"Qalyubia (EG)",
"Fayoum (EG)",
"Red Sea (EG)",
"South Sinai (EG)",
"Matrouh (EG)",
"Port Said (EG)",
"Suez (EG)",
"Sharqia (EG)",
"Ismailia (EG)",
"Beheira (EG)",
"Dakahlia (EG)",
"Gharbia (EG)",
"Menofia (EG)"
],
"prefill": "dubai",
"title": "City / province",
"type": "string"
},
"completionStatus": {
"default": "any",
"description": "Ready or off-plan. Applies to residential for-sale searches; ignored for rentals and commercial searches.",
"editor": "select",
"enum": [
"any",
"completed",
"off_plan"
],
"enumTitles": [
"Any completion status",
"Ready",
"Off-plan"
],
"prefill": "any",
"title": "Completion status",
"type": "string"
},
"country": {
"default": "ae",
"description": "Market to search or the country used for bare agent/broker ids.",
"editor": "select",
"enum": [
"ae",
"sa",
"qa",
"bh",
"eg"
],
"enumTitles": [
"United Arab Emirates",
"Saudi Arabia",
"Qatar",
"Bahrain",
"Egypt"
],
"prefill": "ae",
"sectionCaption": "Search filters",
"sectionDescription": "Used with mode=search. Pick a city that belongs to this country, or choose All cities.",
"title": "Country",
"type": "string"
},
"furnishing": {
"default": "any",
"description": "Furnished or unfurnished. Leave on Any furnishing to include both.",
"editor": "select",
"enum": [
"any",
"furnished",
"unfurnished"
],
"enumTitles": [
"Any furnishing",
"Furnished",
"Unfurnished"
],
"prefill": "any",
"title": "Furnishing",
"type": "string"
},
"includeDetails": {
"default": true,
"description": "Open each listing page to add the full photo gallery, permit validation link, licences, floor plans and agent ratings. Turn off for a faster, lighter dataset.",
"prefill": true,
"title": "Include full listing details",
"type": "boolean"
},
"maxItems": {
"default": 100,
"description": "Maximum number of listings or profiles to return.",
"maximum": 100000,
"minimum": 1,
"prefill": 2,
"sectionCaption": "Output",
"sectionDescription": "The run stops at this many records or when the source runs out.",
"title": "Max records",
"type": "integer"
},
"mode": {
"default": "search",
"description": "What to scrape. Search listings by filters, scrape specific listing URLs, or collect agent/broker profiles.",
"editor": "select",
"enum": [
"search",
"listings",
"agents",
"brokers"
],
"enumTitles": [
"Search listings by filters",
"Scrape listing or search URLs",
"Scrape agent profiles",
"Scrape broker profiles"
],
"prefill": "search",
"title": "Mode",
"type": "string"
},
"priceMax": {
"description": "Maximum asking price in the market's local currency.",
"maximum": 1000000000,
"minimum": 0,
"title": "Maximum price",
"type": "integer"
},
"priceMin": {
"description": "Minimum asking price in the market's local currency (AED, SAR, QAR, BHD or EGP).",
"maximum": 1000000000,
"minimum": 0,
"title": "Minimum price",
"type": "integer"
},
"propertyType": {
"default": "any",
"description": "Residential types: apartment, villa, townhouse, penthouse, duplex, compound, land, whole building, half floor. Commercial types: office, shop, warehouse, factory, showroom.",
"editor": "select",
"enum": [
"any",
"apartment",
"villa",
"townhouse",
"penthouse",
"duplex",
"compound",
"land",
"whole-building",
"half-floor",
"office",
"shop",
"warehouse",
"factory",
"showroom"
],
"enumTitles": [
"Any property type",
"Apartment",
"Villa",
"Townhouse",
"Penthouse",
"Duplex",
"Compound",
"Land",
"Whole building",
"Half floor",
"Office",
"Shop",
"Warehouse",
"Factory",
"Showroom"
],
"prefill": "apartment",
"title": "Property type",
"type": "string"
},
"purpose": {
"default": "buy",
"description": "Buy, rent, or the commercial equivalents.",
"editor": "select",
"enum": [
"buy",
"rent",
"commercial-buy",
"commercial-rent"
],
"enumTitles": [
"For sale",
"For rent",
"Commercial for sale",
"Commercial for rent"
],
"prefill": "buy",
"title": "Purpose",
"type": "string"
},
"startUrls": {
"description": "Property Finder landing, search, listing or short URLs. Used with mode=listings. Sitemap and sitemap-index URLs are also accepted.",
"editor": "requestListSources",
"sectionCaption": "URLs",
"sectionDescription": "Use these instead of the search filters when you already have Property Finder links.",
"title": "Listing or search URLs",
"type": "array"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "Property Finder MENA Listings & Brokerage Contacts Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
listings | string | optional | Listing, agent and broker records produced by this run. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Dataset of Property Finder listings, agent profiles and brokerages with prices, location, amenities, permit data, media and public broker/listing contact details.",
"properties": {
"listings": {
"description": "Listing, agent and broker records produced by this run.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Property Finder records",
"type": "string"
}
},
"title": "Property Finder MENA Listings & Brokerage Contacts Output",
"type": "object"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"contacts": {
"display": {
"component": "table"
},
"title": "Contacts",
"transformation": {
"fields": [
"recordType",
"title",
"agentName",
"agentProfileUrl",
"brokerName",
"brokerEmail",
"brokerPhone",
"brokerWhatsapp",
"contactPhone",
"contactWhatsapp",
"url"
]
}
},
"detailed": {
"display": {
"component": "table"
},
"title": "Detailed",
"transformation": {
"fields": [
"title",
"purpose",
"price",
"priceCurrency",
"priceDuration",
"pricePerArea",
"pricePerAreaUnit",
"propertyType",
"offeringType",
"bedrooms",
"bathrooms",
"size",
"sizeUnit",
"furnished",
"completionStatus",
"city",
"community",
"subCommunity",
"tower",
"agentName",
"agentRating",
"brokerName",
"brokerEmail",
"brokerPhone",
"brokerWhatsapp",
"permitNumber",
"permitValidationUrl",
"isVerified",
"floorPlanCount",
"imagesCount",
"listedDate",
"url"
]
}
},
"overview": {
"display": {
"component": "table",
"properties": {
"bathrooms": {
"format": "number",
"label": "Baths"
},
"bedrooms": {
"format": "number",
"label": "Beds"
},
"brokerName": {
"format": "text",
"label": "Brokerage"
},
"brokerPhone": {
"format": "text",
"label": "Broker phone"
},
"city": {
"format": "text",
"label": "City"
},
"community": {
"format": "text",
"label": "Community"
},
"isVerified": {
"format": "boolean",
"label": "Verified"
},
"price": {
"format": "number",
"label": "Price"
},
"priceCurrency": {
"format": "text",
"label": "Currency"
},
"propertyType": {
"format": "text",
"label": "Type"
},
"purpose": {
"format": "text",
"label": "Purpose"
},
"title": {
"format": "text",
"label": "Title"
},
"url": {
"format": "link",
"label": "URL"
}
}
},
"title": "Overview",
"transformation": {
"fields": [
"title",
"purpose",
"price",
"priceCurrency",
"propertyType",
"bedrooms",
"bathrooms",
"city",
"community",
"brokerName",
"brokerPhone",
"isVerified",
"url"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Property Finder MENA Listings & Brokerage Contacts
Property Finder is the leading real-estate portal across the UAE, Saudi Arabia, Qatar, Bahrain and Egypt. This actor turns its public listing pages into structured property records — prices, rooms, size, location, amenities, permits, photos, floor plans and agent profile details — together with the public contact information that the listing publishes: usually the brokerage's switchboard and email, and at smaller agencies an individual broker's line.
It works with a city-and-purpose search, with canonical listing URLs you already have, or with agent and broker profile URLs. No login, cookie, API key or proxy setup is required.
What this actor does
- Search five markets — the UAE, Saudi Arabia, Qatar, Bahrain and Egypt, each with local currency and city/province slugs.
- Filter by intent — buy, rent, commercial buy, commercial rent; property type; bedrooms; price range; furnishing; and ready/off-plan for residential sales.
- Scrape listing or search URLs — landing pages, individual listing pages, sitemaps, and search URLs you supply. Canonical detail URLs are robots-allowed; Property Finder's robots.txt disallows
/en/search?*and/to/*short links, so prefer canonical detail URLs. - Collect agent and broker profiles — agent profiles work in the UAE, Qatar and Bahrain; broker/agency profiles work in all five markets. Saudi and Egyptian agent-profile URLs currently return 404 at the source.
- Enrich every listing — the full photo gallery, community and tower images, permit validation link, licences, floor plans, building facts and agent ratings.
- Honest contact data — Property Finder leaves
agent.emailandagent.phoneempty (0/217 listings and 0/40 details measured). The actor returns the contact published with the listing: broker email/phone plus the listing's WhatsApp relay number (usually Property Finder's market number, not the agent's personal number). At small agencies the broker line or email can be the agent's own (for example a Gmail address matching the agent's name). - Empty fields are omitted — a missing value is never replaced with
nullor an empty string. Placeholder numbers published by the source are returned as-is.
Output per record
Each record has recordType: listing, agent or broker.
Listing
id,listingId,reference,rera/permitNumber,url,title,descriptionpurpose(sale/rent),country,sourceDomainpropertyType,propertyTypeId,offeringType,categoryIdprice,priceCurrency,priceDuration,priceHidden,pricePerArea,pricePerAreaUnitbedrooms,bedroomsLabel,isStudio,bathrooms,size,sizeUnit,sizeSqmfurnished,completionStatus,completionStatusRawcity,community,subCommunity,tower,locationFullName,locationId,locationPath,locationTreelatitude,longitudecoverImage,images,imagesCount,communityImages,towerImagesamenities,amenityNames,floorPlans,floorPlanCountagentId,agentName,agentProfileUrl,agentImage,agentSlug,agentIsSuperAgent,agentLanguages,agentPosition,agentRating,agentReviewCount,agentYearsOfExperience,agentTotalProperties,agentTransactionsCount,agentLicenseNumberbrokerId,brokerName,brokerProfileUrl,brokerLogo,brokerEmail,brokerPhone,brokerWhatsapp,brokerAddress,brokerLicenseNumber,brokerSlug,clientIdcontactPhone,contactEmail,contactWhatsapp,contactOptionspermitValidationUrl,permitAuthority,permitIssuedLicenseNumber,zoneName,licensesisVerified,isDirectFromDeveloper,isNewConstruction,isFeatured,isPremium,isExclusive,isPfExclusive,isAvailable,isNewInsert,isPriceDrop,isGreatValue,isHighDemand,isLuxe,isSpotlight,isUnderOfferleadValue,listingLevel,videoUrl,view360Url,has360ViewserviceChargePerSqft,buildingDetailslistedDate,lastRefreshedAt,scrapedAt
agentEmail, agentPhone and agentWhatsapp are retained for compatibility but are only present when the source itself publishes them; in practice those fields are almost always absent.
Agent
agentId,agentName,agentProfileUrl,agentImage,agentSlugagentIsSuperAgent,agentVerified,agentLanguagesagentExperienceSince,agentTotalProperties,agentRentCount,agentSaleCount,agentCommercialRentCount,agentCommercialSaleCountagentAvgWhatsappResponseTime,agentRating,agentReviewCountbrokerName,brokerEmail,brokerPhone,brokerWhatsapp,brokerProfileUrlcontactPhone,contactWhatsapp,contactOptions,country,sourceDomain,scrapedAt
Broker
brokerId,brokerName,brokerProfileUrl,brokerLogo,brokerSlugbrokerEmail,brokerPhone,brokerAddressbrokerLicenseNumber,brokerLicenseLabel,brokerLocation,brokerDescription,brokerVerifiedbrokerTotalProperties,brokerTotalAgents,brokerTotalSuperAgents,brokerRentCount,brokerSaleCountcontactEmail,contactPhone,contactOptions,country,sourceDomain,scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | search |
search, listings, agents or brokers |
country |
string | ae |
ae, sa, qa, bh or eg |
city |
string | dubai |
City, province or governorate; all for a country-wide search |
purpose |
string | buy |
buy, rent, commercial-buy or commercial-rent |
propertyType |
string | any |
Apartment, villa, townhouse, penthouse, duplex, compound, land, whole building, half floor, office, shop, warehouse, factory or showroom |
bedrooms |
string | any |
studio, 1–6, or 7+; residential searches only |
priceMin / priceMax |
integer | – | Asking price in the market's local currency |
furnishing |
string | any |
furnished or unfurnished |
completionStatus |
string | any |
completed or off_plan; residential sale searches |
maxItems |
integer | 100 |
Maximum records (1–100,000) |
includeDetails |
boolean | true |
Add the full gallery, permit link, licences, floor plans and agent statistics |
startUrls |
array | – | [{"url": ...}] objects for listing, search, short or sitemap URLs in mode: listings |
agentUrls |
array | – | Agent profile URLs or numeric IDs for mode: agents |
brokerUrls |
array | – | Broker profile URLs or numeric IDs for mode: brokers |
Profile records: full profile URLs use their own market; country is only needed for bare numeric IDs. City is ignored in agent/broker modes.
Older inputs: max_items and fetch_full_details are no longer schema fields but are still honoured, and they take precedence over platform-injected maxItems/includeDetails defaults. A saved input with startUrls plus a legacy key automatically uses mode: listings, so old sitemap prefills keep working with their original limit. max_retries and ignore_url_failures are accepted but ignored.
Example: Dubai apartments for sale
{
"mode": "search",
"country": "ae",
"city": "dubai",
"purpose": "buy",
"propertyType": "apartment",
"bedrooms": "2",
"priceMin": 1000000,
"priceMax": 2500000,
"maxItems": 100
}
Example: furnished Riyadh rentals
{
"mode": "search",
"country": "sa",
"city": "ar-riyadh",
"purpose": "rent",
"propertyType": "apartment",
"furnishing": "furnished",
"maxItems": 50
}
Example: scrape specific listing URLs
{
"mode": "listings",
"startUrls": [
{"url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-downtown-dubai-bellevue-towers-bellevue-tower-2-158222918.html"},
{"url": "https://www.propertyfinder.qa/en/rent/doha/apartments-for-rent.html"}
],
"maxItems": 20
}
Example: collect broker contacts
{
"mode": "brokers",
"brokerUrls": ["https://www.propertyfinder.ae/en/broker/betterhomes-business-bay-2593"],
"maxItems": 5
}
Use cases
- Property investors — compare asking prices, size and price per square foot across Dubai, Riyadh, Doha, Manama and Cairo.
- Lead-generation teams — collect the public broker/listing contact published on each listing, alongside the listing agent's name and profile.
- PropTech and valuation teams — build a fresh inventory snapshot with coordinates, amenities, completion status and permit links.
- Market researchers — track new listings, price bands, furnishing and ready/off-plan supply in a specific community.
- Agency analysts — monitor an agency's active inventory and profile statistics.
FAQ
Which countries are supported?
The UAE (propertyfinder.ae), Saudi Arabia (.sa), Qatar (.qa), Bahrain (.bh) and Egypt (.eg). Prices are returned in AED, SAR, QAR, BHD or EGP respectively.
Does it return agent email addresses and mobile numbers?
Not as agentEmail/agentPhone. Property Finder leaves those source fields empty on listings and public profiles (0/217 listings, 0/40 details and 0/37 agent profiles measured). The actor returns the agent's name, profile and statistics, plus the contact published on the listing: broker email/phone and the listing WhatsApp relay number, which is usually Property Finder's market number rather than the agent's personal number. At small agencies the broker line or email can be the agent's own (for example a Gmail address matching the agent's name). The legacy agentEmail/agentPhone/agentWhatsapp fields are kept for compatibility and omitted when empty.
Why are some listings missing bedrooms or completion status?
Commercial offices, warehouses and land often have no bedroom count, and completion status is primarily relevant to for-sale listings. Empty values are omitted rather than filled with zero or a placeholder; all-zero placeholder phone numbers such as +0000000000 are also dropped.
What permit data is available?
Saudi listings publish an Elan/REGA permit number and validation link. UAE listings usually publish a Trakheesi validation link and the brokerage licence number, while the permit number itself is less often present. Qatar, Bahrain and Egypt do not publish permit links in the listing payload.
Can I collect every listing for a city?
Property Finder allows up to 4,000 pages per search, but the last page varies by query: a broad UAE search returned listings on page 4,000, while Dubai apartments for sale ended at page 3,398 on 2026-10-21. Pages carry 25–35 listings. The actor stops at the first 404 or empty page, and an early source cap is not always flagged in the status message, so watch the emitted count. Split by city, property type or bedrooms to cover more; query-string price/furnishing/completion filters are allowed on page 1 only, because adding page to those queries is restricted by robots.txt.
What does includeDetails add?
It opens each listing's detail page to add the full photo gallery, community and tower images, the permit validation link, licences, floor plans, building details and agent ratings. Turn it off for a lighter dataset with the core search-page fields.
Are duplicates removed?
Yes. Listings are deduplicated by Property Finder's numeric listing ID across pages, URLs and sitemaps.
Do I need a proxy or a Property Finder account?
No. The actor reads public pages with no login, cookie or API key. It chooses a working connection automatically.
Is this affiliated with Property Finder?
No. This is an independent third-party actor. Property Finder's terms prohibit automated scraping and restrict reuse of the content, and its privacy policy applies to contact data. You are responsible for having a lawful basis and for how you use contact details.
How fresh is the data?
Each run reads live pages. Schedule the actor daily or weekly to track new listings, price changes and delistings.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build xMhCXrO7B9kNH6URi. Documentation is regenerated from the default published build; private drafts are not included.