# Property Finder Agent Scraper — Dubai Agents, Agencies, Leads (`sian.agency/propertyfinder-agent-scraper`) Actor

Scrape Property Finder real estate agents, agencies, and off-plan projects across Dubai and the UAE. Get agent leads with direct phone, email, WhatsApp, LinkedIn, RERA trade license, ratings, transaction stats, agency rosters, plus new-project prices, developers, and payment plans.

- **URL**: https://apify.com/sian.agency/propertyfinder-agent-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 agent extracteds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Agent Scraper — Dubai Real Estate Agents, Agencies & Off-Plan Leads 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Property Finder Property Scraper](https://img.shields.io/badge/Store-Property%20Finder%20Property%20Scraper-EF5E4E)](https://apify.com/sian.agency/propertyfinder-property-scraper?fpr=sian) [![Bayut Property Scraper](https://img.shields.io/badge/Store-Bayut%20Property%20Scraper-93D500)](https://apify.com/sian.agency/bayut-property-scraper?fpr=sian) [![MENA Property Gateway](https://img.shields.io/badge/Store-MENA%20Property%20Gateway-1AE392)](https://apify.com/sian.agency/mena-property-gateway?fpr=sian)

#### 🎉 The only Property Finder actor with DIRECT contacts — email, phone, WhatsApp & LinkedIn per agent, plus RERA trade licenses and full off-plan payment plans
##### Built for Gulf lead-gen teams, brokerage recruiters, and off-plan property investors

---

### 📋 Overview

**Need contactable real-estate leads from the Gulf's biggest property portal?** This actor scrapes Property Finder agents, agencies, and new-project launches across Dubai, Abu Dhabi, and the wider UAE — and unlike every alternative, its agent rows come with **direct email, phone, WhatsApp, and LinkedIn**, not just names and ratings.

**Why professionals choose us:**
- ✅ **Directly contactable leads**: agent profile enrichment adds email, phone, WhatsApp number, and LinkedIn — fields no other Property Finder actor returns
- ⚡ **Agency leads in one call**: every agency row already contains direct phone, email, RERA trade license number, ranking, and roster size (1,400+ agencies in Dubai Marina alone)
- 🎯 **Performance intel built in**: transaction counts, AED deal volumes, average ticket size, ratings distribution, SuperAgent status, WhatsApp response time
- 💰 **Cheap volume headline**: agent rows from $0.002 — the money-making contact enrichment stays optional and transparent
- 💎 **Off-plan investor mode**: new-project launches with developer, starting price, down-payment %, delivery date, plus full **payment-plan milestones and government fees** per project
- ✨ **NEW**: Auto portfolio-slice detection — commercial-only or rentals-only portfolios are never silently missed

---

### ✨ Features

- 👤 **Agent Search**: paginate any market's agent directory by free-text location — "Dubai Marina", "Downtown Dubai", or all of "Dubai"
- 📞 **Direct-Contact Enrichment**: one toggle adds email, phone, WhatsApp, LinkedIn, and transaction stats to every agent row
- 🌍 **Nationality & SuperAgent Filters**: server-verified filters for language-matched outreach and top-performer targeting
- 🏢 **Agency Search**: brokerage leads with phone, email, trade license, client type, branch structure, and agent roster counts
- 🏠 **Portfolio Listings**: pull the complete sale/rent/commercial listing inventory of any agent or agency by id
- 🏗 **New Projects Mode**: off-plan launches filtered by location, developer, or completion status, sortable by delivery date
- 📋 **Project Dossiers**: full payment-plan milestones, government fees, ownership type, amenities, and master plan per project
- 📊 **Run KPIs**: HTML report with contact coverage, SuperAgent share, nationality mix, price medians, and top developers
- 🔁 **Deduplication**: every run dedupes rows automatically — you never pay twice for the same record

---

### 🎬 Quick Start

Pick a mode, give it a location (or ids/slugs), press Start. One mode per run, one clean dataset out.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~propertyfinder-agent-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"mode": "agentSearch", "location": "Dubai Marina", "maxResults": 50}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick a mode

`agentSearch` for agent leads, `agencySearch` for brokerage leads, `newProjects` for off-plan launches — or the listing/detail modes for deep dives.

#### Step 2: Enter a location or ids

