# Property Finder UAE Agent Scraper (`khadinakbar/propertyfinder-agent-scraper`) Actor

Extract public Property Finder UAE agent-directory profiles with agencies, phones, office addresses, and images. Use for UAE broker research; not property listings. $0.004 per agent returned plus usage.

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

## Pricing

from $4.00 / 1,000 agent profile returneds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

# README

## Property Finder UAE Agent Scraper

Extract public real-estate-agent directory profiles from Property Finder UAE into clean JSON, CSV, Excel, or the Apify API. Use it to build UAE brokerage rosters, research public agent coverage, enrich a CRM with public business contact details, or monitor directory changes over time.

This Actor is deliberately scoped to the public **Property Finder UAE agent directory**. It is not a property-listing scraper, does not bypass account gates, and does not discover private contact data. Every returned record is a public directory card with the source page preserved for auditability.

### When to use this Actor

Use it when you need a repeatable export of Property Finder UAE agent profiles filtered in the website UI. Start by opening the Property Finder agent directory, apply the filters you need, then paste the resulting URL into `searchUrls`.

It is especially useful for:

- Building a public roster of agents and brokerages for UAE market research.
- Finding brokers operating in a directory segment already defined by a Property Finder search URL.
- Tracking public phone, agency, address, and image changes in recurring runs.
- Feeding normalized, deduplicated agent data into a CRM, warehouse, or AI workflow.

Do not use it for property listings, private emails, or individual profile detail pages. For listings, use a Property Finder listings scraper instead.

### Output

One validated record is saved for every public directory card returned by Property Finder.

| Field | Description |
| --- | --- |
| `agentId` | Deterministic public-directory identity key for deduplication across runs. |
| `agentName` | Agent name shown on the directory card. |
| `agencyName` | Brokerage or agency shown on the card, when available. |
| `phone` | Public telephone number displayed by Property Finder, when available. |
| `officeAddress` | Public office address attached to the card, when available. |
| `agentImageUrl` | Public agent image URL. |
| `agencyImageUrl` | Public brokerage logo URL. |
| `directoryPosition` | Position from Property Finder's public structured data, when supplied. |
| `searchUrl` | Exact directory page used as the source. |
| `scrapedAt` | UTC ISO-8601 collection timestamp. |

The Actor also writes `OUTPUT` and `RUN_SUMMARY` to the default key-value store. Those records report `COMPLETE`, `PARTIAL`, `VALID_EMPTY`, `INVALID_INPUT`, or an honest upstream failure; this is helpful for scheduled runs and AI agents.

### How to scrape Property Finder UAE agents

