# Centris Broker Scraper — Quebec Real Estate Agent Leads (`sian.agency/centris-agent-scraper`) Actor

Scrape Quebec real estate brokers from the Centris.ca directory at scale. Search by city or region, pull full agency rosters, look up brokers by name, filter by language. Every row includes direct phone, agency, title and profile URL — built for lead generation, recruiting and CRM enrichment.

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

## Pricing

from $2.50 / 1,000 broker lead 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

## Centris Broker Scraper — Quebec Real Estate Agent Leads 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Centris.ca Property Scraper](https://img.shields.io/badge/Store-Centris.ca%20Property%20Scraper-00A98F)](https://apify.com/sian.agency/centris-ca-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)

#### 🎉 Every broker row ships with a direct phone number — 200 dialable Quebec real estate leads per $1
##### Built for lead-gen teams, brokerage recruiters, proptech vendors and CRM ops working the Quebec market

---

### 📋 Overview

**Need Quebec real estate broker leads?** This actor crawls the Centris.ca broker directory — the definitive listing of licensed real-estate brokers across Quebec — and turns it into a clean, dial-ready dataset: name, professional title, direct phone, agency, photo, profile URL and contact URL on every row.

**Why professionals choose this scraper:**
- ✅ **Phone number on every row**: no enrichment calls, no per-lead surcharge — the direct line is included in the base price
- ⚡ **Four verified search filters**: crawl by city/region, pull a full agency roster, look up brokers by name, and narrow by language — each filter is live-tested and honored
- 🎯 **Full-market crawls that don't double-charge**: automatic pagination with brokerId deduplication — you are charged once per unique broker, never for repeats
- 💰 **Transparent pay-per-result pricing**: $0.005 per broker row — 4× cheaper than the closest alternative charging $0.02 per broker
- 💎 **Bilingual language filter**: unique to Quebec's FR/EN market — separate French-serving and English-serving brokers for targeted outreach
- ✨ **NEW**: cohort KPIs in every run report — top-agency concentration, phone coverage and broker-title distribution

---

### ✨ Features

- 📍 **City & region crawls**: paginate the full broker directory for Montréal, Québec, Gatineau, Laval, Estrie, Laurentides — any Quebec market
- 🏢 **Agency roster mode**: pull every broker affiliated with a brokerage brand (e.g. all RE/MAX or VIA CAPITALE brokers) in one run
- 🔎 **Name lookup**: find every broker named "Tremblay" across the province
- 🗣 **Language filter**: composable with any search — French, English, Spanish, Italian and more
- 📞 **Dial-ready rows**: direct phone, agency, professional title, photo, profile URL, contact URL
- 🔁 **Run-level dedup**: stable `brokerId` on every row — dedupe across runs and join to your CRM
- 📊 **Cohort KPIs**: distinct-agency counts, top-agency breakdown, phone/photo coverage in the HTML run report
- 💸 **Cost caps built in**: `maxBrokers` hard-caps your spend per run

---

### 🎬 Quick Start

Enter a Quebec city, an agency name, or a broker name — the actor paginates the directory, dedupes brokers, and pushes one lead row per unique broker.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~centris-agent-scraper/runs?token=YOUR_TOKEN \
-d '{"area": "Montréal", "maxBrokers": 100}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose your filters

Enter a city/region (e.g. "Montréal"), an agency (e.g. "RE/MAX"), a broker name (e.g. "Tremblay") — or combine them, optionally with a language filter.

#### Step 2: Set your cap

Set `maxBrokers` to control cost — you're only charged per unique broker row returned.

#### Step 3: Run and export

Click Start. Export your lead list as JSON, CSV or Excel straight from the dataset tab.

**That's it! In under a minute, you'll have:**

- A deduplicated broker lead list with direct phones
- Agency, title and profile URLs on every row
- An HTML report with market KPIs (top agencies, phone coverage)

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| area | string | No\* | Quebec city or region to crawl (e.g. "Montréal", "Estrie") |
| agency | string | No\* | Agency/brokerage name or prefix (e.g. "RE/MAX") |
| brokerName | string | No\* | Full or partial broker name (e.g. "Tremblay") |
| language | string | No | Language filter — "French", "English", "Spanish", … |
| maxBrokers | integer | No | Max unique broker rows per run (default 100, up to 2000) |

\* All filters are composable. If you set none of `area`, `agency`, or `brokerName`, the actor defaults to a "Montréal" directory crawl.

**Example — city crawl:**

```json
{
  "area": "Montréal",
  "maxBrokers": 200
}
```

**Example — agency roster with language filter:**

