# Domain Agent Scraper — AU Agents, Agencies & Reviews (`sian.agency/domain-au-agent-scraper`) Actor

Scrape Australian real estate agents and agencies at scale — search by suburb or lookup by id/profile URL. Returns phone, agency email, social links, profile tier, sale/rent stats, full listing portfolios, and reviews. Built for AU proptech lead gen, brokerage recruiting, and competitor intel.

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

## Pricing

from $9.00 / 1,000 agent / agency extracteds

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

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

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

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

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

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

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

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

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

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

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


# README

## Domain Agent Scraper — Australian Real Estate Agents, Agencies & Reviews 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![realestate.com.au Scraper](https://img.shields.io/badge/Store-realestate.com.au%20Scraper-E4002B)](https://apify.com/sian.agency/realestate-au-property-scraper?fpr=sian) [![Zillow Agent Scraper](https://img.shields.io/badge/Store-Zillow%20Agent%20Scraper-1F4E79)](https://apify.com/sian.agency/zillow-agent-scraper?fpr=sian) [![Property Skip Tracing](https://img.shields.io/badge/Store-Property%20Skip%20Tracing-1AE392)](https://apify.com/sian.agency/property-skip-tracing?fpr=sian)

#### 🎉 The only agent-first Domain scraper — 760+ agents and 390+ agencies in Sydney alone, with phone, email, social links & verified reviews
##### Built for AU proptech lead gen, brokerage recruiters, and agency competitor intelligence

---

### 📋 Overview

**Stop copy-pasting agent profiles one by one** — this actor turns Domain's Australian agent and agency directory into a clean, structured lead dataset: search any suburb, and get every agent or agency with direct phone, agency email, social media links, profile tier, office address, sale/rent activity stats, and (optionally) their full listing portfolio and verified review history.

**Why professionals choose us:**
- ✅ **Agent-first, not an afterthought**: dual directory modes cover individual agents AND agencies — agencies come with direct email addresses out of the box
- ⚡ **Complete contact dossier**: phone, email, Facebook, Twitter/X, Instagram, YouTube, personal website, office address, and profile tier per record
- 🎯 **Recruiting signal built in**: forSale / sold / forRent / leased activity counts on every profile — rank top producers in any market instantly
- 💰 **Pay-per-result**: from ~$0.012 per full profile — you're only charged for profiles actually delivered
- 💎 **Portfolio + reputation depth**: full paginated listing portfolios (price, address, geo, photos) and the verified reviews corpus with reviewer names
- ✨ **NEW**: lookup mode accepts bare profile ids or profile URLs — pipe search output straight back in for scheduled re-enrichment

---

### ✨ Features

- 🔍 **Suburb directory search**: any Australian suburb, postcode, or area — fuzzy-resolved ("Sydney NSW" → Sydney, NSW, 2000)
- 👤 **Agent mode**: individual salespeople with job title, photo, agency affiliation, and activity stats
- 🏢 **Agency mode**: offices with direct email, phone, aggregate star rating, and review counts
- 🔤 **Name filter**: narrow any suburb search to a brand ("Ray White") or a person's name
- 🎯 **Bulk lookup**: fetch profiles directly by numeric id or profile URL — URLs auto-detect agent vs agency
- 🏘 **Listing portfolio enrichment**: every live and historical listing per profile — price, beds/baths/cars, full address, coordinates, photos
- ⭐ **Verified reviews enrichment**: star rating, review text, reviewer name, vendor/buyer type, reviewed property details
- 📊 **Cohort KPIs report**: contactability, top agencies, profile tiers, and productivity medians in a run-level HTML report
- 🔁 **Automatic deduplication**: each agent/agency delivered once per run, no double charges

---

### 🎬 Quick Start

Pick a suburb, choose agents or agencies, hit Start. The actor paginates the directory, enriches each row with the full profile, and streams clean JSON to your dataset.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~domain-au-agent-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"searchMode": "search", "entityType": "agent", "location": "Sydney NSW", "maxProfilesPerQuery": 50}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose your mode

