# HCRA Ontario Builder Directory Scraper — Licensed Builders (`scrapersdelight/hcra-ontario-builder-directory-scraper`) Actor

Ontario's licensed new-home builders from the HCRA Ontario Builder Directory: phone, e-mail, website, named principals with their phones, Tarion warranty-claims summary, licence dates, conditions, convictions and insolvency. Live licensees by default. $5 per 1,000 builders.

- **URL**: https://apify.com/scrapersdelight/hcra-ontario-builder-directory-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 per builder returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏗️ HCRA Ontario Builder Directory Scraper — Licensed Home Builders

Export **every licensed new-home builder and vendor in Ontario** from the **Home Construction Regulatory Authority's Ontario Builder Directory** (obd.hcraontario.ca) — with the **phone number, e-mail and website** each builder files with the regulator, the **named principals, directors and officers with their own phone numbers**, the **Tarion warranty-claims summary**, licence dates, and the full regulatory record: conditions, court convictions, notices of proposal and insolvency proceedings.

The directory is HCRA's public register of every builder and vendor licensed to build or sell new homes in Ontario.

### 🤔 What does this actor do?

It reads the register the same way the Ontario Builder Directory website does — through the site's own JSON endpoints — and returns **one row per builder licence**. By default you get the **live register**: builders whose licence is *Licensed* or *Licensed with Conditions* (**7,004 builders** on 2026-09-23). Expired, revoked, refused, cancelled, resigned, suspended and unlicensed accounts are one click away for insurance, lending and due-diligence work.

**Who uses it**

- 🪟 **Building-product manufacturers and dealers** — windows, HVAC, lumber, kitchens, roofing — prospecting the builders who buy them, with a direct line to a named principal.
- 🛡️ **New-home warranty, builder's-risk insurers and construction lenders** — screen a builder's warranty-claims history, outstanding balances owed to Tarion, licence conditions, convictions and insolvency before you write the policy or the loan.
- 💻 **Construction-software vendors and contractor-marketing agencies** — a clean, deduplicated list of every active Ontario builder, sized by how many homes they have delivered.
- 🔎 **Due diligence** — look any builder up by licence number and get its whole public record in one row.

### 📊 What a real run returned (measured, not claimed)

Full run of the live register, 2026-09-23, default settings:

| | |
|---|---|
| Builders on the live register (Licensed + with Conditions) | **7,004** |
| Builders delivered | **7,004** (unique licence numbers: 7,004) |
| Builders that could not be read after retries | 0 (never charged) |
| **Phone** | **6,889 (98.4%)** |
| **E-mail** | **6,828 (97.5%)** |
| Phone **and** e-mail | 6,738 (96.2%) |
| Website | 3,865 (55.2%) |
| At least one named principal / director / officer | 6,823 (97.4%) |
| …of which with that person's own phone number | 6,817 (97.3%) of builders; 15,218 of the 15,548 people listed |
| Tarion warranty summary published | 4,232 (60.4%) |
| Warranty claims paid > $0 | 609 (8.7%) — 14.4% of builders with a warranty summary |
| Chargeable conciliations > 0 | 1,008 (14.4%) — 23.8% of builders with a warranty summary |
| Conditions on licence | 132 (1.9%) |
| Court charges / convictions | 46 (0.7%) |
| Notices of proposal | 44 (0.6%) |
| Insolvency proceedings | 29 (0.4%) |
| Condominium projects | 1,474 (21.0%) |
| Run time / memory | 24 minutes (1,435 s) at 512 MB |

Every percentage above is counted over **all** delivered rows, not a sample, and is re-computed on every run into the `RUN_SUMMARY` record so you can check it yourself.

### 🎯 What you get that other HCRA exports don't

1. **Named decision makers with direct numbers.** The register lists each builder's principals, directors and officers with a contact phone for each person. Most exports stop at the company switchboard.
2. **Warranty and risk in the same row.** Homes possessed, freehold homes, condo units, chargeable conciliations, total claims paid, outstanding balance owed to Tarion, breach and Tarion-action-on-behalf amounts — plus conditions, convictions, notices of proposal (with a link to the notice document) and insolvency proceedings (with the insolvency firm).
3. **Contact detail ON by default.** You do not have to know about an "enrich" switch to get the phone number.
4. **Live register by default, the rest opt-in.** Revoked and refused builders are a valuable list for an insurer, and noise for a window dealer. You choose.
5. **Complete, and it tells you so.** The register's full list is read in one response and floor-checked, so there is no pagination to silently drop builders. Every builder that could not be read is listed in `RUN_SUMMARY` and never charged.

