# Propertyfinder Agents & Brokers Scraper (`solidcode/propertyfinder-agents-brokers-scraper`) Actor

\[💰 $0.9 / 1K] Extract real estate agents and brokerage profiles from Propertyfinder (UAE, Qatar, Bahrain). Get names, phones, languages, nationalities, listing counts, brokerage affiliation, ratings and more. Search by country, emirate, and keyword, or paste direct Propertyfinder search URLs.

- **URL**: https://apify.com/solidcode/propertyfinder-agents-brokers-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 5 total users, 3 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 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.

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

## Propertyfinder Agents & Brokers Scraper

Extract real estate agent and brokerage profiles from Propertyfinder across the UAE, Qatar, and Bahrain. Get names, phone numbers, emails, WhatsApp, languages, nationalities, listing counts, brokerage affiliations, ratings, and more — with optional deep enrichment for bios, awards, service areas, and transaction history.

### Why This Scraper?

- **Full regional coverage** — UAE (~14,500 agents, ~4,000 brokerages), Qatar, and Bahrain in a single actor
- **Two record types in one dataset** — collect individual agents, entire brokerages, or both; every row is tagged with a `recordType` discriminator so you can filter in Google Sheets, Excel, or your database
- **Guided filters, not raw URLs** — pick Country, Emirate, and a name keyword from a dropdown; competitors force you to hand-craft URLs
- **Direct contact fields** — phone, mobile, email, WhatsApp, LinkedIn — populated directly from Propertyfinder's data, no guessing or enrichment APIs required
- **Emirate-level targeting for UAE** — narrow to Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah, Umm Al Quwain, Fujairah, or Al Ain
- **Deep profile enrichment (optional)** — flip `fetchDetails` on to pull bios, areas of expertise, transaction history, top locations, awards, and branch agent rosters
- **Paste-a-URL fallback** — already have a filtered Propertyfinder search ready in your browser? Just paste it into Start URLs
- **Pay-per-result pricing** — $0.90 per 1,000 results, no compute charges, no minimums

### Use Cases

**Real Estate CRM & Lead Generation**
- Build targeted outreach lists of Dubai property agents by language or nationality
- Enrich your CRM with fresh contact info (phone, email, WhatsApp, LinkedIn)
- Find "SuperAgent" top performers worth recruiting or partnering with
- Identify agents at specific brokerages for B2B sales (PropTech, CRM, marketing tools)

**Market Research & Competitor Tracking**
- Track brokerage headcount and listing volume across the UAE
- Benchmark agent activity by emirate — Dubai vs Abu Dhabi vs Sharjah
- Monitor new brokerages entering Qatar and Bahrain markets
- Analyze agent language mix and nationality distribution for a given city

**Recruitment & Talent Sourcing**
- Headhunt experienced agents by years of experience, SuperAgent status, and transaction count
- Build a shortlist of Arabic- or Russian-speaking agents in Dubai
- Source specialists by area of expertise (Downtown Dubai, Palm Jumeirah, Business Bay)

**Real Estate Investor & Buyer Intel**
- Find agents specialising in your target neighbourhood
- Compare agent ratings and review counts before picking representation
- Surface brokerages with the deepest listing inventory in a given emirate

**Data Enrichment & ML**
- Populate directories, lead-gen marketplaces, or review platforms with structured agent data
- Train models on real estate agent profiles, languages, and transaction patterns

### Getting Started

#### Simplest: All UAE Agents in Dubai