**search** a suburb's directory (agents or agencies), or **lookup** specific profiles by id / profile URL.

#### Step 2: Set your caps and toggles

Pick `maxProfilesPerQuery`, and optionally switch on listing-portfolio and verified-reviews enrichment.

#### Step 3: Run and export

Start the actor and export the dataset as JSON, CSV, or Excel — or pull it via API into your CRM.

**That's it! In a couple of minutes, you'll have:**

- A per-suburb lead list with phone, email, and social links
- Productivity stats to rank top performers
- Optional portfolios + reviews for deep competitor analysis

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| searchMode | string | No | `search` (suburb directory) or `lookup` (by id/URL). Default `search` |
| entityType | string | No | `agent` (individuals) or `agency` (offices). Default `agent` |
| location | string | search mode | Australian suburb / postcode / area, e.g. `"Sydney NSW"` |
| nameFilter | string | No | Only profiles whose name matches this text |
| maxProfilesPerQuery | integer | No | Cap per search query (default 50) |
| lookupTargets | array | lookup mode | Numeric profile ids or domain.com.au profile URLs |
| fetchProfileDetails | boolean | No | Fetch the full profile per directory row (default true) |
| includeListings | boolean | No | Enrich with the full listing portfolio (PAID) |
| includeReviews | boolean | No | Enrich with verified reviews (PAID) |
| maxListingsPerProfile | integer | No | Portfolio cap per profile (default 50) |
| maxReviewsPerProfile | integer | No | Reviews cap per profile (default 25) |

**Example — agencies with reviews:**

```json
{
  "searchMode": "search",
  "entityType": "agency",
  "location": "Bondi Beach NSW",
  "includeReviews": true
}
```

**Example — bulk lookup:**

```json
{
  "searchMode": "lookup",
  "lookupTargets": [
    "1487822",
    "https://www.domain.com.au/real-estate-agencies/sydneycoveproperty-6877"
  ],
  "includeListings": true
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **25+ fields** per profile, including:

| Field | Type | Description |
|-------|------|-------------|
| profileId | string | Stable numeric id — reusable in lookup mode |
| entityType | string | `agent` or `agency` |
| name | string | Display name |
| phone / mobile | string | Direct phone numbers |
| email | string | Direct email (agency rows carry it natively) |
| social | object | Facebook, Twitter, Instagram, YouTube, website links |
| stats | object | forSale / sold / forRent / leased activity counts |
| rating | object | Verified-review aggregate `{ reviewsCount, stars }` |
| profileTier | string | Paid-prominence tier (e.g. platinum) |
| agency | object | The agent's agency (id, name, logo, website) |
| listings | array | Enrichment: full portfolio rows with price, address, geo, photos |
| reviews | array | Enrichment: review text, stars, reviewer name, property details |
| officeAddress | string | Street address of the office |
| profileUrl | string | Public profile page |

**Example:**

```json
{
  "profileId": "6877",
  "entityType": "agency",
  "name": "Sydney Cove Property",
  "phone": "02 92411288",
  "email": "info@sydneycoveproperty.com",
  "officeAddress": "Level 1 / 111 George St, The Rocks NSW 2000",
  "rating": { "reviewsCount": 7, "stars": 5 },
  "stats": { "forSale": 25, "sold": 75, "forRent": 36 },
  "counts": { "listings": 30, "listingsTotal": 426, "reviews": 6, "reviewsTotal": 7 },
  "profileUrl": "https://www.domain.com.au/real-estate-agencies/sydneycoveproperty-6877"
}
```

***

### 💼 Use Cases & Examples

#### 1. AU Proptech Lead Generation

**SaaS and service vendors selling to real estate agents need fresh, contactable lead lists.**

**Input:** One search per target suburb, `entityType: "agency"`
**Output:** Agencies with direct email + phone + activity volume
**Use:** Load into your CRM and prioritise by sold/leased volume

#### 2. Brokerage Recruiting

**Recruiters and principals hunting top producers in a market.**

**Input:** `entityType: "agent"`, suburb search with `fetchProfileDetails: true`
**Output:** Agents ranked by sold/leased counts, with profile tier and social links for warm outreach
**Use:** Build a shortlist of platinum-tier agents with 100+ leased transactions

#### 3. Agency Competitor Intelligence

**Track rival agencies' inventory and momentum suburb by suburb.**

**Input:** `lookupTargets` with competitor agency URLs, `includeListings: true`
**Output:** Full portfolio breakdown — sale/sold/lease/leased counts plus every live listing
**Use:** Monitor listing mix and price points weekly on a schedule

#### 4. Reputation Intelligence

**Analyse the verified review corpus before partnering or hiring.**

**Input:** `includeReviews: true` on any search or lookup
**Output:** Review text, stars, reviewer type (vendor/buyer), reviewed property details
**Use:** Sentiment and service-quality analysis across an entire franchise

#### 5. Market Analytics & Research

**Data teams mapping agent density and activity mix across Australia.**

**Input:** Scheduled suburb searches across a state
**Output:** Longitudinal agent/agency dataset with productivity stats
**Use:** Market-share dashboards, franchise expansion planning

***

### 🔗 Integration Examples

#### JavaScript/Node.js

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

const run = await client.actor('sian.agency/domain-au-agent-scraper').call({
  searchMode: 'search',
  entityType: 'agent',
  location: 'Melbourne VIC',
  maxProfilesPerQuery: 100
});

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

#### Python

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

run = client.actor('sian.agency/domain-au-agent-scraper').call(
    run_input={
        'searchMode': 'search',
        'entityType': 'agency',
        'location': 'Brisbane QLD',
        'includeReviews': True
    }
)

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

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~domain-au-agent-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchMode": "lookup", "lookupTargets": ["1487822"], "includeListings": true}'
```

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