### 📦 Every field

#### Identity & licence

| Field | What it is |
|---|---|
| `licenceNumber` | HCRA licence number, e.g. `B60177` |
| `name` | Legal name (leading spaces the register stores are trimmed) |
| `operatingName` | Operating / trade name, when filed |
| `licenceStatus` | Exactly as the register shows it, e.g. `Licensed`, `Licensed with Conditions`, `Revoked` |
| `isCurrentlyLicensed` | `true` for every status that starts with *Licensed* |
| `insolvencyFlag` | The register's insolvency flag |
| `initialLicenceDate`, `licenceRenewedOn`, `licenceExpiryDate` | ISO dates. The register stores `9999-12-30` for builders that were never licensed; that placeholder is returned as `null` |
| `renewalInProcess` | A renewal is being processed |
| `umbrellaCompany`, `umbrellaId` | The builder group ("umbrella") it belongs to, e.g. *Slate Asset Management* |

#### Contact — the product

| Field | What it is |
|---|---|
| `phone` | The builder's filed phone, formatted `416-644-4264` (numbers the register stores as `647/270-5532` or `(416)644-4264` are reformatted, never altered) |
| `phoneE164` | `+14166444264`, for dialers and CRMs |
| `email` | Filed e-mail |
| `website` | Filed website, exactly as filed (blank and `NIL` entries are `null`) |
| `fax`, `address`, `city`, `province` | Office contact details |
| `principals` | Array: `{ name, roles[], status, phone, phoneE164, personId }` — one entry per person, roles merged (a person listed as both Officer and Director appears once) |
| `principalsSummary` | The same as one readable string, for spreadsheets |
| `principalCount` | Number of principals |

#### Tarion warranty overview (the register's "last 10 years, updated daily" block)

| Field | Register label |
|---|---|
| `warrantyTotalPossessions` | Total possessions — freehold and condo homes occupied by a homeowner |
| `warrantyFreeholdHomes` | Freehold properties enrolled with Tarion and under warranty |
| `warrantyCondoUnits` | Condominium units enrolled and under warranty |
| `warrantyChargeableConciliations` | Chargeable conciliations — Tarion found a warranted item the builder failed to resolve |
| `warrantyClaimsPaidCad` | Total dollars paid in claims |
| `warrantyOutstandingOwingCad` | Amount owing to Tarion for claims outstanding more than 30 days |
| `warrantyBreachCad` | Outstanding claims where there was a warranty breach |
| `warrantyTarionActionOnBehalfCad` | Tarion acting on the builder's behalf (TAB) — amounts owing |
| `warrantySummaryPublished` | `true` when the register holds a warranty summary for this builder |
| `outstandingBalancePublished` | `true` when the register holds an outstanding-balance record |

**Null is not zero.** The HCRA website draws a missing warranty figure as "0". This actor does not: a builder with no warranty summary on file gets `null` and `warrantySummaryPublished: false`; a builder whose summary says zero gets `0`. The difference matters to an underwriter.

#### Regulatory record

| Field | What it is |
|---|---|
| `conditions[]` | `{ text, effectiveDate }` — conditions on the licence, in the register's own words |
| `convictions[]` | Court charges and convictions: charge type, charged party, charge / offence / disposition dates, disposition, fines, probation, offence city |
| `noticesOfProposal[]` | Notices of proposal to refuse, revoke or add conditions: action, document name, date issued, due date, compliance, **link to the notice PDF** |
| `insolvencyProceedings[]` | Receivership / bankruptcy / proposal: type, **insolvency firm**, decision date, date HCRA was informed, document link |
| `condoProjects[]` | Condominium projects: name, status, location, address, units, terminations |
| `…Count` | The count for each list |

`profileUrl` links every row to the builder's public profile. `scrapedAt` and `source` record provenance.

### 📄 A real row (from the verified run)

Licence B60177 as delivered on 2026-09-23. Its `principals` array held 5 people; two are shown here to keep the page short.

