# Property Finder Scraper — Dubai & UAE, Saudi, Qatar, Egypt (`yugenox/propertyfinder-scraper`) Actor

Scrape Property Finder real estate listings in Dubai and the rest of the UAE, Saudi Arabia, Qatar, Egypt and Bahrain by city, area, type and bedrooms, or from pasted links: price, size, beds, baths, amenities, coordinates, verified flag, agent and broker details, photos. No login.

- **URL**: https://apify.com/yugenox/propertyfinder-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Property Finder Scraper: UAE, Qatar, Bahrain, Egypt and Saudi listings

Scrape **Property Finder** property listings from **propertyfinder.ae, .qa, .bh, .eg and .sa**. Search by **city, area, property type and bedrooms**, or paste links you opened on the site. Each listing comes back with its **price, size, bedrooms and bathrooms, amenities, coordinates, verified flag**, the **agent and broker business details**, and photos. Turn on listing details to also get the **DLD permit link, licence numbers, all photos in full size, service charge** and recent nearby transactions. No login, no cookies, no account.

### What you get

| | |
|---|---|
| **Listing** | ID, URL, title, purpose (buy / rent / commercial), property type, reference, listed date, listing tier (premium, featured…) |
| **Price** | Price, currency (AED, QAR, BHD, EGP, SAR), rent period (yearly, monthly…), price per sqft/sqm, hidden-price flag, price-drop flag |
| **Size & rooms** | Bedrooms (0 = studio), bathrooms, size as listed plus both sqft and sqm, furnishing, ready or off-plan |
| **Location** | Full location, city, community, sub-community, tower, location IDs, **latitude and longitude** |
| **Amenities** | Balcony, shared pool, gym, covered parking, maid's room, view of water… (names and codes) |
| **Trust** | Verified flag, exclusive, direct from developer, permit validation link and licensed agency when shown |
| **Agent & broker** | Broker company name, phone, email, address, logo and page; agent name, page, photo, languages, SuperAgent flag |
| **Photos** | Main photo, 4 photos from search (all photos in full size with listing details) |
| **Listing details** (optional) | DLD permit link (Trakheesi), agency legal name, broker and agent licence numbers, service charge, available-from date, zone, agent rating and experience, recent transactions of similar units |
| **New projects** (optional) | Developer off-plan projects shown on buy pages: developer, starting price, down payment, handover date, payment plans |

### How to use it

1. Pick the **country** and whether you want to **buy or rent** (residential or commercial).
2. Type a **city** (Dubai, Abu Dhabi, Doha, Riyadh, Cairo…) and, optionally, one or more **areas** (Dubai Marina, Business Bay, JVC…). Close spellings are matched to the site's own area names.
3. Choose a **property type** and **bedrooms**, add price, size, furnishing or verified-only filters if you want, and set **Max listings**.

Or paste **Property Finder links**: any search page you opened on the site, or single listing pages.

#### Input examples

Two-bedroom apartments for rent in Dubai Marina under AED 160,000 a year:

```json
{
  "country": "ae",
  "purpose": "rent",
  "city": "Dubai",
  "locations": ["Dubai Marina"],
  "propertyType": "apartments",
  "bedrooms": ["2"],
  "maxPrice": 160000,
  "maxItems": 100
}
```

Verified villas for sale in Dubai, with permits, licences and all photos:

```json
{
  "country": "ae",
  "purpose": "buy",
  "city": "Dubai",
  "propertyType": "villas",
  "verifiedOnly": true,
  "includeDetails": true,
  "maxItems": 50
}
```

Paste links from any Property Finder site:

```json
{
  "startUrls": [
    { "url": "https://www.propertyfinder.qa/en/rent/doha/apartments-for-rent.html" },
    { "url": "https://www.propertyfinder.ae/en/commercial-rent/dubai/offices-for-rent.html?page=2" }
  ],
  "maxItems": 200
}
```

### Output example