1. Open [Property Finder's agent directory](https://www.propertyfinder.ae/en/find-agent/search).
2. Set any public filters in Property Finder, then copy the resulting directory URL.
3. Put that URL into `searchUrls`.
4. Set `maxResults`; it is a hard cap across all URLs.
5. Set `maxPagesPerSearch` if you need to limit pagination further.
6. Run the Actor and export the default dataset.

#### Example input

```json
{
  "searchUrls": [
    "https://www.propertyfinder.ae/en/find-agent/search"
  ],
  "maxResults": 50,
  "maxPagesPerSearch": 10
}
```

The Actor preserves query parameters already in a supplied directory URL and adds only the page number while paging. A single URL can therefore represent a filtered directory search.

### Pricing

Pricing uses Apify Pay per Event + platform usage:

- `apify-actor-start`: $0.00005 when a run starts.
- `agent-profile-returned`: **$0.004** for each validated public agent profile saved to the dataset.
- Platform compute and proxy usage are passed through separately by Apify.

With `maxResults: 50`, profile events are capped at $0.20 before platform usage. The Actor never charges a profile event before that profile has been validated and written to the dataset.

### Use with AI agents

Tool scope: scrape public Property Finder UAE agent-directory pages for public agency, phone, address, and image information. Use it for UAE broker research or public-agent rosters; do not use it for property listings. It returns one compact agent record per result and costs $0.004 per profile plus usage.

An agent should provide a Property Finder UAE URL whose path starts with `/en/find-agent`, such as `https://www.propertyfinder.ae/en/find-agent/search`. It should set a small `maxResults` value first when validating a workflow.

### API examples

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/propertyfinder-agent-scraper').call({
  searchUrls: ['https://www.propertyfinder.ae/en/find-agent/search'],
  maxResults: 25,
  maxPagesPerSearch: 3,
});

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

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("khadinakbar/propertyfinder-agent-scraper").call(
    run_input={
        "searchUrls": ["https://www.propertyfinder.ae/en/find-agent/search"],
        "maxResults": 25,
        "maxPagesPerSearch": 3,
    }
)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(items[0] if items else "No public agents found")
```

### Operational behavior

The Actor uses sessions and UAE residential proxies on Apify to make directory requests consistently. It retries temporary 403 and 429 responses with a fresh session, deduplicates records by a deterministic public-directory key, validates every output record before writing it, and preserves partial data if one page fails.

For accurate monitoring, run the same filtered URL on a schedule and compare `agentId` plus `phone`, `agencyName`, and `officeAddress`. A valid search that returns no cards is reported as `VALID_EMPTY`, not as a silent success with invented results.

### FAQ

#### Can I scrape a specific UAE city or agent name?

Yes. Apply the relevant public filter in Property Finder's agent directory first, then paste the resulting directory URL into `searchUrls`. The Actor retains that URL's query parameters while it paginates.

#### Does it collect emails or private data?

No. It collects only the data exposed publicly in the directory's structured agent cards: name, agency, public telephone, public address, and public image URLs where present.

#### Why did I receive fewer profiles than `maxResults`?

`maxResults` is an upper bound, not a guaranteed count. The supplied directory search can run out of pages, contain duplicate cards, or return fewer public cards than requested. Inspect `RUN_SUMMARY` for page and duplicate counts.

#### Can I pass multiple URLs?

Yes. `searchUrls` accepts multiple Property Finder UAE English agent-directory URLs. The profile cap applies to the whole run, which prevents accidental over-collection.

#### Is this affiliated with Property Finder?

No. This is an independent tool for collecting public web data. Property Finder is a trademark of its respective owner. Use the data lawfully and in line with your applicable policies and obligations.

# Actor input Schema

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

Use this when you have one or more Property Finder UAE agent-directory pages, such as 'https://www.propertyfinder.ae/en/find-agent/search'. The Actor keeps the filters already present in each URL and paginates that directory. This is not for a single property listing or a company website.

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

Maximum unique public agent profiles to save across all supplied search URLs. Enter an integer from 1 to 1,000; each saved profile costs $0.004 plus platform usage. Defaults to 50, so the profile-event portion is at most $0.20; this is a strict cap, not a page count.

## `maxPagesPerSearch` (type: `integer`):

Maximum directory pages to request for each search URL. Property Finder normally shows roughly 20 cards per page; defaults to 10 pages to bound requests and cost. This does not override maxResults, which always stops profile writes first.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.propertyfinder.ae/en/find-agent/search"
  ],
  "maxResults": 50,
  "maxPagesPerSearch": 10
}
```

# Actor output Schema

## `agents` (type: `string`):

Validated public Property Finder agent-directory profiles.

## `output` (type: `string`):

Compact machine-readable terminal outcome.

## `runSummary` (type: `string`):

Detailed diagnostics and billing counters.

# 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 = {
    "searchUrls": [
        "https://www.propertyfinder.ae/en/find-agent/search"
    ],
    "maxResults": 50,
    "maxPagesPerSearch": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/propertyfinder-agent-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrls": ["https://www.propertyfinder.ae/en/find-agent/search"],
    "maxResults": 50,
    "maxPagesPerSearch": 10,
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.propertyfinder.ae/en/find-agent/search"
  ],
  "maxResults": 50,
  "maxPagesPerSearch": 10
}' |
apify call khadinakbar/propertyfinder-agent-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/NcNvI7JicrqLOatKw/builds/RaUciO05yPlSMIL8Y/openapi.json
