PropertyFinder Scraper & New-Listing Monitor - Dubai & UAE
Pricing
from $0.73 / 1,000 property returneds
PropertyFinder Scraper & New-Listing Monitor - Dubai & UAE
Turn monitoring on and every later run returns only the listings it has not returned before, so you are never charged for the same property twice. Every PropertyFinder listing as clean JSON: price with its meaning, bedrooms, bathrooms, area, community, furnishing, coordinates. Unofficial.
Pricing
from $0.73 / 1,000 property returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
PropertyFinder Scraper - Real Estate Data for Dubai and the UAE
Pull property listings from PropertyFinder.ae — the UAE's largest property portal — as clean JSON: the price as a number with the period it belongs to, the size in sqft, bedrooms, bathrooms, furnishing, amenities, map coordinates, the brokerage and the date it was listed.
Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by Property Finder. All product names are trademarks of their respective owners.
No API key. Reads the same public pages a visitor sees.
Run it tomorrow and you only get what is new
Schedule this Actor with monitoringMode: true and each run returns only the listings it has not returned before. Not "here is everything again, please de-duplicate it yourself" — the Actor remembers what it already gave you, so a daily feed costs you the handful of new homes, not the whole board every morning. You are never charged for the same property twice.
Listings your filters removed are remembered too, so widening a filter later does not resurrect them as false "new" listings. Listings that did not fit under your limit are not remembered, so they are still waiting on the next run instead of being silently lost.
Why this one is different
The filters run here, because PropertyFinder's robots.txt says they must
robots.txt (read on 2026-09-04) disallows every filter parameter — ?price=, ?bedrooms=, ?furnished=, ?location=, ?category=, ?built_up_area= and more — and disallows a page number combined with anything else (*?*page=*&*, *&*page=*). It allows exactly one thing:
# Allow pagination when standaloneAllow: *?page=*
So this Actor requests only the plain SEO addresses and ?page=N on its own, and applies every filter to rows it has already fetched. Nothing extra is requested from PropertyFinder, nothing extra is charged, and if you paste a search URL with filter parameters in it, those parameters are stripped before the request is made.
A price is useless without its period — so both are always there
A sale price is a total. A rent on PropertyFinder is per year. Selling you a bare number would let a 90,000 rent sit in the same column as a 2,950,000 sale, so every row carries price, priceCurrency and pricePeriod (sell or yearly) together, plus pricePerArea when PropertyFinder computed one.
Nothing is guessed to fill a gap: a property whose price is withheld comes back with price: null and isPriceHidden: true — never a zero.
Broker and agent phone numbers and emails are removed, on purpose
PropertyFinder's own page data carries the brokerage's phone number on 104 of 111 properties measured, and 65 distinct email addresses across the same sample, with more written into the advert text.
This Actor does not output those fields at all, and it removes email addresses and UAE phone numbers from the description text as well. You get the brokerage name, the agent name and a link to the brokerage's page. Property data, not a contact list. If you need contact data, use a tool that says so.
One request, 20 to 28 complete properties
PropertyFinder ships the full property — description, price, size, bedrooms, amenities, coordinates, brokerage — inside the listing page itself. This Actor reads all of them from that single page and never opens individual property pages. 200 properties costs about 10 requests, not 210.
The page also carries new-project adverts in the same slots; those are not counted or charged as properties.
"studio" is a word, not a number — and it is kept as both
PropertyFinder writes bedrooms: "studio". That comes back as bedrooms: "studio" and bedroomsValue: 0, so you can read it and sort by it.
Values we cannot confirm are not invented
furnishing is passed through exactly as PropertyFinder publishes it — NO on 76, YES on 27 and PARTLY on 8 of the 111 properties measured, so roughly a quarter come furnished. completionStatus is published on sale listings only; on rentals it comes back null rather than an empty string pretending to be an answer. Currency and size unit are taken from the page rather than assumed, even though every property measured was AED and sqft.
An empty search is an answer, not a silent fallback
A city and property type PropertyFinder does not have returns one no-results row saying so, and it is not charged — it never quietly falls back to every property in the country. A page that could not be read at all is a different row (unreadable) carrying the HTTP status. And if your filters removed everything, that is a third kind of row (no-filter-match) which states how many properties were actually read — so "my filter was too tight" is never confused with "the portal is empty".
Input
Either paste a search URL, or build one from three fields.
| Field | Type | Default | Description |
|---|---|---|---|
searchUrl | string | — | e.g. https://www.propertyfinder.ae/en/buy/dubai/villas-for-sale.html. Query parameters are stripped |
offeringType | string | buy | buy, rent, commercial-buy, commercial-rent |
city | string | dubai | dubai, abu-dhabi, sharjah, ajman, ras-al-khaimah, fujairah, umm-al-quwain, al-ain. Empty = the whole UAE |
propertyType | string | apartments | properties (all), apartments, villas, townhouses, penthouses, offices, shops, warehouses… |
maxListings | integer | 20 | 1-1000. One property = one row = one charged event |
maxPages | integer | 0 | Hard cap on requests; 0 = decide from maxListings |
includeDescription | boolean | true | Full advert text, HTML stripped, contacts removed |
useProxy | boolean | false | Off by default — PropertyFinder answers Apify's network directly. Switches on by itself if blocked |
keywords | array | — | Keep only properties containing one of these words |
keywordMatch | string | any | any or all |
excludeKeywords | array | — | Drop properties containing one of these |
brokerNames | array | — | Keep only these brokerages (partial match) |
minPrice / maxPrice | integer | 0 | AED. A property with no published price is kept |
requirePrice | boolean | false | Drop properties whose price is withheld |
minBedrooms / maxBedrooms | integer | -1 | -1 = off. 0 keeps studios and up |
minBathrooms | integer | -1 | -1 = off |
minAreaSqft / maxAreaSqft | integer | 0 | 0 = off |
furnishing | string | any | YES, NO, PARTLY |
verifiedOnly | boolean | false | Only listings PropertyFinder has verified (105 of 111 measured) |
completionStatus | string | any | completed or off_plan. Sale listings only |
listedWithinDays | integer | 0 | 0 = no limit. An unreadable date is kept |
monitoringMode | boolean | false | Return only properties not returned on a previous run |
resetMonitoringState | boolean | false | One-shot: forget what was already returned |
{ "offeringType": "buy", "city": "dubai", "propertyType": "apartments", "maxListings": 100,"keywords": ["downtown", "marina"], "minPrice": 1000000, "maxPrice": 4000000,"minBedrooms": 2, "furnishing": "YES", "verifiedOnly": true }
Filters are applied before you are charged
A property that does not match is never delivered and never charged. Three of the filters refuse to guess: a property with no published price is kept by minPrice and maxPrice (an unknown price is not a low one), a property with an unreadable listing date is kept by listedWithinDays, and a property whose furnishing or completion status PropertyFinder did not publish is kept rather than dropped. Turn on requirePrice if you want the unknowns dropped.
Monitoring mode turns this into a daily feed
Schedule it and set monitoringMode: true: each run returns only the properties it has not returned before. The first run returns everything and remembers it. Properties that were read but removed by your filters are remembered too, so a later change of filters does not resurrect them as false "new" listings. Properties that were read but did not fit under maxListings are not remembered, so they are still waiting for you on the next run rather than being silently lost. You pay for new stock, not for the same page every morning.
Measured on 2026-09-04: 188,682 properties for sale across the UAE, 111,191 for sale and 122,336 for rent in Dubai alone.
Output
One row per property:
{"source": "propertyfinder.ae","status": "ok","listingId": "139221316","referenceNumber": "BH-S-230009-3","title": "Burj View | High Floor | Vacant","url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-downtown-dubai-boulevard-central-towers-boulevard-central-tower-1-139221316.html","offeringType": "Residential for Sale","propertyType": "Apartment","completionStatus": "completed","price": 2950000,"priceCurrency": "AED","pricePeriod": "sell","isPriceHidden": false,"pricePerArea": 2538,"pricePerAreaUnit": "sqft","bedrooms": "2","bedroomsValue": 2,"bathrooms": "2","bathroomsValue": 2,"sizeValue": 1162,"sizeUnit": "sqft","furnishing": "NO","locationName": "Boulevard Central Tower 1","locationFullName": "Boulevard Central Tower 1, Boulevard Central Towers, Downtown Dubai, Dubai","locationBreadcrumb": "Dubai, Downtown Dubai, Boulevard Central Towers","latitude": 25.191404342651367,"longitude": 55.273895263671875,"amenities": ["Balcony", "Built in Wardrobes", "Covered Parking", "Security"],"brokerName": "betterhomes - Business Bay","brokerUrl": "https://www.propertyfinder.ae/en/broker/betterhomes-business-bay-2593","agentName": "Mamoun Hemora","agentLanguages": ["English"],"isVerified": true,"isNewConstruction": false,"imagesCount": 18,"listedAt": "2026-09-02T10:41:37Z","description": "…","scrapedAt": "2026-09-04T18:30:05.658Z"}
Fill rates measured across 111 live properties on 2026-09-04: price, size, bedrooms, bathrooms, property type, location with coordinates, brokerage and listing date on 100%; amenities on 101 of 111; price per area and completion status on 100% of sale listings (PropertyFinder does not publish either on rentals).
Rows that are never charged
status | when |
|---|---|
no-results | PropertyFinder has no listings for this search. That is its answer, not a failure |
no-such-search | PropertyFinder has no page at that address - a mistyped emirate or property type. Not a claim that there is nothing there |
no-filter-match | Listings were read, but your filters removed all of them. The row says how many were read |
no-new-listings | Monitoring mode: nothing new since the previous run |
unreadable | The page could not be read, or its embedded data was missing |
A page is reported as unreadable, never as "no listings" when its embedded data is missing or when the page states a total above zero while yielding no properties — the count PropertyFinder prints on the page is compared against what was actually read. So a redesign on PropertyFinder's side, or a bot check that empties the list, shows up as an error rather than as a quiet, permanent "there is nothing for sale".
Pricing
Pay per property returned. Rows that report an empty search, a filter that matched nothing, or a page that could not be read are not charged. A property that appears twice is dropped before delivery, so it is never charged twice.
Notes
robots.txtwas read in full on 2026-09-04. TheUser-agent: *section disallows filter parameters and*?*page=*&*, and allows standalone pagination (Allow: *?page=*). This Actor requests only the public SEO listing addresses plus?page=Non its own.- Only public pages are read. No login, no API key.