# Propertyfinder Agents Scraper (`fatihtahta/propertyfinder-agents-scraper`) Actor

Extract PropertyFinder UAE agent profiles at scale with contact data, brokerage details, sales metrics, market coverage, profile media, and performance signals. Built for enterprise-grade real estate recruiting, lead enrichment, agent intelligence, and automated analytics pipelines.

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

## Pricing

from $0.70 / 1,000 results

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

Learn more: https://docs.apify.com/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 Scraper | Contacts & History

**Slug:** `fatihtahta/propertyfinder-agnets-scraper`

### Overview

PropertyFinder Agents Scraper collects structured public records for real estate agents and companies on Property Finder UAE, including contact details, profile metadata, broker information, ratings, property counts, locations, and transaction history when available. The actor is designed for the public directory experience at www.propertyfinder.ae/en/find-broker, which is useful for understanding the UAE real estate agent and brokerage landscape; see the public [Property Finder UAE](https://www.propertyfinder.ae/) website for source context. Results are delivered as repeatable JSON records that can be used in analytics, enrichment, CRM, and monitoring workflows. The actor supports consistent recurring data acquisition by letting teams define a directory type, market scope, and maximum output size. It is intended for dependable operational collection without making assumptions about completeness beyond what is publicly available at run time.

### Why Use This Actor

- **Market research and analytics teams:** build structured extraction workflows for agent coverage, brokerage presence, ratings, locations, property counts, and public transaction signals.
- **Product and content teams:** normalize directory data for comparison tools, profile indexes, internal catalogs, and content operations.
- **Developers and data engineering teams:** feed predictable JSON records into downstream systems, ETL jobs, warehouse tables, search indexes, and monitoring workflows.
- **Lead generation and enrichment teams:** create targeted prospect lists from public agent and company records, then enrich CRM profiles with current public attributes.
- **Monitoring and competitive tracking teams:** schedule repeatable collection to observe changes in agent activity, company presence, ranking signals, and market coverage over time.

### Common Use Cases

- **Market intelligence:** monitor agent supply, company coverage, ratings, locations, listing counts, and transaction signals across UAE market segments.
- **Lead generation:** build targeted lists of agents or companies by category, location, and specialization.
- **Competitive monitoring:** track public profile and company changes across brokerages, agents, ratings, property counts, and visible market activity.
- **Catalog and directory building:** populate internal databases with structured public agent and brokerage records.
- **Data enrichment:** add current public contact, broker, language, location, rating, and property-count attributes to CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, operational reports, alerts, and trend analysis.

### Quick Start

1. Choose `Agents` or `Companies` in `category`.
2. Add a `location` when you want to focus on a UAE city, community, neighborhood, or building.
3. For agent runs, set `specialization` to the segment you want to collect, such as `Residential For Sale`, `Residential For Rent`, or `Apartment`.
4. Set a small `limit`, such as `10` or `50`, for the first validation run.
5. Run the actor in Apify Console and inspect the first dataset records.
6. Increase the limit, broaden or narrow filters, and schedule recurring runs once the output matches your workflow.

### Input Parameters

The actor accepts a directory category, optional UAE location, optional agent specialization, and maximum record limit.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `category` | string | Directory type to collect. Allowed values: `Agents`, `Companies`. Company searches return company records and do not use `specialization`. | `Agents` |
| `location` | string | UAE city, community, neighborhood, or building, such as `Dubai`, `Business Bay`, `Dubai Marina`, or `Jumeirah Village Circle`. Leave empty to search across all locations. | – |
| `specialization` | string | Agent segment to collect. Applies only when `category` is `Agents`. Accepted examples include `Residential For Sale`, `Residential For Rent`, `Commercial For Sale`, `Commercial For Rent`, `Apartment`, `Villa`, `Townhouse`, `Office Space`, `Warehouse`, `Shop`, `Land`, and `Penthouse`. | `Residential For Sale` |
| `limit` | integer | Maximum number of records to save. Use a small number for validation or sampling; leave blank to continue through the available result set. Minimum: `1`. | `100` |

### Choosing Inputs

Use `category` first to decide whether the run should collect individual agent profiles or company records. Add `location` when you need a focused dataset for a specific UAE market; leave it empty when the goal is broad discovery. For agent runs, use `specialization` to narrow the profile segment and produce a more targeted dataset. Broader inputs improve discovery, while narrower inputs are better for segmented reporting, enrichment, and monitoring. Start with a small `limit` to validate record shape and increase it after confirming the data fits your use case.

### Example Inputs

#### Location and specialization run

```json
{
  "category": "Agents",
  "location": "Business Bay",
  "specialization": "Residential For Sale",
  "limit": 50
}
````

#### Company discovery run

```json
{
  "category": "Companies",
  "location": "Dubai",
  "limit": 100
}
```

#### Broad agent sample

```json
{
  "category": "Agents",
  "specialization": "Apartment",
  "limit": 25
}
```

### Output

#### 9.1 Output destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, this README documents each shape separately based on the provided Example Output. The example below documents the `agent` record shape.

#### 9.2 Record envelope and stable identifiers

Each record includes `record_type`, `id`, `url`, profile attributes, nested related objects, `source_context`, and `fingerprint` when available. The recommended idempotency key is `id`; use `url` or `fingerprint` as secondary keys when reconciling repeated exports or handling historical snapshots. For deduplication and upserts, match on `id` first and compare `url` or `fingerprint` when a downstream system requires an additional uniqueness check. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs. The `source_context` object describes the collection context associated with the saved record, while `fingerprint` provides a compact record-level comparison key.

#### 9.3 Examples

Example: agent (`record_type = "agent"`)

```json
{
  "record_type": "agent",
  "id": 900001,
  "url": "https://www.propertyfinder.ae/en/agent/omar-haddad-900001",
  "slug": "omar-haddad",
  "user_id": 700001,
  "name": "Omar Haddad",
  "email": "omar.haddad@example.com",
  "phone": "+971500000000",
  "whatsapp_phone": "+971500000000",
  "position": "Sales Specialist",
  "bio": "Experienced real estate consultant focused on helping clients evaluate residential investment opportunities, compare neighborhoods, and complete property transactions with clear communication and practical market guidance.",
  "nationality": {
    "code": "AE",
    "name": "United Arab Emirates"
  },
  "superagent": true,
  "verified": true,
  "experience_since": 2024,
  "avg_whatsapp_response_time": 31,
  "ranking": 95,
  "listing_level": 0,
  "average_rating": 5,
  "review_count": 2,
  "rating_distribution": {
    "score1": 0,
    "score2": 0,
    "score3": 0,
    "score4": 0,
    "score5": 2
  },
  "median_listing_quality": 96,
  "total_properties": 17,
  "property_counts": {
    "residential_for_rent": 0,
    "residential_for_sale": 17,
    "commercial_for_rent": 0,
    "commercial_for_sale": 0
  },
  "transactions": {
    "visible": true,
    "count": 7,
    "claimed_sale": 6,
    "claimed_rent": 1,
    "deal_volume": 58750000,
    "sale_average_amount": 9775000,
    "rent_average_amount": 100000,
    "sale_total_amount": 58650000,
    "rent_total_amount": 100000,
    "recent": [
      {
        "location": {
          "path": "1.41.604.12155",
          "community": "Downtown Dubai",
          "tower": "Burj Khalifa Zone 3"
        },
        "dealType": "Sale",
        "price": 5100000,
        "date": "2026-04-03",
        "propertyType": "Apartment",
        "bedroom": "2"
      },
      {
        "location": {
          "path": "1.41.12789",
          "community": "Downtown Dubai",
          "tower": "Society House"
        },
        "dealType": "Sale",
        "price": 3300000,
        "date": "2025-12-05",
        "propertyType": "Apartment",
        "bedroom": "2"
      },
      {
        "location": {
          "path": "1.43.2816",
          "community": "Dubai Festival City",
          "tower": "Al Badia Hillside Village"
        },
        "dealType": "Sale",
        "price": 2200000,
        "date": "2025-11-17",
        "propertyType": "Apartment",
        "bedroom": "2"
      },
      {
        "location": {
          "path": "1.41.11742",
          "community": "Downtown Dubai",
          "tower": "City Center Residences"
        },
        "dealType": "Sale",
        "price": 18250000,
        "date": "2025-11-17",
        "propertyType": "Penthouse",
        "bedroom": "5"
      },
      {
        "location": {
          "path": "1.12.370.13465",
          "community": "Al Barari",
          "tower": "Les 8"
        },
        "dealType": "Sale",
        "price": 27000000,
        "date": "2025-11-17",
        "propertyType": "Villa",
        "bedroom": "6"
      },
      {
        "location": {
          "path": "1.9754.9755.11332",
          "community": "Dubai Harbour",
          "tower": "Palace Beach Residence"
        },
        "dealType": "Sale",
        "price": 2800000,
        "date": "2025-08-01",
        "propertyType": "Apartment",
        "bedroom": "1"
      },
      {
        "location": {
          "path": "1.104.1321.10004",
          "community": "Mohammed Bin Rashid City",
          "tower": "The Terraces"
        },
        "dealType": "Rent",
        "price": 100000,
        "date": "2025-06-18",
        "propertyType": "Apartment",
        "bedroom": "1"
      }
    ]
  },
  "languages": [
    {
      "id": 1,
      "name": "English"
    }
  ],
  "top_locations": [
    {
      "id": 41,
      "name": "Downtown Dubai"
    },
    {
      "id": 49,
      "name": "Dubai Land"
    },
    {
      "id": 36,
      "name": "Business Bay"
    }
  ],
  "image": {
    "url": "https://www.propertyfinder.ae/agent/0/260/200/MODE/example/900001-profile.jpg?ctr=ae",
    "path": "900001/profile.jpg",
    "links": {
      "agentCard": "https://www.propertyfinder.ae/agent/0/170/200/MODE/example/900001-profile.jpg?ctr=ae",
      "agentCardJpg": "https://www.propertyfinder.ae/agent/0/170/200/MODE/example/900001-profile.jpg?ctr=ae",
      "agentCardWebp": "https://www.propertyfinder.ae/agent/0/170/200/MODE/example/900001-profile.webp?ctr=ae",
      "desktop": "https://www.propertyfinder.ae/agent/0/260/200/MODE/example/900001-profile.jpg?ctr=ae",
      "desktop2x": "https://www.propertyfinder.ae/agent/0/520/400/MODE/example/900001-profile.jpg?ctr=ae",
      "desktop2xJpg": "https://www.propertyfinder.ae/agent/0/520/400/MODE/example/900001-profile.jpg?ctr=ae",
      "desktop2xWebp": "https://www.propertyfinder.ae/agent/0/520/400/MODE/example/900001-profile.webp?ctr=ae",
      "desktopJpg": "https://www.propertyfinder.ae/agent/0/260/200/MODE/example/900001-profile.jpg?ctr=ae",
      "desktopWebp": "https://www.propertyfinder.ae/agent/0/260/200/MODE/example/900001-profile.webp?ctr=ae",
      "mobile": "https://www.propertyfinder.ae/agent/0/130/100/MODE/example/900001-profile.jpg?ctr=ae",
      "mobileJpg": "https://www.propertyfinder.ae/agent/0/130/100/MODE/example/900001-profile.jpg?ctr=ae",
      "mobileWebp": "https://www.propertyfinder.ae/agent/0/130/100/MODE/example/900001-profile.webp?ctr=ae",
      "propertyCard": "https://www.propertyfinder.ae/agent/0/38/38/MODE/example/900001-profile.jpg?ctr=ae",
      "propertyCardJpg": "https://www.propertyfinder.ae/agent/0/38/38/MODE/example/900001-profile.jpg?ctr=ae",
      "propertyCardWebp": "https://www.propertyfinder.ae/agent/0/38/38/MODE/example/900001-profile.webp?ctr=ae"
    }
  },
  "broker": {
    "id": 5001,
    "client_id": 5001,
    "slug": "example-prime-real-estate-5001",
    "name": "Example Prime Real Estate LLC",
    "address": "Office 1204, Example Business Tower, Business Bay, Dubai, United Arab Emirates",
    "location": "Dubai",
    "logo": {
      "url": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.jpg",
      "token": "examplelogotoken0000000000000000000000",
      "path": "/media/images/client_logos/5001/example-logo/original.png",
      "links": {
        "desktop": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.jpg",
        "desktop2x": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/520x400.jpg",
        "desktop2xJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/520x400.jpg",
        "desktop2xWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/520x400.webp",
        "desktopJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.jpg",
        "desktopWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.webp",
        "logoSmall": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/178x98.jpg",
        "logoSmallJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/178x98.jpg",
        "logoSmallWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/178x98.webp",
        "mobile": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/130x100.jpg",
        "mobileJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/130x100.jpg",
        "mobileWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/130x100.webp"
      }
    },
    "logo_url": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.jpg",
    "logo_links": {
      "desktop": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.jpg",
      "desktop2x": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/520x400.jpg",
      "desktop2xJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/520x400.jpg",
      "desktop2xWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/520x400.webp",
      "desktopJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.jpg",
      "desktopWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/260x200.webp",
      "logoSmall": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/178x98.jpg",
      "logoSmallJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/178x98.jpg",
      "logoSmallWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/178x98.webp",
      "mobile": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/130x100.jpg",
      "mobileJpg": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/130x100.jpg",
      "mobileWebp": "https://static.shared.propertyfinder.ae/media/images/client_logos/5001/example-logo/130x100.webp"
    }
  },
  "compliances": [
    {
      "type": "other",
      "value": "900001"
    },
    {
      "type": "brn",
      "value": "900001"
    }
  ],
  "search_position": 1,
  "source_context": {
    "page_index": 1,
    "seed_id": "1c4c8c69a3755d9209ba",
    "seed_type": "search",
    "category": "agents",
    "specialization": "Residential For Sale"
  },
  "fingerprint": "exampleagent00000001"
}
```

### Field Reference

#### Agent Records

- **record\_type** *(string, required)*: Record category; `agent` for agent profile records.
- **id** *(integer, required)*: Stable Property Finder agent identifier.
- **url** *(string, required)*: Public agent profile URL.
- **slug** *(string, optional)*: Human-readable profile slug.
- **user\_id** *(integer, optional)*: Public user identifier associated with the profile.
- **name** *(string, required)*: Agent display name.
- **email** *(string, optional)*: Public email address when available.
- **phone / whatsapp\_phone** *(string, optional)*: Public phone and WhatsApp contact numbers when available.
- **position** *(string, optional)*: Agent role or title.
- **bio** *(string, optional)*: Public profile biography.
- **nationality.code / nationality.name** *(string, optional)*: Nationality code and display name.
- **superagent** *(boolean, optional)*: Whether the public profile is marked as a SuperAgent.
- **verified** *(boolean, optional)*: Whether the public profile is marked as verified.
- **experience\_since** *(integer, optional)*: Year the agent experience is reported to start.
- **avg\_whatsapp\_response\_time** *(integer, optional)*: Public WhatsApp response-time value when available.
- **ranking** *(number, optional)*: Public ranking or score value associated with the profile.
- **listing\_level** *(integer, optional)*: Public listing-level value when available.
- **average\_rating** *(number, optional)*: Average public rating.
- **review\_count** *(integer, optional)*: Number of public reviews.
- **rating\_distribution.score1 / score2 / score3 / score4 / score5** *(integer, optional)*: Review count by rating score.
- **median\_listing\_quality** *(number, optional)*: Public listing-quality metric when available.
- **total\_properties** *(integer, optional)*: Total public property count associated with the agent.
- **property\_counts.residential\_for\_rent / residential\_for\_sale / commercial\_for\_rent / commercial\_for\_sale** *(integer, optional)*: Property counts by segment.
- **transactions.visible** *(boolean, optional)*: Whether public transaction details are visible.
- **transactions.count** *(integer, optional)*: Total visible transaction count.
- **transactions.claimed\_sale / transactions.claimed\_rent** *(integer, optional)*: Claimed sale and rent transaction counts.
- **transactions.deal\_volume** *(number, optional)*: Total visible transaction volume in AED when available.
- **transactions.sale\_average\_amount / transactions.rent\_average\_amount** *(number, optional)*: Average visible sale and rent transaction amounts in AED.
- **transactions.sale\_total\_amount / transactions.rent\_total\_amount** *(number, optional)*: Total visible sale and rent transaction amounts in AED.
- **transactions.recent\[].location.path** *(string, optional)*: Location path for a recent transaction.
- **transactions.recent\[].location.community / transactions.recent\[].location.tower** *(string, optional)*: Community and tower names for a recent transaction.
- **transactions.recent\[].dealType** *(string, optional)*: Transaction type, such as sale or rent.
- **transactions.recent\[].price** *(number, optional)*: Transaction price in AED when available.
- **transactions.recent\[].date** *(string, optional)*: Transaction date in `YYYY-MM-DD` format.
- **transactions.recent\[].propertyType** *(string, optional)*: Property type associated with the transaction.
- **transactions.recent\[].bedroom** *(string, optional)*: Bedroom count as displayed by the public source.
- **languages\[].id / languages\[].name** *(integer/string, optional)*: Public language identifiers and names.
- **top\_locations\[].id / top\_locations\[].name** *(integer/string, optional)*: Public top-location identifiers and names.
- **image.url / image.path** *(string, optional)*: Agent image URL and path when available.
- **image.links.agentCard / agentCardJpg / agentCardWebp** *(string, optional)*: Agent-card image variants.
- **image.links.desktop / desktop2x / desktop2xJpg / desktop2xWebp / desktopJpg / desktopWebp** *(string, optional)*: Desktop image variants.
- **image.links.mobile / mobileJpg / mobileWebp** *(string, optional)*: Mobile image variants.
- **image.links.propertyCard / propertyCardJpg / propertyCardWebp** *(string, optional)*: Property-card image variants.
- **broker.id / broker.client\_id** *(integer, optional)*: Broker identifiers associated with the agent.
- **broker.slug / broker.name / broker.address / broker.location** *(string, optional)*: Broker public profile details.
- **broker.logo.url / broker.logo.token / broker.logo.path** *(string, optional)*: Broker logo metadata when available.
- **broker.logo.links.desktop / desktop2x / desktop2xJpg / desktop2xWebp / desktopJpg / desktopWebp** *(string, optional)*: Broker desktop logo variants.
- **broker.logo.links.logoSmall / logoSmallJpg / logoSmallWebp** *(string, optional)*: Small broker logo variants.
- **broker.logo.links.mobile / mobileJpg / mobileWebp** *(string, optional)*: Mobile broker logo variants.
- **broker.logo\_url** *(string, optional)*: Convenience URL for the broker logo.
- **broker.logo\_links.desktop / desktop2x / desktop2xJpg / desktop2xWebp / desktopJpg / desktopWebp** *(string, optional)*: Convenience broker desktop logo variants.
- **broker.logo\_links.logoSmall / logoSmallJpg / logoSmallWebp** *(string, optional)*: Convenience small broker logo variants.
- **broker.logo\_links.mobile / mobileJpg / mobileWebp** *(string, optional)*: Convenience mobile broker logo variants.
- **compliances\[].type / compliances\[].value** *(string, optional)*: Public compliance or registration values.
- **search\_position** *(integer, optional)*: Position of the record in the collected result set.
- **source\_context.page\_index** *(integer, optional)*: Result page index associated with the record.
- **source\_context.seed\_id / source\_context.seed\_type** *(string, optional)*: Collection seed metadata.
- **source\_context.category / source\_context.specialization** *(string, optional)*: Input context associated with the record.
- **fingerprint** *(string, optional)*: Compact record fingerprint for comparison and deduplication.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, or UI experiments.
- **Optional fields:** null-check in downstream code because public records can differ in completeness.
- **Deduplication:** use `id` as the strongest stable key, with `url` or `fingerprint` as secondary comparison keys when needed.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one `category` per run when you need clean separation between agents and companies.
- Add a `location` when you need a focused market segment, such as Dubai Marina or Business Bay.
- Leave `location` empty when the goal is broad UAE discovery.
- Use `specialization` only for agent runs; company runs ignore it.
- Add filters gradually to understand how each field changes coverage.
- Use stable identifiers for deduplication when storing results over time.

### How to Run on Apify

1. Open the Actor in Apify Console.
2. Configure `category`, `location`, and `specialization` for the target scope.
3. Set `limit` to the maximum number of outputs to collect.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and inspect the first records.
6. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Schedule runs to keep agent and company datasets fresh for recurring reporting, enrichment, or monitoring workflows. Use a cadence that matches your operational needs and the level of change you expect in the target market.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **CRM enrichment:** sync public agent, broker, contact, location, and rating attributes into lead or account records.
- **Google Sheets or Airtable:** review smaller agent and company datasets with sales, research, or operations teams.
- **Webhooks:** trigger validation, notification, or ingestion workflows after each completed run.
- **Data enrichment pipelines:** join Property Finder public profile attributes with existing CRM, BI, or research datasets.
- **BI dashboards:** monitor agent counts, company coverage, ratings, property counts, and transaction signals over time.
- **API access:** ingest JSON records directly into internal services, warehouse loaders, or search indexes.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for operational analysis, reporting, and data delivery.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into internal systems
- **BI and warehouses:** for reporting, dashboards, and historical analysis

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what www.propertyfinder.ae/en/find-broker publicly exposes at run time.
- Some optional fields may be missing on sparse or limited public records.
- Very broad searches may take longer or require higher limits.
- Target-side changes can affect field availability, naming, or visible results.
- Regional, account, or availability differences may change what records are visible.
- Company searches do not use the `specialization` field.

### Troubleshooting

- **No results returned:** check filter values, location spelling, category selection, and whether the target has matching public records.
- **Fewer results than expected:** broaden filters, raise `limit`, or verify that enough matching public records exist.
- **Some fields are empty:** optional fields depend on what each public record provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller segments.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public Property Finder UAE agent and company records. Agent records can include contact details, broker information, ratings, languages, top locations, property counts, profile metadata, and public transaction history when available.

#### Can I filter by location, category, date, price, or other criteria?

You can filter by `category`, `location`, and agent `specialization`. The input schema does not include date, price, sort, or radius filters.

#### Why did I receive fewer results than my limit?

The run may finish with fewer records when the selected category, location, and specialization contain fewer matching public results than the requested `limit`.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cadence for monitoring, reporting, or enrichment workflows.

#### How do I avoid duplicates across runs?

Use `id` as the primary idempotency key. For additional checks, compare `url` or `fingerprint` when those fields are present.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support JSON, CSV, Excel, and other export formats from the dataset view.

#### Does this actor collect private data?

No. It is intended to collect publicly available information visible on Property Finder UAE public directory records.

#### What should I include when reporting an issue?

Include the input used, the run ID, expected versus actual behavior, and a small output sample when available. Redact any information you do not want to share.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available real estate agent and company directory information from www.propertyfinder.ae/en/find-broker for legitimate business purposes, including:

- **Real estate** research and market analysis
- **Lead enrichment and account research**
- **Competitive monitoring and operational reporting**

This section is informational and not legal advice. Users are responsible for ensuring their use of collected data complies with applicable laws, regulations, and platform terms.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, such as GDPR and CCPA

### Support

For help, use the actor page or Issues section. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample if it helps illustrate the issue.

# Actor input Schema

## `category` (type: `string`):

Choose Agents to collect individual real estate agent profiles, or Companies to collect real estate company records.

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

Enter a UAE city, community, neighborhood, or building, such as Dubai, Business Bay, Dubai Marina, or Jumeirah Village Circle. Leave this empty to search across all available locations.

## `specialization` (type: `string`):

Choose the agent segment to collect. This setting only applies when the directory type is Agents; company searches do not use specialization. Use Residential For Sale, Residential For Rent, Commercial For Sale, Commercial For Rent, or a property type such as Apartment, Villa, Townhouse, Office Space, Warehouse, Shop, Land, or Penthouse.

## `limit` (type: `integer`):

Set the maximum number of records to save. Use a smaller value such as 10 or 50 for quick validation, or leave the field empty when you want the actor to continue through the available result set.

## Actor input object example

```json
{
  "category": "Agents",
  "specialization": "Residential For Sale",
  "limit": 100
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "category": "Agents",
    "specialization": "Residential For Sale",
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/propertyfinder-agents-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 = {
    "category": "Agents",
    "specialization": "Residential For Sale",
    "limit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/propertyfinder-agents-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 '{
  "category": "Agents",
  "specialization": "Residential For Sale",
  "limit": 100
}' |
apify call fatihtahta/propertyfinder-agents-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Propertyfinder Agents Scraper",
        "description": "Extract PropertyFinder UAE agent profiles at scale with contact data, brokerage details, sales metrics, market coverage, profile media, and performance signals. Built for enterprise-grade real estate recruiting, lead enrichment, agent intelligence, and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "PPYNXthSiV0g5KkPT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~propertyfinder-agents-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-propertyfinder-agents-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/fatihtahta~propertyfinder-agents-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-propertyfinder-agents-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/fatihtahta~propertyfinder-agents-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-propertyfinder-agents-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": {
                    "category": {
                        "title": "Choose Agents or Companies",
                        "enum": [
                            "Agents",
                            "Companies"
                        ],
                        "type": "string",
                        "description": "Choose Agents to collect individual real estate agent profiles, or Companies to collect real estate company records."
                    },
                    "location": {
                        "title": "Filter by UAE Location",
                        "type": "string",
                        "description": "Enter a UAE city, community, neighborhood, or building, such as Dubai, Business Bay, Dubai Marina, or Jumeirah Village Circle. Leave this empty to search across all available locations."
                    },
                    "specialization": {
                        "title": "Filter by Agent Specialization",
                        "type": "string",
                        "description": "Choose the agent segment to collect. This setting only applies when the directory type is Agents; company searches do not use specialization. Use Residential For Sale, Residential For Rent, Commercial For Sale, Commercial For Rent, or a property type such as Apartment, Villa, Townhouse, Office Space, Warehouse, Shop, Land, or Penthouse."
                    },
                    "limit": {
                        "title": "Set Maximum Records",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Set the maximum number of records to save. Use a smaller value such as 10 or 50 for quick validation, or leave the field empty when you want the actor to continue through the available result set."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