1. **Trigger**: weekly schedule per target suburb
2. **HTTP Request**: call the actor API
3. **Process**: filter new profiles vs your CRM
4. **Action**: create leads, notify the sales channel

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **5 profiles** per run with full contact + stats depth — same data quality as paid runs
- No credit card required
- Perfect for evaluating the dataset shape

#### PAID Tier (Production Ready)

- **Unlimited** queries and profiles per run
- Bulk lookup lists and enrichment toggles unlocked
- Pay-per-result: charged only for profiles actually delivered

💰 **Value pricing**: from ~$0.012 per full profile (phone + email + social + stats) — a fraction of what agent-lead databases charge per contact.

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

***

### ❓ Frequently Asked Questions

**Q: How many profiles can I process?**
A: FREE tier: 5 per run. PAID tier: unlimited — Sydney alone yields 760+ agents and 390+ agencies.

**Q: Do agent rows include email addresses?**
A: Agency rows carry a direct email natively. Individual agents expose a `hasEmail` flag plus phone and social links; the agency email gives you a reliable office-level contact for every agent.

**Q: Can I look profiles up by URL?**
A: Yes — paste agent or agency profile URLs into `lookupTargets`; the entity type is auto-detected.

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

**Q: Where do the reviews come from?**
A: They are the verified reviews displayed on public profiles, including reviewer name, star rating, and the reviewed property.