```json
{
  "licenceNumber": "B60177",
  "name": "1 Delisle Ave GP Inc. in its capacity as general partner of and on behalf of 1 Delisle Ave L.P.",
  "operatingName": null,
  "licenceStatus": "Licensed",
  "isCurrentlyLicensed": true,
  "insolvencyFlag": false,
  "phone": "416-644-4264",
  "phoneE164": "+14166444264",
  "email": "info@slateam.com",
  "website": "http://slateam.com",
  "fax": "416-947-9366",
  "address": "121 King Street West",
  "city": "Toronto",
  "province": "ON",
  "umbrellaCompany": "Slate Asset Management",
  "umbrellaId": "500000272",
  "initialLicenceDate": "2021-05-13",
  "licenceRenewedOn": "2026-07-29",
  "licenceExpiryDate": "2027-05-14",
  "renewalInProcess": false,
  "warrantySummaryPublished": false,
  "warrantyTotalPossessions": null,
  "warrantyFreeholdHomes": null,
  "warrantyCondoUnits": null,
  "warrantyChargeableConciliations": null,
  "warrantyClaimsPaidCad": null,
  "outstandingBalancePublished": false,
  "warrantyOutstandingOwingCad": null,
  "warrantyBreachCad": null,
  "warrantyTarionActionOnBehalfCad": null,
  "principalCount": 5,
  "principalsSummary": "Brandon Donnelly (Officer) 416-583-1773; …",
  "principals": [
    {
      "personId": "100529119",
      "name": "Brandon Donnelly",
      "roles": [
        "Officer"
      ],
      "status": "Active",
      "phone": "416-583-1773",
      "phoneE164": "+14165831773"
    },
    {
      "personId": "600021567",
      "name": "Steven Dejonckheere",
      "roles": [
        "Officer"
      ],
      "status": "Active",
      "phone": "416-583-1746",
      "phoneE164": "+14165831746"
    }
  ],
  "conditionsCount": 1,
  "conditions": [
    {
      "text": "1 Delisle Ave GP Inc. in its capacity as general partner of and on behalf of 1 Delisle Ave L.P. must provide proof, to the satisfaction of the Registrar, that it has obtained the following competencies by 2026-05-10:\n\n• Project Management and Supervision\n• Customer Service and Tarion Requirements\n\n1 Delisle Ave GP Inc. in its capacity as general partner of and on behalf of 1 Delisle Ave L.P. shall not act as vendor or builder of any homes except in relation to the following condo project located at 1 Delisle Avenue, Toronto, Ontario.",
      "effectiveDate": "2026-02-12"
    }
  ],
  "convictionsCount": 0,
  "convictions": [],
  "noticesOfProposalCount": 0,
  "noticesOfProposal": [],
  "insolvencyProceedingsCount": 0,
  "insolvencyProceedings": [],
  "condoProjectCount": 1,
  "condoProjects": [
    {
      "projectName": "One Delisle",
      "status": "In Progress",
      "location": "TORONTO",
      "address": "1 Delisle Ave",
      "units": 371,
      "terminations": null,
      "cancellationReason": null,
      "lastStatusUpdate": null
    }
  ],
  "profileUrl": "https://obd.hcraontario.ca/profile/B60177",
  "source": "HCRA Ontario Builder Directory (obd.hcraontario.ca)",
  "scrapedAt": "2026-09-23T03:43:35.750Z"
}
```

### ⚙️ How to run it

**Every live builder in Ontario** — set *Max builders* to `0`:

```json
{ "licenceStatuses": ["Licensed", "Licensed with Conditions"], "maxResults": 0 }
```

**Builders in Ottawa and Barrie that file an e-mail:**

```json
{ "cities": ["Ottawa", "Barrie"], "requireEmail": true, "maxResults": 0 }
```

**Revoked and refused builders for a risk screen:**

```json
{ "licenceStatuses": ["Revoked", "Refused"], "maxResults": 0 }
```

**Look specific builders up:**

```json
{ "licenceNumbers": ["B60177", "B32235"] }
```

**Insolvent builders that are still licensed:**

```json
{ "licenceStatuses": ["Licensed", "Licensed with Conditions"], "insolventOnly": true, "maxResults": 0 }
```

Turn off *principals*, *regulatory record* or *condo projects* for a faster run; the price is the same.

### 💰 Pricing

**$0.005 per builder delivered — $5 per 1,000.** No start fee, no platform-usage surcharge. The whole live register (about 7,000 builders) costs about **$35**.

You are charged **only for builders delivered to your dataset**. Builders removed by your filters, by the e-mail/phone filter, by your row cap, and builders the register could not serve after retries are read but **never charged**. A run with an empty input returns at most 75 builders ($0.375).

### 🔗 Source

HCRA Ontario Builder Directory, https://obd.hcraontario.ca/. The actor reads the same JSON endpoints the directory's own website calls, without a login.

