# Property Finder Scraper - Gulf Real Estate Listings (`thirdwatch/property-finder-scraper`) Actor

Export Property Finder listings across the UAE, Qatar, Bahrain, Egypt and Saudi Arabia: price, size, beds, coordinates, agent, brokerage, amenities and permit number.

- **URL**: https://apify.com/thirdwatch/property-finder-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Property Finder Scraper

> Export Property Finder listings across the UAE, Qatar, Bahrain, Egypt and Saudi Arabia — price, size, beds, coordinates, agent, brokerage, amenities and permit number.

### What you get

Property Finder is the largest property portal in the Gulf. This Actor turns any search — a whole country, one city, one community, or the exact filter set you built in the browser — into flat dataset rows.

Every row carries what the portal itself shows on the card and more: the listing's coordinates, the agent and the brokerage behind it, whether Property Finder verified it, the amenity list spelled out in words rather than two-letter codes, and the listing and refresh dates.

| Country | Site |
|---|---|
| United Arab Emirates | propertyfinder.ae |
| Qatar | propertyfinder.qa |
| Bahrain | propertyfinder.bh |
| Egypt | propertyfinder.eg |
| Saudi Arabia | propertyfinder.sa |

### Output fields

| Field | Description |
|---|---|
| `id`, `reference`, `title`, `url` | Listing identity and link |
| `purpose`, `country`, `property_type` | Buy or rent, market, and type |
| `price`, `price_currency`, `price_period` | Amount, currency, and `sell` or `yearly` |
| `bedrooms`, `bathrooms`, `size`, `size_unit` | Layout and floor area |
| `location_name`, `location_id`, `latitude`, `longitude` | Full location path and map point |
| `completion_status`, `furnished` | Ready or off-plan, and furnishing |
| `is_verified`, `is_premium`, `is_featured`, `is_new_construction` | Portal quality and placement flags |
| `amenities`, `amenity_labels` | Raw codes and their readable names |
| `images`, `images_count`, `has_view_360` | Photography and virtual tours |
| `agent_name`, `agent_id`, `agent_is_super_agent` | The listing agent |
| `broker_name`, `broker_id`, `broker_address` | The brokerage |
| `permit_number` | RERA or equivalent permit, where published |
| `listed_date`, `last_refreshed_at` | When it was posted and last bumped |
| `search_url`, `scraped_at`, `source` | Reproducibility fields |

### Example output

```json
{"id":"139218251","title":"Unfurnished | Marina View | High Floor","purpose":"rent","country":"ae","property_type":"Apartment","price":170000,"price_currency":"AED","price_period":"yearly","bedrooms":"2","bathrooms":"3","size":1378,"size_unit":"sqft","location_name":"Fairfield Tower, Park Island, Dubai Marina, Dubai","latitude":25.0805,"longitude":55.1403,"is_verified":true,"amenity_labels":["Balcony","Barbecue Area","Built in Kitchen Appliances"],"broker_name":"Rosenheim Luxury Properties","agent_name":"Kristina Kimeridze"}
```

### Input parameters

| Parameter | Required | Description |
|---|---|---|
| `country` | Yes | `ae`, `qa`, `bh`, `eg`, or `sa` |
| `purpose` | Yes | `buy`, `rent`, `commercial-buy`, or `commercial-rent` |
| `locations` | No | Cities or communities by name, such as `Dubai Marina`. Numeric location ids work too. Empty searches the whole country |
| `city` | No | The city a community belongs to, used to resolve community names |
| `searchUrls` | No | Paste Property Finder search URLs to reuse filters built in the browser |
| `propertyType` | No | Apartment, villa, townhouse, penthouse, land, whole building, and more |
| `bedrooms`, `bathrooms` | No | Counts to include; `0` is studio and `8` means 7+ |
| `minPrice`, `maxPrice` | No | In the country's currency; rent is yearly |
| `minArea`, `maxArea` | No | Floor area, in the unit that country's site uses (sqft in the Gulf, sqm in Saudi Arabia) |
| `furnished`, `completionStatus` | No | Furnishing, and ready vs off-plan |
| `listedWithin` | No | Only listings posted in the last day, week, 15/30/90 days |
| `verifiedOnly` | No | Keep only portal-verified listings |
| `sort` | No | Featured, newest, price, or bedroom order |
| `maxResults` | No | Upper bound on saved listings; defaults to 100 |