Free-text location like "Dubai Marina" for the search modes; numeric ids or project slugs (harvested from a search run) for the portfolio/detail modes.

#### Step 3: Run and export

Press Start, watch rows stream into the dataset, export as JSON/CSV/Excel.

**That's it! In under two minutes you'll have:**

- Contactable agent or agency lead lists with license numbers
- Performance metrics to rank and segment every lead
- Off-plan project pipelines with payment plans and delivery dates

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| mode | string | No | agentSearch (default) · agencySearch · agentListings · agencyListings · newProjects · projectDetails |
| location | string | No | Free-text location for the search modes, e.g. "Dubai Marina" |
| searchText | string | No | Name search for agents/agencies (best used without a location) |
| nationality | string | No | 2-letter agent nationality filter, e.g. "gb", "in" |
| superAgentsOnly | boolean | No | Only agents with SuperAgent status |
| fetchAgentDetails | boolean | No | Enrich agents with email/phone/WhatsApp/LinkedIn + transaction stats (default true, PAID) |
| fetchAgencyDetails | boolean | No | Enrich agencies with the full company description (default false, PAID) |
| agencySortOrder | string | No | Default · Name · Most\_Properties |
| agentIds / agencyIds | array | No | Numeric ids for the portfolio-listing modes |
| listingSearchType | string | No | Auto (recommended) · For\_Sale · For\_Rent |
| commercialListings | boolean | No | Fetch the commercial portfolio slice |
| developerId | string | No | Filter new projects by developer |
| completionStatus | string | No | Any · Off\_Plan · Ready |
| projectSortOrder | string | No | Featured · Newest · price/delivery-date sorts |
| projectSlugs | array | No | Project slugs or new-project URLs for projectDetails |
| maxResults | integer | No | Rows per query / per id (default 50) |

**Agent leads (with direct contacts):**

```json
{
  "mode": "agentSearch",
  "location": "Dubai Marina",
  "superAgentsOnly": true,
  "fetchAgentDetails": true,
  "maxResults": 100
}
```

**Agency leads:**

```json
{
  "mode": "agencySearch",
  "location": "Dubai",
  "agencySortOrder": "Most_Properties",
  "maxResults": 200
}
```

**Off-plan pipeline:**

```json
{
  "mode": "newProjects",
  "location": "Dubai",
  "completionStatus": "Off_Plan",
  "projectSortOrder": "Delivery_Date_Earliest"
}
```

***

### 📤 Output

Results stream to the Apify dataset with **100+ fields** across row types (`rowType` = agent, agency, listing, project, projectDetail):

| Field | Type | Description |
|-------|------|-------------|
| agentName / agencyName | string | Lead name |
| email / phone / whatsappPhone / linkedin | string | Direct contact channels (agents via enrichment; agencies in every row) |
| licenseNumber | string | RERA / trade license number |
| isSuperAgent | boolean | Top-performer badge |
| averageRating / reviewCount | number | Reputation metrics |
| transactionsCount / transactions | number/object | Deal counts, AED volumes, average ticket |
| totalAgents / ranking | number | Agency roster size and portal ranking |
| listingTitle / price / pricePerArea | mixed | Portfolio listing economics |
| projectName / developer / priceFrom | mixed | Off-plan project identity and entry price |
| downPaymentPercentage / deliveryDate | mixed | Investor decision fields |
| paymentPlans / governmentFees | array/number | Full milestone schedule + fees (projectDetails) |

**Example (agent row, enriched):**

```json
{
  "rowType": "agent",
  "agentId": "293926",
  "agentName": "Brooke Matthews",
  "position": "Senior Surveyor",
  "isSuperAgent": true,
  "nationality": { "code": "GB", "name": "United Kingdom" },
  "licenseNumber": "69211",
  "languages": ["English"],
  "averageRating": 5,
  "reviewCount": 12,
  "transactionsCount": 28,
  "email": "brooke.m@example-agency.com",
  "phone": "+9715XXXXXXXX",
  "whatsappPhone": "+9715XXXXXXXX",
  "linkedin": "https://www.linkedin.com/in/...",
  "transactions": { "sale": 18, "rent": 10, "dealVolume": 44500000 },
  "enriched": true,
  "scrapedAt": "2026-07-02T12:00:00.000Z"
}
```

***

### 💼 Use Cases & Examples

#### 1. Gulf Lead-Gen Agencies

