# Property Finder Scraper - UAE, Saudi, Qatar, Bahrain, Egypt (`fabrikit/propertyfinder-scraper`) Actor

Property Finder scraper for UAE, Saudi Arabia, Qatar, Bahrain and Egypt: sale and rent listings by location, type, price, beds, area and furnishing. Prices, coordinates, brokerage, photos, permit. No login.

- **URL**: https://apify.com/fabrikit/propertyfinder-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 listing scrapeds

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, Saudi Arabia, Qatar, Bahrain, Egypt

Scrape property listings from **Property Finder** in the five countries where it operates: the United Arab Emirates, Saudi Arabia, Qatar, Bahrain and Egypt. Search by location, purpose (buy or rent), residential or commercial, property type, price, bedrooms, bathrooms, area, furnishing, completion status, rent frequency and more, or paste any Property Finder search URL. No login, no API key.

You pay only for listings saved to the dataset.

### What you get

For every listing: id, URL, reference, title, description, purpose (sale / rent), property type, price, currency, rent frequency, price per area, bedrooms, bathrooms, area in sqft and sqm, full location text plus the location hierarchy (city, community, sub-community, tower), latitude / longitude, completion status, furnishing, amenities, photo count and cover photo, video URL, brokerage name / office phone / address / logo / profile URL, verified and featured flags, listing level, quality score, permit (RERA) number when shown on the search card, and listed / refreshed dates.

Individual agents (names, photos, mobile numbers, WhatsApp, e-mails) are **not** collected. The actor only keeps the brokerage, which is a company.

### Input examples

2-bedroom apartments for rent in Dubai Marina, yearly, up to AED 200,000:

```json
{
  "country": "ae",
  "purpose": "rent",
  "propertyTypes": ["apartment"],
  "locations": ["Dubai Marina"],
  "bedrooms": ["2"],
  "rentFrequency": "yearly",
  "maxPrice": 200000,
  "maxItems": 500
}
```

Villas for sale in Riyadh:

```json
{ "country": "sa", "purpose": "sale", "propertyTypes": ["villa"], "locations": ["Riyadh"], "maxItems": 300 }
```

Exactly what you filtered on the website:

```json
{ "startUrls": [{ "url": "https://www.propertyfinder.ae/en/search?c=1&t=1&l=50&fu=0&ob=mr" }], "maxItems": 1000 }
```

Notes:

- `locations` takes city, community or building names. If a name exists in several cities, write "Community, City" (for example "Business Bay, Dubai"). You can also pass numeric `locationIds`.
- `propertyTypes` are matched against Property Finder's own list for the chosen purpose and segment (apartment, villa, townhouse, penthouse, land, office, shop...). One search is run per location and type, and results are de-duplicated by listing id.
- `minArea` / `maxArea` use the country's own unit (sqft in UAE and Qatar, sqm in Saudi Arabia, Bahrain and Egypt). Output always contains both `areaSqft` and `areaSqm`.
- `maxItems` is exact and shared by all searches in the run. Results come in the order you choose with `sortBy` (newest by default).

### Output example

```json
{
  "id": "158727374",
  "url": "https://www.propertyfinder.ae/en/plp/buy/apartment-for-sale-dubai-dubai-marina-ocean-heights-158727374.html",
  "country": "ae",
  "title": "3BR Sea View Dubai Marina | High Floor | Rented",
  "purpose": "sale",
  "propertyType": "Apartment",
  "price": 2800000,
  "currency": "AED",
  "rentFrequency": null,
  "bedrooms": 3,
  "bathrooms": 5,
  "areaSqft": 1547,
  "areaSqm": 143.7,
  "location": "Ocean Heights, Dubai Marina, Dubai",
  "city": "Dubai",
  "community": "Dubai Marina",
  "tower": "Ocean Heights",
  "latitude": 25.0904,
  "longitude": 55.1487,
  "completionStatus": "completed",
  "furnishing": "furnished",
  "photosCount": 20,
  "brokerName": "COLIFE REAL ESTATE",
  "brokerPhone": "+971522259201",
  "verified": true,
  "listedAt": "2026-10-13T17:47:57Z"
}
```

### Pricing

| Event | When |
|---|---|
| Listing scraped (`listing-result`) | every listing saved to the dataset |

Plus the standard Apify platform start fee. See the Pricing tab for current prices; paid Apify plans get lower rates. Runs stop automatically when your spending limit is reached.

### FAQ

**How many listings can I get?** Property Finder lists well over 100,000 properties for sale in the UAE alone; a single search can be paged through thousands of result pages. Split big jobs by location or property type.