```json
{
  "agency": "RE/MAX",
  "area": "Québec",
  "language": "English",
  "maxBrokers": 500
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **13 fields** per broker, including:

| Field | Type | Description |
|-------|------|-------------|
| brokerName | string | Broker display name |
| brokerTitle | string | Professional designation (e.g. "Residential and Commercial Real Estate Broker") |
| phone | string | Direct phone number |
| agency | string | Affiliated agency/brokerage |
| brokerId | string | Stable directory identifier — dedupe & join key |
| profileUrl | string | Public broker profile page |
| contactUrl | string | Public contact-form URL |
| photo | string | Profile photo URL |
| languageFilter | string | Language filter applied (if any) |
| mode | string | Discovery mode: area / agency / name |
| scrapedAt | string | ISO collection timestamp |

**Example:**

```json
{
  "brokerId": "c1366",
  "brokerName": "Gilles Cohen",
  "brokerTitle": "Certified Residential and Commercial Real Estate Broker",
  "phone": "+1 514-891-2523",
  "agency": "RE/MAX ROYAL (JORDAN) INC.",
  "photo": "https://mspublic.centris.ca/media.ashx?id=...",
  "profileUrl": "https://www.centris.ca/en/real-estate-broker~gilles-cohen~re-max-royal-jordan-inc.-pointe-claire/c1366",
  "contactUrl": "https://www.centris.ca/en/contact-broker/c1366",
  "languageFilter": null,
  "queryLabel": "area:Montréal",
  "mode": "area",
  "source": "centris.ca",
  "scrapedAt": "2026-07-02T14:00:00.000Z"
}
```

***

### 💼 Use Cases & Examples

#### 1. Broker Lead Generation

**Lead-gen teams build dialable Quebec broker lists in minutes instead of days of manual directory copying.**

**Input:** `{"area": "Montréal", "maxBrokers": 500}`
**Output:** 500 unique brokers with direct phones, agencies and titles
**Use:** Feed your dialer or outreach sequences with fresh, deduplicated real estate broker leads

#### 2. Brokerage Recruiting

**Recruiters map a competitor agency's full roster before a hiring push.**

**Input:** `{"agency": "RE/MAX", "area": "Laval"}`
**Output:** Every RE/MAX-affiliated broker in Laval with title and direct phone
**Use:** Rank recruiting targets by professional title and territory

#### 3. Vendor & Proptech Prospecting

**SaaS, photography, staging, mortgage and insurance vendors prospect brokers who serve clients in their language.**

**Input:** `{"area": "Québec", "language": "English", "maxBrokers": 300}`
**Output:** English-serving brokers in Québec City — a pre-qualified niche segment
**Use:** Language-targeted campaigns in Quebec's bilingual market

#### 4. CRM Enrichment & Dedup

**CRM ops teams refresh stale broker records against the live directory.**

**Input:** `{"brokerName": "Tremblay"}`
**Output:** Current agency affiliation and phone for every matching broker, keyed by stable brokerId
**Use:** Detect brokers who switched brokerages; keep phone fields current

#### 5. Market Mapping

**Analysts measure agency concentration per region using the built-in cohort KPIs.**

**Input:** `{"area": "Gatineau", "maxBrokers": 1000}`
**Output:** Full market crawl + HTML report with top-agency breakdown and title distribution
**Use:** Territory planning, franchise expansion analysis, market-share tracking

***

### 🔗 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/centris-agent-scraper').call({
  area: 'Montréal',
  maxBrokers: 200
});

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/centris-agent-scraper').call(
    run_input={'area': 'Montréal', 'maxBrokers': 200}
)

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

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~centris-agent-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"agency": "RE/MAX", "maxBrokers": 500}'
```

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

1. **Trigger**: weekly schedule
2. **HTTP Request**: start this actor with your target city
3. **Process**: fetch new dataset rows, diff on `brokerId`
4. **Action**: push new brokers into your CRM or outreach tool

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 broker rows** per run — full feature access, same data quality
- All four filters included
- Perfect for testing a market before scaling

#### PAID Tier (Production Ready)

- **Up to 2,000 broker rows** per run
- Full-directory crawls with automatic pagination and dedup
- Pay-per-result: **$0.005 per unique broker row** + $0.005 per run start

💰 **Best price on the market** — the closest Centris broker alternative charges $0.02 per broker row; this actor delivers the same phone-bearing rows at a quarter of the price.

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

***

### ❓ Frequently Asked Questions

**Q: How many brokers can I extract?**
A: FREE tier: 25 rows per run. PAID tier: up to 2,000 unique broker rows per run — run per-region crawls to cover the whole province.

**Q: Does every row really include a phone number?**
A: The directory publishes a direct phone on virtually every broker card, and the run report shows exact phone coverage for your cohort.

**Q: Can I get broker emails?**
A: The public directory does not publish emails — each row includes the official contact-form URL (`contactUrl`) instead, plus the profile URL.

**Q: Do the filters combine?**
A: Yes — city/region, agency, name and language all compose (e.g. English-serving RE/MAX brokers in Québec City).

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

**Q: Am I charged for duplicate brokers?**
A: No. Rows are deduplicated on `brokerId` within a run — you are charged once per unique broker returned.

**Q: Is this legal?**
A: The actor only collects business contact data brokers publish on their public directory profiles. See the legal section below.

***

### 🐛 Troubleshooting

**Run finishes with 0 rows**

- Check the spelling of your filters — try the French spelling for cities (e.g. "Montréal", "Québec")
- Broaden the search: drop the language filter or use a shorter agency prefix ("RE/MAX" instead of a full office name)

**Fewer rows than expected**