**Q: Is this legal?**
A: We only extract publicly available profile data. See the [legal section](#-is-it-legal-to-scrape-data) below.

**Q: How long does a run take?**
A: A 50-profile suburb search with full details typically completes in 1–2 minutes; enrichment adds a few seconds per profile.

***

### 🐛 Troubleshooting

**Search returns 0 profiles**

- Add the state code to the location ("Bondi Beach NSW", not just "Bondi Beach")
- Try the suburb's postcode instead
- Check the suburb actually has listed agents (very small localities may resolve to a neighbour)

**Lookup fails with "not a numeric profile id"**

- Use the numeric id from a previous search (`profileId` field), or the full profile URL
- Bare ids follow the Entity Type input — set `entityType: "agency"` for bare agency ids

**Enrichment fields are empty**

- Enrichment toggles are PAID-tier features; on FREE runs they are ignored
- Some profiles genuinely have 0 reviews — the `rating` field is null in that case

**Fewer listings than the portfolio total**

- Raise `maxListingsPerProfile` (default 50) — top agencies can have 400+ listings

***

### ⚠️ Trademark Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Domain Group or domain.com.au**. "Domain" and "domain.com.au" are trademarks of their respective owners, used here only to describe the public data source. All data collected is publicly accessible on the source website.

***

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

Our actors are ethical and do not extract any private user data, such as personal email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

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

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

***

### 🤝 Support

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

**Join our active support community**

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

***

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

# Actor input Schema

## `searchMode` (type: `string`):

How to find profiles. **search** — paginate the agent/agency directory by Australian suburb. **lookup** — directly fetch one or more profiles by numeric id (harvested from a search) or domain.com.au profile URL.

## `entityType` (type: `string`):

**agent** — individual salespeople (phone, social links, sale/rent stats). **agency** — offices (direct email + phone + aggregate rating). In lookup mode this sets the type for bare numeric ids; profile URLs auto-detect their type.

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

Australian suburb, postcode, or area to search — e.g. "Sydney NSW", "Bondi Beach NSW", or "3000". The resolver is fuzzy; adding the state code (NSW, VIC, QLD, ...) helps it pick the right suburb. Required when searchMode = search.

## `nameFilter` (type: `string`):

Only return agents/agencies whose name matches this text within the searched location. Leave empty for the full directory.

## `maxProfilesPerQuery` (type: `integer`):

Cap on how many profile records to return per search query. Default 50 (~3 pages of 20). FREE tier hard-capped at 5.

## `lookupTargets` (type: `array`):

List of numeric profile ids (e.g. "1487822") or domain.com.au profile URLs (agent or agency). URLs auto-detect the entity type; bare ids use the Entity Type input. Required when searchMode = lookup.

## `fetchProfileDetails` (type: `boolean`):

In search mode, after each directory row, fetch the full profile record (adds job title, office address, profile tier, and Facebook / Twitter / Instagram / YouTube / website links). Adds 1 call per profile. Always on in lookup mode.

## `includeListings` (type: `boolean`):

Per profile, paginate the complete listing portfolio (price, beds/baths/cars, full address, geo coordinates, photos, listing URL) plus the sale/sold/lease/leased counts breakdown. PAID tier only.

## `includeReviews` (type: `boolean`):

Per profile, attach the verified reviews corpus — star rating, review text, reviewer name, vendor/buyer type, reviewed property details, and recommendation flag. PAID tier only.

## `maxListingsPerProfile` (type: `integer`):

Hard cap on portfolio listing rows per profile. Default 50. Top agents can have hundreds — raise for the full portfolio.

## `maxReviewsPerProfile` (type: `integer`):

Hard cap on review rows per profile. Default 25.

## Actor input object example

```json
{
  "searchMode": "search",
  "entityType": "agent",
  "location": "Bondi Beach NSW",
  "nameFilter": "Ray White",
  "maxProfilesPerQuery": 50,
  "lookupTargets": [
    "1487822",
    "https://www.domain.com.au/real-estate-agencies/sydneycoveproperty-6877"
  ],
  "fetchProfileDetails": true,
  "includeListings": false,
  "includeReviews": false,
  "maxListingsPerProfile": 50,
  "maxReviewsPerProfile": 25
}
```

# Actor output Schema

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

Unified profile rows — contact data, social links, profile tier, sale/rent activity stats, optional listing portfolio and verified reviews.

## `scrapingSummary` (type: `string`):

HTML summary with cohort KPIs — profile counts, contactability, top agencies, and per-query totals.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "location": "Sydney NSW"
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = { "location": "Sydney NSW" }

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

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

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

```

## CLI example

```bash
echo '{
  "location": "Sydney NSW"
}' |
apify call sian.agency/domain-au-agent-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Domain Agent Scraper — AU Agents, Agencies & Reviews",
        "description": "Scrape Australian real estate agents and agencies at scale — search by suburb or lookup by id/profile URL. Returns phone, agency email, social links, profile tier, sale/rent stats, full listing portfolios, and reviews. Built for AU proptech lead gen, brokerage recruiting, and competitor intel.",
        "version": "1.0",
        "x-build-id": "E87pb8vBM858HPMM8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~domain-au-agent-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-domain-au-agent-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~domain-au-agent-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-domain-au-agent-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~domain-au-agent-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-domain-au-agent-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchMode": {
                        "title": "🧭 Search Mode",
                        "enum": [
                            "search",
                            "lookup"
                        ],
                        "type": "string",
                        "description": "How to find profiles. **search** — paginate the agent/agency directory by Australian suburb. **lookup** — directly fetch one or more profiles by numeric id (harvested from a search) or domain.com.au profile URL.",
                        "default": "search"
                    },
                    "entityType": {
                        "title": "👥 Entity Type",
                        "enum": [
                            "agent",
                            "agency"
                        ],
                        "type": "string",
                        "description": "**agent** — individual salespeople (phone, social links, sale/rent stats). **agency** — offices (direct email + phone + aggregate rating). In lookup mode this sets the type for bare numeric ids; profile URLs auto-detect their type.",
                        "default": "agent"
                    },
                    "location": {
                        "title": "📍 Location (search mode)",
                        "type": "string",
                        "description": "Australian suburb, postcode, or area to search — e.g. \"Sydney NSW\", \"Bondi Beach NSW\", or \"3000\". The resolver is fuzzy; adding the state code (NSW, VIC, QLD, ...) helps it pick the right suburb. Required when searchMode = search.",
                        "default": "Sydney NSW"
                    },
                    "nameFilter": {
                        "title": "🔤 Name filter (optional)",
                        "type": "string",
                        "description": "Only return agents/agencies whose name matches this text within the searched location. Leave empty for the full directory."
                    },
                    "maxProfilesPerQuery": {
                        "title": "📊 Max profiles per query",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Cap on how many profile records to return per search query. Default 50 (~3 pages of 20). FREE tier hard-capped at 5.",
                        "default": 50
                    },
                    "lookupTargets": {
                        "title": "🎯 Lookup targets (lookup mode)",
                        "type": "array",
                        "description": "List of numeric profile ids (e.g. \"1487822\") or domain.com.au profile URLs (agent or agency). URLs auto-detect the entity type; bare ids use the Entity Type input. Required when searchMode = lookup.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchProfileDetails": {
                        "title": "👤 Fetch full profile details",
                        "type": "boolean",
                        "description": "In search mode, after each directory row, fetch the full profile record (adds job title, office address, profile tier, and Facebook / Twitter / Instagram / YouTube / website links). Adds 1 call per profile. Always on in lookup mode.",
                        "default": true
                    },
                    "includeListings": {
                        "title": "🏷 Enrich: Full listing portfolio",
                        "type": "boolean",
                        "description": "Per profile, paginate the complete listing portfolio (price, beds/baths/cars, full address, geo coordinates, photos, listing URL) plus the sale/sold/lease/leased counts breakdown. PAID tier only.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "⭐ Enrich: Verified reviews",
                        "type": "boolean",
                        "description": "Per profile, attach the verified reviews corpus — star rating, review text, reviewer name, vendor/buyer type, reviewed property details, and recommendation flag. PAID tier only.",
                        "default": false
                    },
                    "maxListingsPerProfile": {
                        "title": "Max listings per profile",
                        "minimum": 1,
                        "maximum": 600,
                        "type": "integer",
                        "description": "Hard cap on portfolio listing rows per profile. Default 50. Top agents can have hundreds — raise for the full portfolio.",
                        "default": 50
                    },
                    "maxReviewsPerProfile": {
                        "title": "Max reviews per profile",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on review rows per profile. Default 25.",
                        "default": 25
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