**Does it need a proxy?** The default proxy setting uses Apify datacenter IPs and switches to residential IPs automatically if the site blocks them.

**Why is the permit number sometimes empty?** Property Finder shows the RERA / permit number on the search card only for some listings.

**Can I filter by bathrooms?** Yes (`minBathrooms`, `maxBathrooms`); these are applied after download, so with a tight filter the run reads more pages.

### Use cases

Market and price monitoring, rental yield analysis, lead lists of brokerages, relocation research, investor dashboards, new-listing alerts.

### En español

Extrae anuncios de Property Finder en Emiratos Árabes, Arabia Saudita, Catar, Baréin y Egipto: venta y alquiler, precio, dormitorios, baños, superficie, coordenadas, inmobiliaria (empresa) y fotos. Filtra por ubicación, tipo, precio, dormitorios y más, o pega una URL de búsqueda. No recoge datos personales de agentes individuales. Consulta la pestaña Pricing para ver los precios vigentes; los planes de pago de Apify tienen tarifas más bajas.

# Actor input Schema

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

Which Property Finder site to search.

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

Listings for sale or for rent.

## `segment` (type: `string`):

Residential homes or commercial space (offices, shops, warehouses...).

## `propertyTypes` (type: `array`):

Names such as apartment, villa, townhouse, penthouse, land, office, shop (matched against Property Finder's own list for the chosen purpose and segment). One search per type. Leave empty for all types.

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

Cities, communities or buildings, for example Dubai, Dubai Marina, Downtown Dubai, Yas Island, Doha, Cairo. Use "Community, City" if a name exists in several cities (for example "Business Bay, Dubai"). One search per entry. Leave empty for the whole country.

## `locationIds` (type: `array`):

Property Finder numeric location ids (the l= value in a search URL). Added to the locations above.

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

Only listings with these bedroom counts: studio, 1, 2, 3 ... 7 (8 = 7+). Leave empty for any.

## `minBathrooms` (type: `integer`):

Minimum number of bathrooms (filtered after download).

## `maxBathrooms` (type: `integer`):

Maximum number of bathrooms (filtered after download).

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

Minimum price in the local currency (AED, SAR, QAR, BHD or EGP). For rentals this is the price per chosen rent period.

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

Maximum price in the local currency.

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

Minimum built-up area in the country's unit: sqft in UAE and Qatar, sqm in Saudi Arabia, Bahrain and Egypt.

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

Maximum built-up area in the country's unit (sqft or sqm).

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

Furnishing status.

## `rentFrequency` (type: `string`):

For rentals only: price period used by the price filter and the results. Leave on Any to include all.

## `completionStatus` (type: `string`):

Ready-to-move or off-plan properties.

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

Only listings carrying Property Finder's verified badge.

## `listedWithin` (type: `string`):

Only listings published in this window.

## `keywords` (type: `string`):

Free-text keywords searched in the listing (for example sea view, private pool).

## `amenities` (type: `array`):

Property Finder amenity codes that must all be present, for example PA (pets allowed), BA (balcony), CP (covered parking), SP (shared pool), PG (private garden), ST (study).

## `sortBy` (type: `string`):

Order of the results. With a limit on items, you get the first ones in this order.

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

Paste Property Finder search result URLs (from any of the five sites) to scrape exactly what you filtered on the website. When set, the filters above are ignored.

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

Maximum number of listings to save in total (across all searches). The run stops as soon as it is reached.

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

Apify Proxy settings. Datacenter proxies are tried first; the actor switches to residential IPs automatically if the site blocks them.

## Actor input object example

```json
{
  "country": "ae",
  "purpose": "sale",
  "segment": "residential",
  "propertyTypes": [
    "apartment"
  ],
  "locations": [
    "Dubai Marina"
  ],
  "furnishing": "any",
  "rentFrequency": "",
  "completionStatus": "any",
  "verifiedOnly": false,
  "listedWithin": "any",
  "sortBy": "newest",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All records collected during the 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 = {
    "propertyTypes": [
        "apartment"
    ],
    "locations": [
        "Dubai Marina"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/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 = {
    "propertyTypes": ["apartment"],
    "locations": ["Dubai Marina"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/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 '{
  "propertyTypes": [
    "apartment"
  ],
  "locations": [
    "Dubai Marina"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabrikit/propertyfinder-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fabrikit/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/0kelcZPbOicyDvkjH/builds/N6Khn0Vwebgl2iuhu/openapi.json
