{
  "openapi": "3.0.1",
  "info": {
    "title": "HCRA Ontario Builder Directory Scraper — Licensed Builders",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "WoGFcgbNvvdVeWIXv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~hcra-ontario-builder-directory-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-hcra-ontario-builder-directory-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/scrapersdelight~hcra-ontario-builder-directory-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-hcra-ontario-builder-directory-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/scrapersdelight~hcra-ontario-builder-directory-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-hcra-ontario-builder-directory-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": {
          "licenceStatuses": {
            "title": "Licence statuses",
            "uniqueItems": true,
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string",
              "enum": [
                "Licensed",
                "Licensed with Conditions",
                "Licensed - NOP to Refuse a License",
                "Licensed - NOP to Revoke a License",
                "Licensed - NOP Under Appeal",
                "Suspended",
                "Expired",
                "Revoked",
                "Refused",
                "Cancelled",
                "Resigned",
                "Unlicensed"
              ],
              "enumTitles": [
                "Licensed",
                "Licensed with Conditions",
                "Licensed — NOP to refuse (still licensed)",
                "Licensed — NOP to revoke (still licensed)",
                "Licensed — NOP under appeal (still licensed)",
                "Suspended",
                "Expired",
                "Revoked",
                "Refused",
                "Cancelled",
                "Resigned",
                "Unlicensed"
              ]
            },
            "default": [
              "Licensed",
              "Licensed with Conditions"
            ]
          },
          "licenceNumbers": {
            "title": "Licence numbers (lookup mode)",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string"
            }
          },
          "builderNames": {
            "title": "Builder name contains",
            "type": "array",
            "description": "Keep only builders whose legal or operating name contains any of these words (case-insensitive), e.g. 'homes', 'mattamy', 'developments'.",
            "items": {
              "type": "string"
            }
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "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').",
            "items": {
              "type": "string"
            }
          },
          "insolventOnly": {
            "title": "Only builders flagged insolvent",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "includePrincipals": {
            "title": "Include principals, directors and officers",
            "type": "boolean",
            "description": "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.",
            "default": true
          },
          "includeRegulatoryRecord": {
            "title": "Include regulatory record",
            "type": "boolean",
            "description": "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.",
            "default": true
          },
          "includeCondoProjects": {
            "title": "Include condominium projects",
            "type": "boolean",
            "description": "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.",
            "default": true
          },
          "requireEmail": {
            "title": "Only builders with an e-mail",
            "type": "boolean",
            "description": "Deliver only builders that file an e-mail address. Builders without one are read but never charged.",
            "default": false
          },
          "requirePhone": {
            "title": "Only builders with a phone",
            "type": "boolean",
            "description": "Deliver only builders that file a phone number. Builders without one are read but never charged.",
            "default": false
          },
          "maxResults": {
            "title": "Max builders",
            "minimum": 0,
            "type": "integer",
            "description": "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.",
            "default": 75
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "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.",
            "default": 6
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Hard wall-clock deadline for each request. Failed requests are retried on a fresh connection.",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "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.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}