**Marketing agencies build contactable UAE real-estate lead lists in minutes instead of weeks.**

**Input:** `agencySearch` on "Dubai" sorted by Most\_Properties
**Output:** Hundreds of brokerages with direct phone, email, and RERA license
**Use:** CRM import → outreach sequences → proptech/service sales

#### 2. Brokerage Recruiters

**Recruiting teams identify top producers worth poaching, ranked by hard numbers.**

**Input:** `agentSearch` with superAgentsOnly + contact enrichment
**Output:** Agents with transaction counts, AED deal volume, ratings, and direct WhatsApp
**Use:** Shortlist by production, contact instantly on the channel Gulf agents actually answer

#### 3. Off-Plan Property Investors

**Investors monitor every new Dubai launch with the numbers that matter.**

**Input:** `newProjects` with completionStatus=Off\_Plan, then `projectDetails` on the winners
**Output:** Developer, starting price, down-payment %, delivery date, full payment-plan milestones
**Use:** Compare entry costs and cash-flow schedules across 700+ live Dubai projects

#### 4. Proptech & Data Products

**SaaS teams enrich their platforms with structured Gulf agent/agency data.**

**Input:** Scheduled runs per market
**Output:** Fresh JSON via API with stable ids for joins
**Use:** Agent directories, valuation tools, market dashboards

#### 5. Competitive Intelligence

**Brokerage owners benchmark rival agencies' inventory and team size.**

**Input:** `agencyListings` + `agentListings` on competitor ids
**Output:** Complete portfolios with prices, price-per-area, and listing agents
**Use:** Pricing strategy, market-share tracking, listing-quality audits

#### 6. Market Researchers

**Analysts quantify agent demographics and developer pipelines per neighborhood.**