```json
{
    "country": "ae",
    "emirate": "dubai",
    "maxResults": 200
}
````

#### Brokerages in Abu Dhabi

```json
{
    "searchType": "brokers",
    "country": "ae",
    "emirate": "abu-dhabi",
    "maxResults": 100
}
```

#### Agents by Name Keyword

Find every agent whose name or bio matches a keyword — e.g. everyone associated with Emaar:

```json
{
    "searchType": "agents",
    "country": "ae",
    "searchQuery": "Emaar",
    "maxResults": 50
}
```

#### Full Profile Enrichment

Turn on `fetchDetails` to capture bios, awards, areas of expertise, transaction history, and top locations for every result:

```json
{
    "searchType": "agents",
    "country": "ae",
    "emirate": "dubai",
    "fetchDetails": true,
    "maxResults": 100
}
```

#### Paste a Propertyfinder URL Directly

Already have a filtered search ready in your browser? Paste the URL — or a single agent/brokerage profile URL — straight in:

```json
{
    "startUrls": [
        "https://www.propertyfinder.ae/en/find-agent/search?category_id=2&location_id=1&text=diana",
        "https://www.propertyfinder.ae/en/agent/dmitry-rushika-235169",
        "https://www.propertyfinder.ae/en/broker/driven-properties-948"
    ],
    "fetchDetails": true,
    "maxResults": 200
}
```

When Start URLs are provided they override the Country, Emirate, and Name Search filters.

#### Entire Country (No Cap)

Set `maxResults` to `0` to collect every available profile. UAE currently indexes around 14,500 agents and 4,000 brokerages:

```json
{
    "searchType": "brokers",
    "country": "bh",
    "maxResults": 0
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchType` | string (enum) | `"agents"` | What to collect. `agents` = individual real estate agents, `brokers` = entire brokerage companies. Options: **Agents (individuals)**, **Brokers (companies)**. Ignored when `startUrls` is provided. |
| `country` | string (enum) | `"ae"` | Propertyfinder regional site to search. Options: **United Arab Emirates** (`ae`), **Qatar** (`qa`), **Bahrain** (`bh`). |
| `emirate` | string (enum) | `"all"` | UAE-only filter narrowing to a single emirate. Options: **All (whole country)**, **Dubai**, **Abu Dhabi**, **Sharjah**, **Ajman**, **Ras Al Khaimah**, **Umm Al Quwain**, **Fujairah**, **Al Ain**. Ignored for Qatar and Bahrain. |
| `searchQuery` | string | `""` | Filter by agent name, brokerage name, or keyword (e.g. `"diana"`, `"allsopp"`, `"Emaar"`). Leave empty to return everyone matching Country and Emirate. |
| `fetchDetails` | boolean | `false` | Visit each profile page to capture extra fields — bio, areas of expertise, transaction history, top locations, awards, branch agents. Slower but more complete. |

#### Advanced Search (optional)

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Power-user input. Paste Propertyfinder search URLs or profile URLs directly (agent search, broker search, individual agent or brokerage profile). Overrides Country, Emirate, and Name Search when provided. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `500` | Maximum profiles to collect per search. Set to `0` to collect every available profile. Results are collected in full pages of 20, so the actor may overshoot this cap by up to 19 records on the final page (it never trims mid-page). |

### Output

Every dataset row carries a `recordType` field so you can filter or split a mixed dataset into agents and brokerages.

#### Agent example (`recordType: "agent"`)

```json
{
    "recordType": "agent",
    "agentId": 114574,
    "name": "Kianoush Darban",
    "jobTitle": "Senior Property Consultant",
    "phone": "+971501234567",
    "mobile": "+971501234567",
    "whatsapp": "+971501234567",
    "email": "kianoush@drivenproperties.com",
    "bio": "Kianoush has over 10 years of experience in Dubai real estate...",
    "photoUrl": "https://static.shared.propertyfinder.ae/agents/114574.jpg",
    "linkedinUrl": "https://linkedin.com/in/kianoush-darban",
    "licenseNumber": "RERA-12345",
    "nationality": "Iran",
    "languages": ["English", "Farsi", "Arabic"],
    "yearsOfExperience": 10,
    "rating": 4.8,
    "reviewsCount": 42,
    "superAgent": true,
    "verified": true,
    "listingsForSale": 23,
    "listingsForRent": 9,
    "totalListings": 32,
    "transactionsCount": 87,
    "topLocations": ["Downtown Dubai", "Business Bay", "Palm Jumeirah"],
    "specializations": ["Downtown Dubai", "Business Bay", "Palm Jumeirah"],
    "serviceAreas": ["Downtown Dubai", "Business Bay", "Palm Jumeirah"],
    "brokerageId": 948,
    "brokerageName": "Driven Properties",
    "brokerageLogoUrl": "https://static.shared.propertyfinder.ae/brokers/948.png",
    "brokerageUrl": "https://www.propertyfinder.ae/en/broker/driven-properties-948",
    "brokerageAddress": "Downtown Dubai",
    "city": "Dubai",
    "country": "ae",
    "countryName": "United Arab Emirates",
    "emirateSlug": "dubai",
    "profileUrl": "https://www.propertyfinder.ae/en/agent/kianoush-darban-114574",
    "searchQuery": null,
    "pageNumber": 1,
    "positionOnPage": 3,
    "scrapedAt": "2026-04-24T12:34:56+00:00"
}
```

#### Brokerage example (`recordType: "broker"`)

```json
{
    "recordType": "broker",
    "brokerageId": 948,
    "brokerageName": "Driven Properties",
    "name": "Driven Properties",
    "phone": "+97145551234",
    "email": "info@drivenproperties.com",
    "address": "Downtown Dubai, Emaar Square",
    "brokerageAddress": "Downtown Dubai, Emaar Square",
    "city": "Dubai",
    "licenseNumber": "ORN-12345",
    "licenseLabel": "RERA ORN",
    "description": "Driven Properties is a boutique Dubai real estate agency...",
    "totalAgents": 87,
    "totalSuperAgents": 12,
    "totalBranches": 3,
    "isMainBranch": true,
    "isVerified": true,
    "totalListings": 1840,
    "listingsForSale": 1120,
    "listingsForRent": 720,
    "transactionsCount": 512,
    "awards": [{"year": 2024, "name": "Top Brokerage"}],
    "brokerageLogoUrl": "https://static.shared.propertyfinder.ae/brokers/948.png",
    "logoUrl": "https://static.shared.propertyfinder.ae/brokers/948.png",
    "profileUrl": "https://www.propertyfinder.ae/en/broker/driven-properties-948",
    "urlSlug": "driven-properties-948",
    "country": "ae",
    "countryName": "United Arab Emirates",
    "emirateSlug": "dubai",
    "pageNumber": 1,
    "positionOnPage": 5,
    "scrapedAt": "2026-04-24T12:34:56+00:00"
}
```

#### All Available Fields

Fields marked **A** appear on agent records, **B** on brokerage records. Fields marked **A / B** appear on both.

| Field | Type | Applies to | Description |
|-------|------|------------|-------------|
| `recordType` | string | A / B | `"agent"` or `"broker"` — filter a mixed dataset |
| `id` | number | A / B | Propertyfinder internal id |
| `agentId` | number | A | Numeric agent identifier |
| `brokerageId` | number | A / B | Numeric brokerage identifier |
| `brokerageClientId` | number | A / B | Alternate brokerage client id used by the API |
| `slug` | string | A | URL slug used in the profile URL |
| `urlSlug` | string | B | URL slug used in the brokerage profile URL |
| `name` | string | A / B | Agent or brokerage name |
| `jobTitle` | string | A | Agent job title |
| `position` | string | A | Same as `jobTitle` (alternate key) |
| `phone` | string | A / B | Primary phone number |
| `mobile` | string | A | Mobile phone (same value as `phone` on Propertyfinder) |
| `whatsapp` | string | A | WhatsApp contact number |
| `whatsappPhone` | string | A | Alternate WhatsApp field |
| `email` | string | A / B | Contact email |
| `bio` | string | A | Agent biography |
| `photoUrl` | string | A | Agent profile photo URL |
| `linkedinUrl` | string | A | Agent LinkedIn profile URL |
| `linkedinAddress` | string | A | Same as `linkedinUrl` (alternate key) |
| `licenseNumber` | string | A / B | RERA or regional regulator license |
| `licenseLabel` | string | B | License category label |
| `compliances` | array | A | Regulator compliance badges |
| `nationality` | string | A | Agent nationality |
| `languages` | string\[] | A | Languages spoken |
| `yearsOfExperience` | number | A | Computed from `experienceSince` |
| `experienceSince` | number | A | Year the agent started in real estate |
| `rating` | number | A | Star rating (0–5) |
| `averageRating` | number | A | Same as `rating` (alternate key) |
| `reviewsCount` | number | A | Total number of reviews |
| `reviewCount` | number | A | Same as `reviewsCount` (alternate key) |
| `ratingDistribution` | object | A | Breakdown of ratings by star count |
| `superAgent` | boolean | A | `true` if Propertyfinder's SuperAgent badge |
| `superAgentAwardImageUrl` | string | A | SuperAgent award image URL |
| `verified` | boolean | A | Propertyfinder verification flag |
| `isVerified` | boolean | B | Brokerage verification flag |
| `totalAgents` | number | B | Total agents at the brokerage |
| `totalSuperAgents` | number | B | SuperAgents at the brokerage |
| `totalBranches` | number | B | Number of branches |
| `isMainBranch` | boolean | B | Whether this is the main branch |
| `parentId` | number | B | Parent brokerage id (for branches) |
| `listingsForSale` | number | A / B | Properties listed for sale |
| `listingsForRent` | number | A / B | Properties listed for rent |
| `totalListings` | number | A / B | Combined listing total |
| `transactionsCount` | number | A / B | Recorded transactions |
| `claimedTransactionsSale` | number | A | Self-reported sale transactions |
| `claimedTransactionsRent` | number | A | Self-reported rent transactions |
| `claimedTransactionsDealVolume` | number | A | Self-reported deal volume |
| `avgWhatsappResponseTime` | number | A | Average WhatsApp response time |
| `ranking` | number | A / B | Site ranking metric |
| `listingLevel` | string | A | Listing tier |
| `topLocations` | string\[] | A | Top neighbourhoods the agent covers |
| `specializations` | string\[] | A | Areas of expertise (with `fetchDetails`) |
| `serviceAreas` | string\[] | A | Service area list (with `fetchDetails`) |
| `areasOfExpertise` | string\[] | A | Full detail list (with `fetchDetails`) |
| `fhmCount` | number | A | First Half Million metric (with `fetchDetails`) |
| `propertyTotalCount` | number | A | Live property count (with `fetchDetails`) |
| `locationGroupedTransactions` | object | A | Transaction history grouped by location (with `fetchDetails`) |
| `broker` | object | A | Nested brokerage snapshot (id, name, logo, address, phone, email) |
| `brokerageName` | string | A / B | Brokerage name |
| `brokerageLogoUrl` | string | A / B | Brokerage logo URL |
| `logoUrl` | string | B | Same as `brokerageLogoUrl` (alternate key) |
| `brokerageUrl` | string | A | Brokerage profile URL |
| `brokerageAddress` | string | A / B | Brokerage street address |
| `address` | string | B | Brokerage street address (alternate key) |
| `city` | string | A / B | City / location name |
| `locationId` | number | B | Propertyfinder internal location id |
| `description` | string | B | Brokerage description (richer with `fetchDetails`) |
| `awards` | array | B | Brokerage awards (with `fetchDetails`) |
| `branchAgentsPreview` | array | B | First 20 agent stubs on the brokerage page (with `fetchDetails`) |
| `country` | string | A / B | Country code (`ae`, `qa`, `bh`) |
| `countryName` | string | A / B | Human-readable country name |
| `emirateSlug` | string | A / B | Selected UAE emirate slug (UAE only) |
| `emirateLocationId` | number | A / B | Selected UAE location id (UAE only) |
| `url` | string | A / B | Profile URL (same as `profileUrl`) |
| `profileUrl` | string | A / B | Full profile URL |
| `searchQuery` | string | A / B | The `searchQuery` input used |
| `searchUrl` | string | A / B | The search URL used |
| `pageNumber` | number | A / B | Page number the record came from |
| `positionOnPage` | number | A / B | 1-based position on that page |
| `scrapedAt` | string | A / B | ISO-8601 timestamp (UTC) |

### Tips for Best Results

- **UAE has the richest data.** The UAE market indexes around 14,500 agents and 4,000 brokerages with full contact fields; Qatar and Bahrain have smaller directories with slightly sparser bios.
- **Emirate filter is UAE-only.** Setting `emirate` has no effect on Qatar or Bahrain runs — leave it as `"all"` for those countries.
- **Turn on `fetchDetails` for research, leave it off for lead lists.** Detail mode roughly triples the time per result because each profile page is visited individually, but it unlocks bios, awards, transaction history, and service areas.
- **Name search is fuzzy.** `"Emaar"` matches agents whose name, bio, or brokerage mentions Emaar — useful for loose keyword matching, not exact-match lookup.
- **`maxResults` overshoots the last page.** The actor collects results in full pages of 20. Asking for 45 results returns 60 (three full pages). This keeps every page intact — the dataset never contains half a page of results.
- **`maxResults: 0` means unlimited.** Use it to dump an entire country's directory in one run.
- **Multi-city brokerages may appear in more than one emirate.** A brokerage with offices in Dubai and Abu Dhabi appears when you filter on either city.
- **Paste URLs for power use.** If the UI dropdowns don't give you the exact filter you want, find the search on Propertyfinder's website, copy the URL, and paste it into Start URLs — the actor understands agent searches, broker searches, and individual profile pages.

### Pricing

**$0.9 per 1,000 results** — pay only for successfully collected profiles.

No compute charges — you only pay per result returned.

| Results | Cost |
|---------|------|
| 100 | $0.09 |
| 1,000 | $0.90 |
| 10,000 | $9.00 |

### Integrations

Export data as JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Apify API** — Full programmatic access to runs and datasets
- **Webhooks** — Get notified when a run completes so downstream systems can ingest new leads in real time
- **Google Sheets** — Export directly to a spreadsheet for sales or ops teams
- **Zapier** / **Make** / **n8n** — Push each new agent or brokerage into your CRM, Slack, Airtable, HubSpot, Pipedrive, or Notion
- **Slack** / **Email** — Notifications on run completion

### Legal & Ethical Use

This actor collects publicly available agent and brokerage profiles from Propertyfinder for legitimate business intelligence, market research, recruitment, and lead-generation purposes. You are responsible for complying with applicable data protection laws (including UAE PDPL, Qatar PDPPL, Bahrain PDPL, and GDPR where relevant) and with Propertyfinder's Terms of Service when using the extracted data. Do not use collected contact information for spam, harassment, unsolicited marketing at scale, or any illegal purpose. Always respect opt-out and unsubscribe requests from individuals whose data you contact.

# Actor input Schema

## `searchType` (type: `string`):

Collect individual real estate agents (from /en/find-agent/search) or entire brokerage companies (from /en/find-broker/search). Ignored when you provide Start URLs below.

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

Propertyfinder regional site to search. Only markets where Propertyfinder currently operates an agent/broker directory are listed.

## `emirate` (type: `string`):

Restrict results to agents or brokers active in a single UAE emirate. Applies only when Country is United Arab Emirates; ignored for Qatar and Bahrain. Leave as 'All' to search the whole country.

## `searchQuery` (type: `string`):

Filter by agent name, brokerage name, or keyword (e.g. 'diana', 'allsopp', 'Emaar'). Leave empty to return everyone matching your country and emirate.

## `fetchDetails` (type: `boolean`):

Also visit each agent's or brokerage's profile page to capture extra fields like bio, full transaction history, areas of expertise, awards, and description. Slower and more expensive but more complete. Leave off for lists/leads; turn on for research/enrichment.

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

Power-user input. Paste Propertyfinder URLs directly — agent search (e.g. https://www.propertyfinder.ae/en/find-agent/search?text=diana\&category\_id=2\&location\_id=1), broker search (/en/find-broker/search), or individual agent/broker profile pages. When provided these override the Country / Emirate / Name Search filters above.

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

Maximum number of agent or broker profiles to collect per search. Set to 0 to collect every available profile (UAE currently indexes ~14,500 agents and ~4,000 brokerages). Results are collected in full pages of 20, so the actor may overshoot this cap by a few records on the final page.

## Actor input object example

```json
{
  "searchType": "agents",
  "country": "ae",
  "emirate": "all",
  "fetchDetails": false,
  "startUrls": [],
  "maxResults": 500
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of agents or brokerages with key fields — name, brokerage, phone, listings counts.

## `details` (type: `string`):

Full per-profile fields including languages, nationality, rating, experience, and social links.

## `brokerages` (type: `string`):

Brokerage-only records with agent counts, branches, license, and total listings.

# 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 = {
    "searchType": "agents",
    "country": "ae",
    "emirate": "all",
    "searchQuery": "",
    "fetchDetails": false,
    "startUrls": [],
    "maxResults": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/propertyfinder-agents-brokers-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 = {
    "searchType": "agents",
    "country": "ae",
    "emirate": "all",
    "searchQuery": "",
    "fetchDetails": False,
    "startUrls": [],
    "maxResults": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/propertyfinder-agents-brokers-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 '{
  "searchType": "agents",
  "country": "ae",
  "emirate": "all",
  "searchQuery": "",
  "fetchDetails": false,
  "startUrls": [],
  "maxResults": 500
}' |
apify call solidcode/propertyfinder-agents-brokers-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Propertyfinder Agents & Brokers Scraper",
        "description": "[💰 $0.9 / 1K] Extract real estate agents and brokerage profiles from Propertyfinder (UAE, Qatar, Bahrain). Get names, phones, languages, nationalities, listing counts, brokerage affiliation, ratings and more. Search by country, emirate, and keyword, or paste direct Propertyfinder search URLs.",
        "version": "1.0",
        "x-build-id": "5NxKLhAaBUjR4N0Lx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~propertyfinder-agents-brokers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-propertyfinder-agents-brokers-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/solidcode~propertyfinder-agents-brokers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-propertyfinder-agents-brokers-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/solidcode~propertyfinder-agents-brokers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-propertyfinder-agents-brokers-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": {
                    "searchType": {
                        "title": "What to Scrape",
                        "enum": [
                            "agents",
                            "brokers"
                        ],
                        "type": "string",
                        "description": "Collect individual real estate agents (from /en/find-agent/search) or entire brokerage companies (from /en/find-broker/search). Ignored when you provide Start URLs below.",
                        "default": "agents"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "ae",
                            "qa",
                            "bh"
                        ],
                        "type": "string",
                        "description": "Propertyfinder regional site to search. Only markets where Propertyfinder currently operates an agent/broker directory are listed.",
                        "default": "ae"
                    },
                    "emirate": {
                        "title": "Emirate / City (UAE only)",
                        "enum": [
                            "all",
                            "dubai",
                            "abu-dhabi",
                            "sharjah",
                            "ajman",
                            "ras-al-khaimah",
                            "umm-al-quwain",
                            "fujairah",
                            "al-ain"
                        ],
                        "type": "string",
                        "description": "Restrict results to agents or brokers active in a single UAE emirate. Applies only when Country is United Arab Emirates; ignored for Qatar and Bahrain. Leave as 'All' to search the whole country.",
                        "default": "all"
                    },
                    "searchQuery": {
                        "title": "Name Search",
                        "type": "string",
                        "description": "Filter by agent name, brokerage name, or keyword (e.g. 'diana', 'allsopp', 'Emaar'). Leave empty to return everyone matching your country and emirate."
                    },
                    "fetchDetails": {
                        "title": "Fetch Full Profile Details",
                        "type": "boolean",
                        "description": "Also visit each agent's or brokerage's profile page to capture extra fields like bio, full transaction history, areas of expertise, awards, and description. Slower and more expensive but more complete. Leave off for lists/leads; turn on for research/enrichment.",
                        "default": false
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Power-user input. Paste Propertyfinder URLs directly — agent search (e.g. https://www.propertyfinder.ae/en/find-agent/search?text=diana&category_id=2&location_id=1), broker search (/en/find-broker/search), or individual agent/broker profile pages. When provided these override the Country / Emirate / Name Search filters above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of agent or broker profiles to collect per search. Set to 0 to collect every available profile (UAE currently indexes ~14,500 agents and ~4,000 brokerages). Results are collected in full pages of 20, so the actor may overshoot this cap by a few records on the final page.",
                        "default": 500
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