### Use cases

- Brokerages can track competing inventory, asking prices and time-on-market in their own communities.
- Investors can build a price-per-square-foot dataset for a tower, community or whole emirate.
- Proptech and CRM products can seed or refresh listing databases across five Gulf markets from one run.
- Analysts can measure supply mix — off-plan against ready, furnished against unfurnished — over time.

### Limitations

Prices are asking prices, not transacted ones, and rent figures are yearly. Floor area comes back in the unit the local site uses — square feet in the UAE, Qatar, Bahrain and Egypt, square metres in Saudi Arabia — and `size_unit` records which. The search page does not carry a listing's description or the agent's phone number, so neither is in the output; the `url` opens the full listing. Community names are resolved through Property Finder's own location pages, so an unrecognised name is reported as an empty result for that entry rather than a failed run, and the `city` input is what allows a community like Dubai Marina to be found. Property Finder itself stops paginating a single search well before its reported total, so very large collections should be split by community, price band or property type. Lebanon is not supported because that domain no longer resolves.

### Compared to alternatives

Most Property Finder Actors cover the UAE only and return the card text. This one runs the same engine against all five Property Finder countries, reads the portal's own structured payload rather than scraping rendered HTML, spells amenity codes out into labels, and keeps the agent, brokerage, permit number and coordinates that lead and valuation work actually depend on. It is pure HTTP at 256 MB, with no browser and no API key.

### FAQ

#### Do I need a Property Finder account or API key?

No. Everything the Actor reads is public.

#### How do I search one specific community?

Put the community in `locations` and its city in `city` — for example `Dubai Marina` with `Dubai`. Alternatively paste the community's page URL into `searchUrls`.

#### Why did I get fewer listings than the reported total?

Property Finder caps how deep a single search paginates. Narrow the search — by community, price band, bedroom count or property type — and run the parts.

# Actor input Schema

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

Which Property Finder site to search.

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

Residential sale or rent, or the commercial equivalents.

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

Cities or communities, such as Dubai or Dubai Marina. Leave empty to search the whole country. Numeric Property Finder location ids also work.

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

The city a community sits in, used to resolve names like Dubai Marina. Ignored for city-level searches.

## `searchUrls` (type: `array`):

Paste any Property Finder search or location URL to reuse the exact filters you built in the browser.

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

Restrict to one property type.

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

Bedroom counts to include. 0 is studio, 8 means 7+.

## `bathrooms` (type: `array`):

Bathroom counts to include. 8 means 7+.

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

In the country's own currency. Rent prices are yearly.

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

In the country's own currency. Rent prices are yearly.

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

Smallest floor area to include, in the unit that country's site uses: square feet in the Gulf, square metres in Saudi Arabia.

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

Largest floor area to include, in the unit that country's site uses: square feet in the Gulf, square metres in Saudi Arabia.

## `furnished` (type: `string`):

Restrict to furnished, unfurnished, or partly furnished listings.

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

Restrict to ready properties or off-plan ones.

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

Only listings published in this window.

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

Keep only listings Property Finder has verified.

## `sort` (type: `string`):

Order the results the same way the site does.

## `maxResults` (type: `integer`):

Upper bound on saved listings across every location.

## Actor input object example

```json
{
  "country": "ae",
  "purpose": "buy",
  "locations": [
    "Dubai Marina"
  ],
  "city": "Dubai",
  "searchUrls": [],
  "propertyType": "any",
  "bedrooms": [],
  "bathrooms": [],
  "furnished": "any",
  "completionStatus": "any",
  "listedWithin": "any",
  "verifiedOnly": false,
  "sort": "featured",
  "maxResults": 100
}
```

# Actor output Schema

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

No description

# 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 = {
    "locations": [
        "Dubai Marina"
    ],
    "city": "Dubai"
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/property-finder-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 = {
    "locations": ["Dubai Marina"],
    "city": "Dubai",
}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/property-finder-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 '{
  "locations": [
    "Dubai Marina"
  ],
  "city": "Dubai"
}' |
apify call thirdwatch/property-finder-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thirdwatch/property-finder-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/5buFjbW4HZQHfLehj/builds/HisXC0Jc5Pd8NMeXs/openapi.json