### 🚧 Honest limits

- **One register, one country.** Ontario builders only. Quebec (RBQ), BC and other provinces are different registers.
- **Umbrella groups and prosecution records are out of scope.** The list also carries 2,845 umbrella-group entries and 168 records of charges against people and unlicensed firms. They are different entity types with different endpoints, and the builder-summary endpoint answers `[]` for all of them, so they are excluded rather than delivered as empty rows. Looking one up by number reports it as not a builder account, uncharged.
- **Four warranty fields are not shipped.** The register returns `SUMM_MINOR`, `SUMM_MINOR_AMT`, `SUMM_MAJOR` and `SUMM_MAJOR_AMT`, but the HCRA website neither displays nor defines them. Guessing a label would be inventing meaning, so they are left out.
- **Warranty figures cover the last 10 years** and are HCRA's, updated daily; they are not a full lifetime history.
- **Principal phone numbers are what HCRA publishes.** Some principals share the company switchboard.
- **The register lists 39 duplicate licence numbers**, all in the out-of-scope tail (prosecution, refused and unlicensed entries). The live register has none; each licence number is delivered once.
- **Some conditions live in a notice, not in `conditions`.** 5 of the 68 *Licensed with Conditions* builders have no condition text on the register; their conditions are carried by a Notice of Proposal (`action: "NOP Conditions"`), which is in `noticesOfProposal` with a link to the notice document.
- **Phones are reformatted, never repaired.** A number the register stores with a typo (one live builder files `416-740-55444`, eleven digits) is delivered exactly as filed, with `phoneE164: null`.
- **Contact fields can be stale.** They are what the builder filed with HCRA at its last licence event.

### 🧪 How reliability is checked