**Input:** `agentSearch` by nationality + `newProjects` by location
**Output:** Nationality/language mix, SuperAgent density, developer delivery timelines
**Use:** Market reports, investment memos, academic studies

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/propertyfinder-agent-scraper').call({
  mode: 'agentSearch',
  location: 'Dubai Marina',
  fetchAgentDetails: true,
  maxResults: 50
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/propertyfinder-agent-scraper').call(
    run_input={'mode': 'agencySearch', 'location': 'Dubai', 'maxResults': 100}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['agencyName'], item['phone'], item['email'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~propertyfinder-agent-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"mode": "newProjects", "location": "Dubai", "completionStatus": "Off_Plan"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Weekly schedule per market
2. **HTTP Request**: Call the actor API with your saved input
3. **Process**: Filter new rows against your CRM
4. **Action**: Push fresh leads to HubSpot/Salesforce or alert on new project launches

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **1 query, 25 rows** per run — same data quality, no credit card required
- Perfect for evaluating field coverage before scaling

#### PAID Tier (Production Ready)

- **Unlimited** queries and rows per run
- Unlocks profile enrichment — the direct email/phone/WhatsApp/LinkedIn fields
- Pay-per-result: you are only charged for rows actually delivered

💰 **Transparent event pricing** — agent rows from $0.002, agency lead rows from $0.003, full contact enrichment from $0.009, project dossiers from $0.01.

🔗 [View current pricing](https://apify.com/sian.agency/propertyfinder-agent-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How do I get agent emails and phone numbers?**
A: Run `agentSearch` with "Enrich Agents with Direct Contacts" enabled (default). Each enriched row adds email, phone, WhatsApp, and LinkedIn where the agent has published them.

**Q: Do agency rows need enrichment for contacts?**
A: No — every agency search row already includes direct phone, email, and the trade license number.

**Q: Which countries are covered?**
A: Every market the portal serves — the UAE (Dubai, Abu Dhabi, Sharjah...) plus Qatar, Bahrain, Saudi Arabia, and Egypt. Just pass the location.

**Q: Where do agent/agency ids and project slugs come from?**
A: From the search modes — every row carries its stable id/slug. Feed them into the portfolio/detail modes.

**Q: What if an agent only has commercial listings?**
A: Leave the portfolio slice on **Auto** — the actor probes sale, rent, and commercial slices automatically so nothing is missed.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML — export directly from the Apify dataset or pull via API.

**Q: Is this legal?**
A: The actor only extracts publicly listed directory data. See the [legal section](#-is-it-legal-to-scrape-data) below.

***

### 🐛 Troubleshooting

**Search returns 0 rows**

- Broaden the location ("Dubai" instead of a micro-community)
- If you combined `searchText` with a location, drop one — name search works best alone

**Portfolio listings come back empty**

- Keep `listingSearchType` on **Auto** — a fixed For\_Sale slice returns 0 for rental-only or commercial-only portfolios
- Verify the id came from a recent search run

**projectDetails fails on a URL**

- Pass the slug exactly as returned by newProjects ("developer-slug/project-slug"), or the public new-project page URL

**Missing email/LinkedIn on some agents**

- Not every agent publishes every channel; the fields are null when absent — filter on them after export

***

### ⚠️ Trademark Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Property Finder Group** or any of its subsidiaries. "Property Finder" is a trademark of its respective owner, used here only to identify the public website the tool works with. All data extracted is publicly available directory information.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data. They only extract what users and companies have chosen to share publicly — in this case, professional directory profiles that agents and agencies publish to win business. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `mode` (type: `string`):

What to scrape.

👤 **agentSearch** — agent directory by location and/or name, with optional direct-contact enrichment (email, phone, WhatsApp, LinkedIn, transaction stats).

🏢 **agencySearch** — agency directory with direct phone, email, and trade license in every row.

🏠 **agentListings** / **agencyListings** — the full listing portfolio of specific agents/agencies by id.

🏗 **newProjects** — off-plan/new-project launches by location or developer.

📋 **projectDetails** — the full project dossier (payment plans, fees, amenities) by slug.

## `location` (type: `string`):

📍 **FREE-TEXT LOCATION** for agentSearch, agencySearch, and newProjects — e.g. "Dubai Marina", "Downtown Dubai", or just "Dubai". The directory resolves it server-side.

💡 **TIP:** Broader locations return more results (Dubai has 16k+ agents, 750+ new projects).

## `searchText` (type: `string`):

🔎 Search agents or agencies **by name** instead of location, e.g. "brooke" or "elite". Best used on its own — when combined with a location the directory may ignore it.

## `nationality` (type: `string`):

🌍 Filter agents by **2-letter nationality code**, e.g. "gb", "in", "ae". Verified server-side — great for language-matched outreach.

## `superAgentsOnly` (type: `boolean`):

⭐ Return only agents with **SuperAgent** status — the portal's top-performer badge.

## `fetchAgentDetails` (type: `boolean`):

✨ **THE LEAD-GEN SWITCH:** per agent, fetch the full profile — **direct email, phone, WhatsApp, LinkedIn** plus transaction volumes (sale/rent counts, deal volume, average ticket). Adds one profile-enrichment charge per agent. PAID tier only.

## `fetchAgencyDetails` (type: `boolean`):

✨ Per agency, fetch the full company profile (adds the complete company description). Phone, email, and license are already in every search row — enable this only if you need the description. PAID tier only.

## `agencySortOrder` (type: `string`):

↕️ Order agency results: Default (relevance), Name, or Most\_Properties (largest inventories first).

## `agentIds` (type: `array`):

🔎 Numeric agent ids to pull portfolios for (e.g. "293926") — harvest them with agentSearch first.

📊 **TIER LIMITS:** FREE = 1 id per run · PAID = unlimited.

## `agencyIds` (type: `array`):

🔎 Numeric agency ids to pull portfolios for (e.g. "4302") — harvest them with agencySearch first.

📊 **TIER LIMITS:** FREE = 1 id per run · PAID = unlimited.

## `listingSearchType` (type: `string`):

🧭 Which portfolio slice to fetch. **Auto** (recommended) probes sale → rent → commercial automatically, so commercial-only or rentals-only portfolios are never missed. Set explicitly to pin one slice.

## `commercialListings` (type: `boolean`):

🏬 Fetch the **commercial** portfolio slice (offices, retail, warehouses). With Auto slice, prioritises commercial combos first.

## `developerId` (type: `string`):

🏗 Filter new projects by developer id (returned in every project row's developer object). Works with or without a location.

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

🚧 Filter projects by construction status: Any, Off\_Plan (pre-completion — investor territory), or Ready.

## `projectSortOrder` (type: `string`):

↕️ Order project results — delivery-date sorts are ideal for launch monitoring.

## `projectSlugs` (type: `array`):

📋 Project slugs ("developer-slug/project-slug", returned by newProjects) or public new-project page URLs. Each returns the full dossier: description, payment-plan milestones, government fees, amenities, master plan.

📊 **TIER LIMITS:** FREE = 1 project per run · PAID = unlimited.

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

📊 Cap on rows per search query / per portfolio id. Default 50. Lower = faster + cheaper runs.

📊 **TIER LIMITS:** FREE runs are capped at 25 rows total.

## Actor input object example

```json
{
  "mode": "agentSearch",
  "location": "Dubai Marina",
  "searchText": "elite",
  "nationality": "gb",
  "superAgentsOnly": false,
  "fetchAgentDetails": true,
  "fetchAgencyDetails": false,
  "agentIds": [
    "293926"
  ],
  "agencyIds": [
    "4302"
  ],
  "listingSearchType": "Auto",
  "commercialListings": false,
  "completionStatus": "Any",
  "projectSlugs": [
    "select-group/six-senses-residences-dubai-marina"
  ],
  "maxResults": 50
}
```

# Actor output Schema

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

Structured rows: agents (ratings, license, transaction stats, optional direct email/phone/WhatsApp/LinkedIn), agencies (phone, email, trade license, roster size), portfolio listings, and off-plan projects with payment plans.

## `htmlReport` (type: `string`):

HTML summary with run stats, contact coverage, SuperAgent share, nationality mix, price medians, and top-developer breakdowns.

# 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 = {
    "location": "Dubai Marina"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/propertyfinder-agent-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 = { "location": "Dubai Marina" }

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

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

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

```

## CLI example

```bash
echo '{
  "location": "Dubai Marina"
}' |
apify call sian.agency/propertyfinder-agent-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/propertyfinder-agent-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Property Finder Agent Scraper — Dubai Agents, Agencies, Leads",
        "description": "Scrape Property Finder real estate agents, agencies, and off-plan projects across Dubai and the UAE. Get agent leads with direct phone, email, WhatsApp, LinkedIn, RERA trade license, ratings, transaction stats, agency rosters, plus new-project prices, developers, and payment plans.",
        "version": "1.0",
        "x-build-id": "vVF6ck9q7gPVSjoHY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~propertyfinder-agent-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-propertyfinder-agent-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~propertyfinder-agent-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-propertyfinder-agent-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~propertyfinder-agent-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-propertyfinder-agent-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "🧭 Mode",
                        "enum": [
                            "agentSearch",
                            "agencySearch",
                            "agentListings",
                            "agencyListings",
                            "newProjects",
                            "projectDetails"
                        ],
                        "type": "string",
                        "description": "What to scrape.\n\n👤 **agentSearch** — agent directory by location and/or name, with optional direct-contact enrichment (email, phone, WhatsApp, LinkedIn, transaction stats).\n\n🏢 **agencySearch** — agency directory with direct phone, email, and trade license in every row.\n\n🏠 **agentListings** / **agencyListings** — the full listing portfolio of specific agents/agencies by id.\n\n🏗 **newProjects** — off-plan/new-project launches by location or developer.\n\n📋 **projectDetails** — the full project dossier (payment plans, fees, amenities) by slug.",
                        "default": "agentSearch"
                    },
                    "location": {
                        "title": "📍 Location",
                        "type": "string",
                        "description": "📍 **FREE-TEXT LOCATION** for agentSearch, agencySearch, and newProjects — e.g. \"Dubai Marina\", \"Downtown Dubai\", or just \"Dubai\". The directory resolves it server-side.\n\n💡 **TIP:** Broader locations return more results (Dubai has 16k+ agents, 750+ new projects).",
                        "default": "Dubai Marina"
                    },
                    "searchText": {
                        "title": "🔤 Name Search (optional)",
                        "type": "string",
                        "description": "🔎 Search agents or agencies **by name** instead of location, e.g. \"brooke\" or \"elite\". Best used on its own — when combined with a location the directory may ignore it."
                    },
                    "nationality": {
                        "title": "🌍 Agent Nationality (agentSearch)",
                        "type": "string",
                        "description": "🌍 Filter agents by **2-letter nationality code**, e.g. \"gb\", \"in\", \"ae\". Verified server-side — great for language-matched outreach."
                    },
                    "superAgentsOnly": {
                        "title": "⭐ SuperAgents Only (agentSearch)",
                        "type": "boolean",
                        "description": "⭐ Return only agents with **SuperAgent** status — the portal's top-performer badge.",
                        "default": false
                    },
                    "fetchAgentDetails": {
                        "title": "✨ Enrich Agents with Direct Contacts (PAID)",
                        "type": "boolean",
                        "description": "✨ **THE LEAD-GEN SWITCH:** per agent, fetch the full profile — **direct email, phone, WhatsApp, LinkedIn** plus transaction volumes (sale/rent counts, deal volume, average ticket). Adds one profile-enrichment charge per agent. PAID tier only.",
                        "default": true
                    },
                    "fetchAgencyDetails": {
                        "title": "✨ Enrich Agencies with Full Profile (PAID)",
                        "type": "boolean",
                        "description": "✨ Per agency, fetch the full company profile (adds the complete company description). Phone, email, and license are already in every search row — enable this only if you need the description. PAID tier only.",
                        "default": false
                    },
                    "agencySortOrder": {
                        "title": "↕️ Agency Sort Order (agencySearch)",
                        "enum": [
                            "Default",
                            "Name",
                            "Most_Properties"
                        ],
                        "type": "string",
                        "description": "↕️ Order agency results: Default (relevance), Name, or Most_Properties (largest inventories first)."
                    },
                    "agentIds": {
                        "title": "👤 Agent IDs (agentListings)",
                        "type": "array",
                        "description": "🔎 Numeric agent ids to pull portfolios for (e.g. \"293926\") — harvest them with agentSearch first.\n\n📊 **TIER LIMITS:** FREE = 1 id per run · PAID = unlimited.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "agencyIds": {
                        "title": "🏢 Agency IDs (agencyListings)",
                        "type": "array",
                        "description": "🔎 Numeric agency ids to pull portfolios for (e.g. \"4302\") — harvest them with agencySearch first.\n\n📊 **TIER LIMITS:** FREE = 1 id per run · PAID = unlimited.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingSearchType": {
                        "title": "🧭 Portfolio Slice",
                        "enum": [
                            "Auto",
                            "For_Sale",
                            "For_Rent"
                        ],
                        "type": "string",
                        "description": "🧭 Which portfolio slice to fetch. **Auto** (recommended) probes sale → rent → commercial automatically, so commercial-only or rentals-only portfolios are never missed. Set explicitly to pin one slice.",
                        "default": "Auto"
                    },
                    "commercialListings": {
                        "title": "🏬 Commercial Listings",
                        "type": "boolean",
                        "description": "🏬 Fetch the **commercial** portfolio slice (offices, retail, warehouses). With Auto slice, prioritises commercial combos first.",
                        "default": false
                    },
                    "developerId": {
                        "title": "🏗 Developer ID (newProjects)",
                        "type": "string",
                        "description": "🏗 Filter new projects by developer id (returned in every project row's developer object). Works with or without a location."
                    },
                    "completionStatus": {
                        "title": "🚧 Completion Status (newProjects)",
                        "enum": [
                            "Any",
                            "Off_Plan",
                            "Ready"
                        ],
                        "type": "string",
                        "description": "🚧 Filter projects by construction status: Any, Off_Plan (pre-completion — investor territory), or Ready.",
                        "default": "Any"
                    },
                    "projectSortOrder": {
                        "title": "↕️ Project Sort Order (newProjects)",
                        "enum": [
                            "Featured",
                            "Newest",
                            "Price_Low_to_High",
                            "Price_High_to_Low",
                            "Delivery_Date_Earliest",
                            "Delivery_Date_Latest"
                        ],
                        "type": "string",
                        "description": "↕️ Order project results — delivery-date sorts are ideal for launch monitoring."
                    },
                    "projectSlugs": {
                        "title": "📋 Project Slugs or URLs (projectDetails)",
                        "type": "array",
                        "description": "📋 Project slugs (\"developer-slug/project-slug\", returned by newProjects) or public new-project page URLs. Each returns the full dossier: description, payment-plan milestones, government fees, amenities, master plan.\n\n📊 **TIER LIMITS:** FREE = 1 project per run · PAID = unlimited.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "📊 Max Results per Query",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "📊 Cap on rows per search query / per portfolio id. Default 50. Lower = faster + cheaper runs.\n\n📊 **TIER LIMITS:** FREE runs are capped at 25 rows total.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