```json
{
  "id": "126086483",
  "url": "https://www.propertyfinder.ae/en/plp/rent/apartment-for-rent-dubai-dubai-marina-marina-wharf-marina-wharf-1-126086483.html",
  "title": "Marina Promanade View | Balcony | Spacious",
  "listingType": "property",
  "purpose": "rent",
  "propertyType": "Apartment",
  "price": 115000,
  "currency": "AED",
  "pricePeriod": "yearly",
  "bedrooms": 2,
  "bathrooms": 3,
  "areaSqft": 1337,
  "areaSqm": 124.2,
  "furnished": "furnished",
  "locationFullName": "Marina Wharf 1, Marina Wharf, Dubai Marina, Dubai",
  "city": "Dubai",
  "community": "Dubai Marina",
  "subCommunity": "Marina Wharf",
  "tower": "Marina Wharf 1",
  "latitude": 25.0727,
  "longitude": 55.1326,
  "amenities": ["Balcony", "Built in Wardrobes", "Central A/C", "Covered Parking", "Shared Pool"],
  "isVerified": true,
  "sellerType": "agency",
  "broker": {
    "name": "Property Market",
    "phone": "+9714…",
    "profileUrl": "https://www.propertyfinder.ae/en/broker/…"
  },
  "agent": {
    "name": "…",
    "profileUrl": "https://www.propertyfinder.ae/en/agent/…",
    "isSuperAgent": true,
    "languages": ["English", "Arabic", "French"]
  },
  "imageUrl": "https://static.shared.propertyfinder.ae/media/images/listing/…/668x452.jpg",
  "images": ["…"],
  "listedAt": "2026-08-05T07:14:15Z",
  "country": "ae",
  "page": 1,
  "position": 1,
  "scrapedAt": "2026-10-01T20:10:00.000Z"
}
```

With **Include listing details** turned on, rows also have `permitValidationUrl`, `permitAuthority`, `agencyLegalName`, `brokerLicenseNumber`, `agent.licenseNumber`, `serviceCharge`, `availableFrom`, `zoneName`, `recentTransactions` and every photo in full size.

### Use cases

- **Market research and pricing**: rents and sale prices per community, per bedroom count, per sqft.
- **Lead generation for agencies and service companies**: which brokers and agents are active in which areas.
- **Investment screening**: price-drop listings, off-plan vs ready, recent transactions next to the asking price.
- **Monitoring**: schedule daily runs on an area and compare listing IDs and prices over time.
- **Cross-country views**: the same search in Dubai, Doha, Manama, Riyadh and Cairo.

### FAQ

**Do I need a Property Finder account, cookies or an API key?** No. The scraper reads the same public pages any visitor sees without logging in. There is nothing to set up.

**Which countries work?** The UAE (propertyfinder.ae), Qatar (.qa), Bahrain (.bh), Egypt (.eg) and Saudi Arabia (.sa). Pasted links can come from any of them.

**How many listings can I get?** Each result page has 25 listings and the scraper can read every page of a search (thousands of listings). Set **Max listings** to 0 for no limit. Max listings counts all your searches together.

**How do the price and size filters work?** They are applied while the results are read, so a narrow price range in a big city can mean reading many pages to find enough matches. **Max pages per search** caps that (40 pages = 1,000 listings checked by default). Bedrooms, area, city and property type use the site's own pages, so they cost nothing extra.

**My area wasn't found.** The status message lists the areas that have listings in that city. You can also open the area on Property Finder and paste the link.

**Why is the permit number empty?** In the UAE the site shows the permit as an official Dubai Land Department link (Trakheesi) rather than a number. Turn on **Include listing details** to get that link for every listing.

**Do I get owners' phone numbers?** Property Finder lists properties through licensed brokers, and the scraper returns the broker's and agent's published business details. If a listing ever comes from a private owner, the scraper leaves out their name, phone and WhatsApp.

**Which proxy should I use?** Keep the default (Apify datacenter proxy). If the site starts refusing datacenter connections, the run switches to residential proxies by itself when your account has them.

**Is it legal to scrape Property Finder?** This Actor only collects publicly available data: property listings that anyone can view on Property Finder without an account. Collecting publicly available data is generally legal, but you're responsible for how you use it. Results can include agents' names and brokers' business contact details, and that counts as personal data. You must follow privacy laws such as GDPR, PIPEDA and CCPA, as well as Property Finder's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from pages Property Finder shows to any visitor without logging in. It never uses a login, never touches private accounts, and never reaches password-protected areas.