- Small markets genuinely have few brokers — the actor stops when the directory is exhausted
- Raise `maxBrokers` if you hit your own cap (check the run log for the cap notice)

**A broker appears in two different runs**

- Cross-run dedup is up to you — use the stable `brokerId` field as your merge key

***

### ⚠️ Trademark Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Centris or the Quebec Professional Association of Real Estate Brokers (QPAREB/APCIQ)**. "Centris" is a trademark of its respective owner. All data is collected from publicly accessible broker directory pages.

***

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

Our actors are ethical and do not extract any private user data, such as 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

## `area` (type: `string`):

🏙 **DIRECTORY CRAWL:** Quebec city or region to crawl brokers from, e.g. "Montréal", "Québec", "Gatineau", "Laval", "Estrie".

💡 **TIP:** Combine with the agency or language filters below to narrow the crawl. If you set no filter at all, the actor defaults to a "Montréal" directory crawl.

## `agency` (type: `string`):

🏢 **AGENCY ROSTER:** Pull every broker affiliated with an agency or brokerage brand, e.g. "RE/MAX" or "VIA CAPITALE".

💡 **TIP:** Works alone (province-wide roster) or combined with a city/region for a local roster.

## `brokerName` (type: `string`):

🔎 **NAME LOOKUP:** Full or partial broker name to search for, e.g. "Tremblay" returns every broker with that name across Quebec.

## `language` (type: `string`):

🗣 **LANGUAGE FILTER (optional):** Only return brokers who serve clients in this language — write the language name in English, e.g. "French", "English", "Spanish", "Italian".

💡 **TIP:** Unique to Quebec's bilingual market — separate French- and English-serving brokers for targeted outreach. Cannot run alone; combine with a city/region, agency, or name.

## `maxBrokers` (type: `integer`):

🔢 **COST CAP:** Maximum number of unique broker rows to return for this run.

📋 **TIER-BASED LIMITS:**

- **FREE users:** Up to 25 broker rows per run
- **PAID users:** Up to 2000 broker rows per run

💡 **TIP:** Lower values run faster and cost less — you are only charged per unique broker row returned.

## Actor input object example

```json
{
  "area": "Montréal",
  "agency": "RE/MAX",
  "brokerName": "Tremblay",
  "language": "English",
  "maxBrokers": 100
}
```

# Actor output Schema

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

Structured broker rows — name, professional title, direct phone, agency, photo, profile URL and contact URL, deduplicated on brokerId.

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

HTML summary with run stats, phone/photo coverage, distinct-agency counts, top-agency and broker-title breakdowns, 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 = {};

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

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/centris-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 '{}' |
apify call sian.agency/centris-agent-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Centris Broker Scraper — Quebec Real Estate Agent Leads",
        "description": "Scrape Quebec real estate brokers from the Centris.ca directory at scale. Search by city or region, pull full agency rosters, look up brokers by name, filter by language. Every row includes direct phone, agency, title and profile URL — built for lead generation, recruiting and CRM enrichment.",
        "version": "1.0",
        "x-build-id": "8mj3bJHajHHCL6NAx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~centris-agent-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-centris-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~centris-agent-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-centris-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~centris-agent-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-centris-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": {
                    "area": {
                        "title": "📍 City / Region",
                        "type": "string",
                        "description": "🏙 **DIRECTORY CRAWL:** Quebec city or region to crawl brokers from, e.g. \"Montréal\", \"Québec\", \"Gatineau\", \"Laval\", \"Estrie\".\n\n💡 **TIP:** Combine with the agency or language filters below to narrow the crawl. If you set no filter at all, the actor defaults to a \"Montréal\" directory crawl."
                    },
                    "agency": {
                        "title": "🏢 Agency / Brokerage",
                        "type": "string",
                        "description": "🏢 **AGENCY ROSTER:** Pull every broker affiliated with an agency or brokerage brand, e.g. \"RE/MAX\" or \"VIA CAPITALE\".\n\n💡 **TIP:** Works alone (province-wide roster) or combined with a city/region for a local roster."
                    },
                    "brokerName": {
                        "title": "👤 Broker Name",
                        "type": "string",
                        "description": "🔎 **NAME LOOKUP:** Full or partial broker name to search for, e.g. \"Tremblay\" returns every broker with that name across Quebec."
                    },
                    "language": {
                        "title": "🗣 Language Filter",
                        "type": "string",
                        "description": "🗣 **LANGUAGE FILTER (optional):** Only return brokers who serve clients in this language — write the language name in English, e.g. \"French\", \"English\", \"Spanish\", \"Italian\".\n\n💡 **TIP:** Unique to Quebec's bilingual market — separate French- and English-serving brokers for targeted outreach. Cannot run alone; combine with a city/region, agency, or name."
                    },
                    "maxBrokers": {
                        "title": "📊 Max Broker Rows",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "🔢 **COST CAP:** Maximum number of unique broker rows to return for this run.\n\n📋 **TIER-BASED LIMITS:**\n- **FREE users:** Up to 25 broker rows per run\n- **PAID users:** Up to 2000 broker rows per run\n\n💡 **TIP:** Lower values run faster and cost less — you are only charged per unique broker row returned.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