- The full list is read in **one response** (the register's `page` parameter is ignored — page 1 and page 2 are identical, in identical order) and **floor-checked**: fewer than 40,000 rows, or fewer than 5,000 *Licensed*, fails the run instead of selling a partial register.
- **The empty-response trap.** The detail endpoint answers `[]` under HTTP 200 both for "nothing on file" and for a request it did not accept — the difference is invisible. Every request carries the `Referer` and `Accept` headers the directory's own site sends, and because every builder account holds exactly one summary row, a `[]` summary for a builder the list contains is treated as a **failure and retried**, never as a builder with no details. Measured from Apify's network: **0 empty summaries in 7,004 calls on the full live register (2026-09-23), and in two earlier probes 0 of 300 with the Referer and 0 of 300 without it — the trap is guarded, not observed**.
- When the register's own status says a section must have content — *Licensed with Conditions* ⇒ a condition, an *NOP* status ⇒ a notice, the insolvency flag ⇒ a proceeding — an empty answer is re-read before it is accepted.
- A 200 carrying HTML or a truncated body is treated as a transport failure, never as data. Every request has a hard wall-clock deadline.
- A run where most builders cannot be read **fails loudly**; a run with legitimately no matches exits cleanly.

### ❓ FAQ

**How fresh is the data?** Each run reads the live register. HCRA updates the warranty block daily.

**How long does a full run take?** About 24 minutes (1,435 s) for the whole live register at the default concurrency.

**Do I need a proxy?** No. The register is open and has no anti-bot; a proxy only adds cost and latency. It is off by default.

**Why are some websites missing?** Only 3,865 (55.2%) of builders file one; the rest leave it blank or write `NIL`. Blank values are returned as `null`, never as an empty string.

**What is a "chargeable conciliation"?** Tarion's term for a case where it inspected a homeowner's warranty claim, found the item warranted, and the builder had failed to fix it in time.

**Can I get only builders I haven't seen before?** Filter on `initialLicenceDate` in your own pipeline — newly licensed builders carry a recent date.

**What does "NOP" mean?** A Notice of Proposal — HCRA's formal notice that it intends to refuse, revoke or condition a licence. The builder stays licensed while it is pending or under appeal.

**Why are revoked builders not in the default output?** Because a builder who cannot legally build is a wasted call for most sales teams. Tick *Revoked* (and *Refused*, *Expired*) to get them.

**Is every phone number a mobile?** No — they are whatever the builder and its principals filed: office lines, direct lines and mobiles.

**Can I look up a builder by name?** Yes — *Builder name contains*, e.g. `mattamy`.

**What if HCRA changes its site?** The actor fails loudly (short list, non-JSON answers, a high unreachable rate) rather than returning a quietly partial dataset.

# Actor input Schema

## `licenceStatuses` (type: `array`):

Which builder licence statuses to return. The default is the LIVE register: 'Licensed' (6,936 builders) and 'Licensed with Conditions' (68) — the builders legally allowed to build or sell new homes in Ontario today. The three 'Licensed - NOP …' statuses are still licensed but under a Notice of Proposal to refuse or revoke. Expired (34,227), Revoked (2,229) and Refused (1,742) are opt-in: a separate product for insurers, lenders and due-diligence teams screening who has lost or been denied a licence. Counts measured 2026-09-22. Ignored when you give licence numbers.

## `licenceNumbers` (type: `array`):

Look specific builders up by HCRA licence number, e.g. B60177. When given, the status filter is ignored — you get each named licence whatever its status. Numbers that are not builder accounts on the register are listed in the run summary and never charged.

## `builderNames` (type: `array`):

Keep only builders whose legal or operating name contains any of these words (case-insensitive), e.g. 'homes', 'mattamy', 'developments'.

## `cities` (type: `array`):

Keep only builders whose office city is one of these, e.g. 'Toronto', 'Ottawa', 'Vaughan', 'Barrie'. Matching ignores case and a trailing ', ON', because the register spells the same city several ways ('TORONTO', 'Toronto, ON').

## `insolventOnly` (type: `boolean`):

Keep only builders the register flags with an insolvency proceeding (receivership, bankruptcy, proposal). 52 accounts carry the flag; 27 of them are still Licensed. Useful for lenders and insurers.

## `includePrincipals` (type: `boolean`):

Add the named principals, directors and officers the register lists for each builder, each with the contact phone number filed for them (79 of 80 licensed builders sampled had at least one). One extra request per builder; no extra charge.

## `includeRegulatoryRecord` (type: `boolean`):

Add conditions on the licence, court charges and convictions, Notices of Proposal (with a link to the notice document) and insolvency proceedings. Four extra small requests per builder; no extra charge.

## `includeCondoProjects` (type: `boolean`):

Add the condominium projects the builder is registered for with Tarion: project name, status, address and number of units. One extra request per builder; no extra charge.

## `requireEmail` (type: `boolean`):

Deliver only builders that file an e-mail address. Builders without one are read but never charged.

## `requirePhone` (type: `boolean`):

Deliver only builders that file a phone number. Builders without one are read but never charged.

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

Stop after this many builders are delivered (you are charged per delivered builder). 0 = no limit — the whole live register is about 7,000 builders. The default of 75 keeps an accidental empty-input run small.

## `concurrency` (type: `integer`):

Builders read in parallel. Each builder is up to 7 small JSON requests. 6 reads the full live register in a few minutes without stressing the regulator's server.

## `requestTimeoutSecs` (type: `integer`):

Hard wall-clock deadline for each request. Failed requests are retried on a fresh connection.

## `proxyConfiguration` (type: `object`):

Optional and off by default: the register is open public data with no anti-bot. Measured from Apify's own network on 2026-09-23 with no proxy: the full list in 3.9 s and 150 of 150 builder-detail calls answered correctly (median 455 ms). A proxy adds cost and latency and buys nothing here; turn one on only if your own network needs it.

## Actor input object example

```json
{
  "licenceStatuses": [
    "Licensed",
    "Licensed with Conditions"
  ],
  "insolventOnly": false,
  "includePrincipals": true,
  "includeRegulatoryRecord": true,
  "includeCondoProjects": true,
  "requireEmail": false,
  "requirePhone": false,
  "maxResults": 20,
  "concurrency": 6,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `items` (type: `string`):

One row per builder licence: contacts, principals, Tarion warranty summary, licence dates and regulatory record.

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

Register totals, per-field fill rates, the detail-call empty rate and every builder that was not delivered, with the reason.

# 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 = {
    "licenceStatuses": [
        "Licensed",
        "Licensed with Conditions"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/hcra-ontario-builder-directory-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 = {
    "licenceStatuses": [
        "Licensed",
        "Licensed with Conditions",
    ],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/hcra-ontario-builder-directory-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "licenceStatuses": [
    "Licensed",
    "Licensed with Conditions"
  ],
  "maxResults": 20
}' |
apify call scrapersdelight/hcra-ontario-builder-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/hcra-ontario-builder-directory-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/J1YqydUlgQCoWeNcE/builds/WoGFcgbNvvdVeWIXv/openapi.json