# Actor input Schema

## `country` (type: `string`):

Which Property Finder site to search. Pasted links always use their own site.

## `purpose` (type: `string`):

Residential for sale or rent, or commercial for sale or rent.

## `city` (type: `string`):

City or emirate, e.g. Dubai, Abu Dhabi, Sharjah, Doha, Riyadh, Cairo. Leave empty to search the whole country.

## `locations` (type: `array`):

Areas or communities in that city, e.g. Dubai Marina, Business Bay, Jumeirah Village Circle. Each area is a separate search. Close spellings are matched to the site's area names.

## `propertyType` (type: `string`):

Type of property. "Any" searches every type.

## `bedrooms` (type: `array`):

Only these bedroom counts. Leave empty for any. "7+" means 7 or more.

## `minPrice` (type: `integer`):

In the site's currency (AED, QAR, BHD, EGP, SAR), as listed — rentals are mostly yearly in the UAE and monthly in Qatar, Bahrain and Egypt.

## `maxPrice` (type: `integer`):

In the site's currency, as listed.

## `minArea` (type: `integer`):

Property size, in the unit below.

## `maxArea` (type: `integer`):

Property size, in the unit below.

## `areaUnit` (type: `string`):

Unit for Min/Max size. Every row has both sqft and sqm.

## `furnishing` (type: `string`):

Only furnished, unfurnished or partly furnished listings.

## `verifiedOnly` (type: `boolean`):

Keep only listings Property Finder marks as verified.

## `startUrls` (type: `array`):

Search pages you opened on any Property Finder site (e.g. https://www.propertyfinder.ae/en/rent/dubai/apartments-for-rent-dubai-marina.html — add ?page=3 to start on page 3) or listing pages (…/en/plp/…). The filters above apply to them too.

## `maxItems` (type: `integer`):

Stop after this many listings in total (all searches together). 0 = no limit.

## `maxPagesPerSearch` (type: `integer`):

Each result page has 25 listings. With narrow price or size filters, the scraper reads pages until it has enough matches or reaches this number.

## `includeDetails` (type: `boolean`):

Also open each listing page: every photo in full size, DLD permit link, agency legal name, broker and agent licence numbers, service charge, available-from date, nearby recent transactions and agent stats. One extra page per listing.

## `includeNewProjects` (type: `boolean`):

Buy searches also show developer off-plan projects. Turn on to save them as rows (listingType project / project_unit).

## `proxyConfiguration` (type: `object`):

Apify datacenter proxy is the default and works for most runs. If the site starts refusing datacenter IPs, the run switches to residential proxies automatically when your account has them.

## `maxConcurrency` (type: `integer`):

Pages loaded in parallel.

## Actor input object example

```json
{
  "country": "ae",
  "purpose": "rent",
  "city": "Dubai",
  "locations": [
    "Dubai Marina"
  ],
  "propertyType": "apartments",
  "areaUnit": "sqft",
  "furnishing": "any",
  "verifiedOnly": false,
  "maxItems": 50,
  "maxPagesPerSearch": 40,
  "includeDetails": false,
  "includeNewProjects": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 4
}
```

# Actor output Schema

## `listings` (type: `string`):

All scraped listings.

## `report` (type: `string`):

What each search found, pages read, and why the run stopped (RUN_REPORT).

## `run` (type: `string`):

Status and statistics for this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "country": "ae",
    "purpose": "rent",
    "city": "Dubai",
    "locations": [
        "Dubai Marina"
    ],
    "propertyType": "apartments",
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/propertyfinder-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "country": "ae",
    "purpose": "rent",
    "city": "Dubai",
    "locations": ["Dubai Marina"],
    "propertyType": "apartments",
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/propertyfinder-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "country": "ae",
  "purpose": "rent",
  "city": "Dubai",
  "locations": [
    "Dubai Marina"
  ],
  "propertyType": "apartments",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/propertyfinder-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/propertyfinder-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/g1m12F0lLWJs95eo7/builds/Qy7JPgyJhakHfOLpg/openapi.json
