Health Canada's drinking water guideline for lead has been 5 micrograms per litre since 2019, down from 10. That change reframed roughly a century of Canadian housing stock as a public health concern. Hamilton, Toronto, Montreal, London, and a growing list of mid-sized municipalities are now well into their lead service line replacement programs, working toward a guideline most of their pipes were never going to meet.
Knob-and-tube wiring sits in a similar bucket. It is not illegal, it is not always dangerous, but most insurance carriers in Canada either refuse to bind new policies on homes that still have it, or they surcharge those policies aggressively. Buyers in Toronto's Annex, Montreal's Plateau, and Vancouver's Strathcona keep walking away from offers when the inspection report flags it. Every party in the deal wishes they had known sooner.
The information needed to make better decisions exists. Plumbing material, construction year, electrical condition flags, water provider, and the geographic concentration of older stock are all known property facts. They are just buried inside individual property condition reports, scattered across municipal archives, and never aggregated into anything you can query at the city level.
This post is about how Houski's property dataset can be used as a starting filter for lead pipe and knob-and-tube risk across older Canadian homes. I want to be careful with the framing here, because this is sensitive data with public health implications, and a database query is never a substitute for a licensed inspection. What it is good for is narrowing the search, prioritizing outreach, and giving home buyers, insurers, journalists, and municipalities a defensible starting point.
What this dataset actually contains
Across the 19 million plus property records on Houski, the relevant fields for this question are:
- plumbing_pipe_material. Values include Copper, PVC, ABS, PEX, Steel, and Cast iron. The field captures the primary plumbing material recorded for the property. Coverage varies by jurisdiction, with Ontario and Quebec generally stronger than the prairies for older homes. The field does not currently carry a dedicated Lead value, so the construction year cohort filter does the heavy lifting for lead service line risk screening.
- construction_year. The single most predictive variable when material data is missing. Pre-1955 in most Canadian cities is a strong correlate for lead service lines. 1900 to 1950 is the window where knob-and-tube was the dominant wiring method.
- construction_material and exterior_finish. Useful secondary signals. Brick and stucco from the 1900-1930 era often correlates with original interior wiring still in place, because rewiring through plaster-and-lath is invasive and expensive.
- need_plumbing_repair and need_electrical_repair. Boolean-ish flags that indicate condition issues have been reported. These are sparse but powerful when present.
- water_provider. Useful for cross-referencing municipal lead service line replacement programs.
- latitude, longitude, postal_code, city, province_abbreviation. For geographic aggregation and mapping.
The dataset will not tell you that a specific home definitely has lead service lines. It will tell you that a specific home is in the high-probability cohort, and that is the question most users actually need answered.
Why construction year is the workhorse
Canada banned the installation of new lead water service lines in the 1975 National Plumbing Code, but the practical cutoff in most cities was earlier. Toronto stopped using lead for new service connections around 1955. Montreal's transition was gradual through the 1950s. Hamilton stopped specifying lead around 1955 as well. In practice, if a home was built before 1955 and the service line has not been documented as replaced, the prior probability of lead is high enough to warrant testing.
Knob-and-tube wiring follows a similar pattern. It was the dominant residential wiring method from roughly 1900 to 1940, was phased down through the 1940s as armoured cable became cheaper, and was effectively gone from new construction by the early 1950s. Homes built between 1900 and 1950 that have not been documented as fully rewired sit in the high-probability cohort.
Houski's construction_year field is one of the most complete fields in the dataset for older properties, because it is built from public, government, and crowdsourced data sources. That makes vintage-based filtering reliable even when the more specific material fields are sparse.
Example one: Toronto pre-1955 homes by Forward Sortation Area
A journalist covering Toronto's lead service line replacement program wants to know which neighbourhoods have the largest concentration of homes that probably still have lead service connections. The Forward Sortation Area, the first three characters of the postal code, is the right unit of analysis because it lines up with how Toronto Water organizes its replacement zones.
The /aggregate endpoint returns one aggregation per call, scoped to a country, province, city, or community, and the regular filter operators (_lte, _gte, _in, and so on) apply on top. To get a per-Forward-Sortation-Area count, the cleanest path is to pull the candidate property rows from /properties with select=postal_code and count by Forward Sortation Area client-side. The aggregate endpoint cannot break a single answer into per-prefix buckets in one shot.
We would loop through paginated /properties responses, slice the first three characters off the postal code, and count by Forward Sortation Area client-side. The underlying call looks like this:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
import requests
params = {}
params['api_key'] = 'YOUR_API_KEY'
params['city'] = 'toronto'
params['construction_year_gte'] = '1880'
params['construction_year_lte'] = '1954'
params['country_abbreviation'] = 'ca'
params['property_type_in'] = 'House,Duplex'
params['province_abbreviation'] = 'on'
params['results_per_page'] = '10'
params['select'] = 'postal_code'
response = requests.get('https://api.houski.ca/properties', params=params)
if response.status_code == 200:
json_data = response.json()
print(json_data)
# You must copy the PropertiesResponse type declarations from the
# Houski API documentation to strongly type the response
typed_response = PropertiesResponse.from_dict(json_data)
# Log the response
print(typed_response)
else:
print(f'Failed to get data: {response}')
{
"cache_hit": true,
"cost_cents": 0.29999998211860657,
"data": [
{
"address": "325 2395 Bayview Avenue",
"postal_code": "M2L1A2",
"property_id": "1079ceeef16372b5"
},
{
"address": "31 John Street",
"postal_code": "M9N1J4",
"property_id": "14b2a0a9924b91e5"
},
{
"address": "7 Bala Avenue",
"postal_code": "M6M2C9",
"property_id": "17d516ee088a8031"
},
{
"address": "A 173 Palmerston Avenue",
"postal_code": "M6J2J3",
"property_id": "18587e3c31994c3f"
},
{
"address": "22 Lorraine Gardens",
"postal_code": "M9B4Z4",
"property_id": "19b348a16dbb5d1"
},
{
"address": "9 Atkinson Avenue",
"postal_code": "M1E4B6",
"property_id": "1bebbd799aa477d2"
},
{
"address": "144 Pearson Avenue",
"postal_code": "M6R1G5",
"property_id": "1cfcd5c2ddbf5079"
},
{
"address": "689 Dovercourt Road",
"postal_code": "M6H2W7",
"property_id": "1e4396701a917e1a"
},
{
"address": "13 Rolyat Street",
"postal_code": "M6J1S5",
"property_id": "1f6ce616e9dee5fe"
},
{
"address": "4 Kim Court",
"postal_code": "M1K3R5",
"property_id": "1fc5571ad67d15f8"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 9
},
"price_quote": false,
"result_total": 87,
"time_ms": 95,
"ui_info": {
"city": "Toronto",
"city_id": "6cdbdee2492718ed",
"city_link": "ca/on/toronto",
"city_slug": "toronto",
"country": "Canada",
"country_abbreviation": "CA",
"country_abbreviation_id": "9ace2b6431b7f1be",
"country_abbreviation_link": "ca",
"country_slug": "canada",
"province": "Ontario",
"province_abbreviation": "ON",
"province_abbreviation_id": "146699ee774499d3",
"province_abbreviation_link": "ca/on",
"province_slug": "ontario"
}
}
A typical response from Toronto will surface M6G (Christie Pits and Dovercourt), M6H (Dufferin Grove), M5R (the Annex), M4K (Riverdale), and M6J (Trinity Bellwoods) as the largest concentrations. Those are also the neighbourhoods where Toronto Water has been running door-to-door replacement outreach.
The reason I want the journalist to publish only the neighbourhood-level counts, and never the individual property records behind them, is that the rolled-up number avoids any temptation to publish a list of specific addresses with suspected lead pipes. The neighbourhood-level number is the responsible unit of disclosure for that kind of story.
Example two: Montreal Plateau Mont-Royal pre-1925 stock
Montreal's Plateau Mont-Royal is one of the densest concentrations of pre-1925 housing in Canada. A municipal water utility analyst wants to pull the list of properties in the borough where the construction year is before 1925, so the outreach team can prioritize home visits. The construction year filter is the primary tool here, since the at-risk era for lead service connections in Montreal is well-defined by vintage.
In Montreal, service lines installed before about 1960 were frequently lead pipes or galvanized pipes connected to lead gooseneck fittings at the main, and corrosion in older metal service lines can leach accumulated lead over time. The pre-1925 cohort sits squarely in the highest-probability window.
The underlying call against /properties, scoped to the Plateau Mont-Royal borough with construction year filters, looks like this:
const houski_data = async () => {
const url = new URL('https://api.houski.ca/properties');
url.searchParams.set('api_key', 'YOUR_API_KEY');
url.searchParams.set('city', 'montreal');
url.searchParams.set('community', 'Plateau-Mont-Royal');
url.searchParams.set('construction_year_lte', '1924');
url.searchParams.set('country_abbreviation', 'ca');
url.searchParams.set('province_abbreviation', 'qc');
url.searchParams.set('results_per_page', '10');
url.searchParams.set('select', 'address,postal_code,construction_year,plumbing_pipe_material,water_provider,latitude,longitude');
const response = await fetch(url);
const data = await response.json();
// Log the response
console.log(data);
}
(async () => {
await houski_data();
})();
{
"cache_hit": true,
"cost_cents": 3.499999523162842,
"data": [
{
"address": "2328 Terrasse Mercure",
"construction_year": 1910,
"latitude": 45.53565979003906,
"longitude": -73.5652084350586,
"plumbing_pipe_material": "Copper",
"postal_code": "H2H1R7",
"property_id": "1001cba1bb37ac4f",
"water_provider": "Municipal"
},
{
"address": "4317 Rue De Bordeaux",
"construction_year": 1903,
"latitude": 45.53330993652344,
"longitude": -73.56986236572266,
"plumbing_pipe_material": "Copper",
"postal_code": "H2H1Z4",
"property_id": "10023f3fa88c95b8",
"water_provider": "Municipal"
},
{
"address": "4710 Rue De Mentana",
"construction_year": 1900,
"latitude": 45.5281982421875,
"longitude": -73.58322143554688,
"plumbing_pipe_material": "Copper",
"postal_code": "H2J3B7",
"property_id": "1002c2afb9c02fe",
"water_provider": "Municipal"
},
{
"address": "410 Boulevard Saint-Joseph O",
"construction_year": 1910,
"latitude": 45.517940521240234,
"longitude": -73.594970703125,
"plumbing_pipe_material": "Copper",
"postal_code": "H2V4A7",
"property_id": "1002e1976b8c3212",
"water_provider": "Municipal"
},
{
"address": "4431 Avenue Henri-Julien",
"construction_year": 1910,
"latitude": 45.52254867553711,
"longitude": -73.58268737792969,
"plumbing_pipe_material": "Copper",
"postal_code": "H2W2L9",
"property_id": "10036d2eec3aa05",
"water_provider": "Municipal"
},
{
"address": "A 4227 Chapleau Rue",
"construction_year": 1910,
"latitude": 45.53678131103515,
"longitude": -73.56473541259766,
"plumbing_pipe_material": "Copper",
"postal_code": "H2H2K7",
"property_id": "10039ee16e48b24",
"water_provider": "Municipal"
},
{
"address": "1587 Laurier Avenue E",
"construction_year": 1910,
"latitude": 45.53514862060547,
"longitude": -73.58256530761719,
"plumbing_pipe_material": "Copper",
"postal_code": "H2J1J1",
"property_id": "100455bbb471af84",
"water_provider": "Municipal"
},
{
"address": "4229 Rue Saint-Urbain",
"construction_year": 1910,
"latitude": 45.51715850830078,
"longitude": -73.5830078125,
"plumbing_pipe_material": "Copper",
"postal_code": "H2W1V6",
"property_id": "100495b63d49f2ef",
"water_provider": "Municipal"
},
{
"address": "4029 A De Bullion Rue",
"construction_year": 1910,
"latitude": 45.51838684082031,
"longitude": -73.57781219482422,
"plumbing_pipe_material": "Copper",
"postal_code": "H2W2E3",
"property_id": "10053bd0859c945f",
"water_provider": "Municipal"
},
{
"address": "9 3441 Jeanne-Mance Rue",
"construction_year": 1910,
"latitude": 45.5098991394043,
"longitude": -73.57181549072266,
"plumbing_pipe_material": "Copper",
"postal_code": "H2X2J7",
"property_id": "1005c3dfa69da686",
"water_provider": "Municipal"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 12725
},
"price_quote": false,
"result_total": 127242,
"time_ms": 75,
"ui_info": {
"city": "Montréal",
"city_id": "17714d7a0b7d0e18",
"city_link": "ca/qc/montreal",
"city_slug": "montreal",
"community": "Plateau-Mont-Royal",
"community_id": "a8733e9f9f272951",
"community_link": "ca/qc/montreal/plateau-mont-royal",
"community_slug": "plateau-mont-royal",
"country": "Canada",
"country_abbreviation": "CA",
"country_abbreviation_id": "9ace2b6431b7f1be",
"country_abbreviation_link": "ca",
"country_slug": "canada",
"province": "Quebec",
"province_abbreviation": "QC",
"province_abbreviation_id": "a94c1625e3965742",
"province_abbreviation_link": "ca/qc",
"province_slug": "quebec"
}
}
A note for the analyst running this. The community filter against the canonical borough name is the right approach in Montreal, because postal code Forward Sortation Areas in the Plateau spill into Mile End and the Mile End spill into Outremont. Borough boundaries are how the city actually organizes service work.
Example three: insurance carrier portfolio scan
A national property insurance carrier wants to understand its exposure to knob-and-tube-era housing across its Ontario book. The carrier already has the addresses of every insured property. What they need is a way to flag policies where the underlying home is in the high-probability cohort, so the underwriting team can flag renewals for inspection or surcharge.
The pattern here is to enrich the existing portfolio with two Houski fields, construction_year and need_electrical_repair, then segment. For each policy row we would resolve the address through the search endpoint first, then pull that property_id from /properties. The block below shows the field shape of a Toronto pull:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
import requests
params = {}
params['api_key'] = 'YOUR_API_KEY'
params['city'] = 'toronto'
params['country_abbreviation'] = 'ca'
params['province_abbreviation'] = 'on'
params['results_per_page'] = '1'
params['select'] = 'construction_year,need_electrical_repair,plumbing_pipe_material'
response = requests.get('https://api.houski.ca/properties', params=params)
if response.status_code == 200:
json_data = response.json()
print(json_data)
# You must copy the PropertiesResponse type declarations from the
# Houski API documentation to strongly type the response
typed_response = PropertiesResponse.from_dict(json_data)
# Log the response
print(typed_response)
else:
print(f'Failed to get data: {response}')
{
"cache_hit": true,
"cost_cents": 0.3199999928474426,
"data": [
{
"address": "2202 62 Forest Manor Road",
"construction_year": 2014,
"need_electrical_repair": false,
"plumbing_pipe_material": "Copper",
"property_id": "10000a939ca95e87"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 1361251
},
"price_quote": false,
"result_total": 1361251,
"time_ms": 85,
"ui_info": {
"city": "Toronto",
"city_id": "6cdbdee2492718ed",
"city_link": "ca/on/toronto",
"city_slug": "toronto",
"country": "Canada",
"country_abbreviation": "CA",
"country_abbreviation_id": "9ace2b6431b7f1be",
"country_abbreviation_link": "ca",
"country_slug": "canada",
"province": "Ontario",
"province_abbreviation": "ON",
"province_abbreviation_id": "146699ee774499d3",
"province_abbreviation_link": "ca/on",
"province_slug": "ontario"
}
}
Once enriched, the knob-and-tube cohort is build year 1900 to 1950, the lead pipe cohort is pre-1955 (the construction year cohort is the primary screen, since the field does not currently carry a dedicated Lead value), and the highest-priority renewals are the intersection of the knob-and-tube vintage with need_electrical_repair set to true.
For a carrier with a hundred thousand Ontario policies, this kind of scan typically surfaces a few thousand high-priority renewals. That is a manageable inspection queue, not an unworkable one, and it lets the underwriting team focus surcharges and refusals where the actual risk lives instead of applying a blanket vintage rule.
If the carrier wants to do this at portfolio scale without per-row API calls, the Houski team can do a one-time bulk match against an uploaded address list. That is usually the right shape for an annual underwriting review.
Example four: Hamilton lead service line risk heatmap
Hamilton has been one of the most aggressive Canadian municipalities on lead service line replacement, partly because the city's housing stock skews older and partly because Hamilton Water has done a good job of communicating the program. A municipal staffer or a journalist might want a postal code level heatmap of pre-1955 housing concentration as a proxy for lead service line risk.
The workflow is pull-then-roll-up. We would ask /properties for every pre-1955 single-family record in Hamilton with select set to postal_code, latitude, and longitude, group by postal code client-side, and feed the per-postal-code counts plus centroids into folium. The underlying call looks like this:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
import requests
params = {}
params['api_key'] = 'YOUR_API_KEY'
params['city'] = 'hamilton'
params['construction_year_gte'] = '1880'
params['construction_year_lte'] = '1954'
params['country_abbreviation'] = 'ca'
params['property_type_in'] = 'House,Duplex'
params['province_abbreviation'] = 'on'
params['results_per_page'] = '10'
params['select'] = 'postal_code,latitude,longitude'
response = requests.get('https://api.houski.ca/properties', params=params)
if response.status_code == 200:
json_data = response.json()
print(json_data)
# You must copy the PropertiesResponse type declarations from the
# Houski API documentation to strongly type the response
typed_response = PropertiesResponse.from_dict(json_data)
# Log the response
print(typed_response)
else:
print(f'Failed to get data: {response}')
{
"cache_hit": true,
"cost_cents": 0.4999999701976776,
"data": [
{
"address": "80 Arcade Crescent",
"latitude": 43.242897033691406,
"longitude": -79.87916564941406,
"postal_code": "L9C3J2",
"property_id": "100651327ae78370"
},
{
"address": "543 Waterloo Street",
"latitude": 43.24728012084961,
"longitude": -79.77293395996094,
"postal_code": "L8H6V6",
"property_id": "10243024b6f4eff2"
},
{
"address": "26 Mars Avenue",
"latitude": 43.265869140625,
"longitude": -79.8472671508789,
"postal_code": "L8L3V8",
"property_id": "10312abb397f654c"
},
{
"address": "141 Wexford Avenue S",
"latitude": 43.236839294433594,
"longitude": -79.81429290771484,
"postal_code": "L8K2N9",
"property_id": "10a1f304e51ac407"
},
{
"address": "424 Cochrane Road",
"latitude": 43.22797775268555,
"longitude": -79.80428314208984,
"postal_code": "L8K3G9",
"property_id": "10bc85376524ec54"
},
{
"address": "103 Graham Avenue S",
"latitude": 43.23722076416016,
"longitude": -79.81639862060547,
"postal_code": "L8K2M2",
"property_id": "1109bf8eb2288ec8"
},
{
"address": "196 Paling Avenue",
"latitude": 43.24312973022461,
"longitude": -79.79923248291016,
"postal_code": "L8H5J7",
"property_id": "1133b1ea7230fcf2"
},
{
"address": "7375 Cathcart Street",
"latitude": 43.258426666259766,
"longitude": -79.85845184326172,
"postal_code": "L8R1M6",
"property_id": "11549cf814ce66f"
},
{
"address": "166 Young Street",
"latitude": 43.2495231628418,
"longitude": -79.8645248413086,
"postal_code": "L8N1V8",
"property_id": "11c34883dccb6c8"
},
{
"address": "1 16 Gage Avenue S",
"latitude": 43.24757385253906,
"longitude": -79.8291244506836,
"postal_code": "L8M3C6",
"property_id": "11d79d852b0d0887"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 119
},
"price_quote": false,
"result_total": 1183,
"time_ms": 80,
"ui_info": {
"city": "Hamilton",
"city_id": "46981c1b562b4fdc",
"city_link": "ca/on/hamilton",
"city_slug": "hamilton",
"country": "Canada",
"country_abbreviation": "CA",
"country_abbreviation_id": "9ace2b6431b7f1be",
"country_abbreviation_link": "ca",
"country_slug": "canada",
"province": "Ontario",
"province_abbreviation": "ON",
"province_abbreviation_id": "146699ee774499d3",
"province_abbreviation_link": "ca/on",
"province_slug": "ontario"
}
}
The output drops as a standalone HTML file the staffer can share with the rest of the program team. Hamilton's Code 7 area, the lower city neighbourhoods around Sherman, Strathcona, and Crown Point, will light up the map. So will Westdale and parts of Stoney Creek's older core.
A municipality can layer this against the city's own service line inventory to find postal codes where the inventory is incomplete and the housing stock is in the at-risk vintage. Those are the places to send the next round of door knockers.
How home buyers can pre-screen offers
The use case I get asked about most often by individual users is the home buyer scenario. Someone is shopping for a starter home in Toronto's east end, in Montreal's Sud-Ouest, in Hamilton's lower city, and they want to know before they fall in love with a place whether they are walking into a lead pipe replacement bill or a knob-and-tube insurance refusal.
A specific address is resolved through the search endpoint first, then pulled by property_id from /properties. The block below is a live call against the real API showing the field shape of those pulls for Toronto:
curl -X GET "https://api.houski.ca/properties?api_key=YOUR_API_KEY&city=toronto&country_abbreviation=ca&province_abbreviation=on&results_per_page=5&select=construction_year,plumbing_pipe_material,need_plumbing_repair,need_electrical_repair,water_provider"
{
"cache_hit": true,
"cost_cents": 2.5999999046325684,
"data": [
{
"address": "2202 62 Forest Manor Road",
"construction_year": 2014,
"need_electrical_repair": false,
"need_plumbing_repair": false,
"plumbing_pipe_material": "Copper",
"property_id": "10000a939ca95e87",
"water_provider": "Municipal"
},
{
"address": "504 35 Walmer Road",
"construction_year": 2011,
"need_electrical_repair": false,
"need_plumbing_repair": false,
"plumbing_pipe_material": "Copper",
"property_id": "100016a8f4f4f1a9",
"water_provider": "Municipal"
},
{
"address": "1108 2261 Lake Shore Boulevard W",
"construction_year": 2022,
"need_electrical_repair": false,
"need_plumbing_repair": false,
"plumbing_pipe_material": "Copper",
"property_id": "10002ea98a9d7121",
"water_provider": "Municipal"
},
{
"address": "546 Indian Grove",
"construction_year": 2011,
"need_electrical_repair": false,
"need_plumbing_repair": false,
"plumbing_pipe_material": "Copper",
"property_id": "1000336e22bf06cc",
"water_provider": "Municipal"
},
{
"address": "53 Sellers Avenue",
"construction_year": 2011,
"need_electrical_repair": false,
"need_plumbing_repair": false,
"plumbing_pipe_material": "Copper",
"property_id": "10005963503d7807",
"water_provider": "Municipal"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 272251
},
"price_quote": false,
"result_total": 1361251,
"time_ms": 88,
"ui_info": {
"city": "Toronto",
"city_id": "6cdbdee2492718ed",
"city_link": "ca/on/toronto",
"city_slug": "toronto",
"country": "Canada",
"country_abbreviation": "CA",
"country_abbreviation_id": "9ace2b6431b7f1be",
"country_abbreviation_link": "ca",
"country_slug": "canada",
"province": "Ontario",
"province_abbreviation": "ON",
"province_abbreviation_id": "146699ee774499d3",
"province_abbreviation_link": "ca/on",
"province_slug": "ontario"
}
}
The response will give the buyer a vintage cohort answer in seconds. If the construction year comes back as 1908 and there is no recorded rewire or pipe upgrade, the buyer knows to ask their inspector to look closely at the electrical panel, the visible wiring in the basement, and the water service line at the meter. They also know to call their insurance broker before the conditional period ends, not after.
This is not a substitute for the inspection. It is a way to ask better questions during the inspection.
What municipalities can actually do with this
Lead service line replacement programs in Canada are funded but undersubscribed. The bottleneck is usually not money, it is contacting homeowners and getting them to opt in for the city-side replacement at the same time the homeowner replaces the private-side line. If the city replaces only the public side and leaves a galvanized or lead private side connected, lead levels can actually spike for a period because the disturbance dislodges accumulated scale.
A municipal program team can use the Houski dataset to do three things.
First, prioritize outreach geographically. The per-Forward-Sortation-Area counting workflow surfaces the streets where the replacement program will have the highest yield per door knocked.
Second, cross-reference against the city's own lead service line inventory to find the gaps. If the inventory says a block is unknown, and the housing stock on that block is uniformly pre-1950 brick semi-detached, the prior probability of lead is high enough to send a crew to verify rather than waiting for the homeowner to call in.
Third, target communications materials by language and tenure. Houski does not carry per-household tenure or language data, though area-level fields include the most-spoken languages of each neighbourhood. The construction year and property type signals also correlate well enough with neighbourhood demographics that a program team can pair the property data with the demographic_* fields Houski exposes to refine the message.
Limitations, said plainly
A few honest caveats about what this dataset cannot do.
Coverage of the plumbing_pipe_material field is uneven, and it varies by jurisdiction. Some cities have much deeper coverage than others. In many parts of Canada, especially smaller cities and rural areas, the field will be null for most properties. In those cases, fall back to the construction year cohort filter and treat the result as a starting list, not a final answer.
Many older homes have been partially upgraded. A 1910 home in Cabbagetown may have had its knob-and-tube replaced in the kitchen and bathroom during a 1990s renovation while the third floor and attic still run original wiring. The Houski dataset cannot see inside the walls. The construction year cohort filter is a probability statement about the population, not a deterministic statement about any specific home.
Lead service lines in particular often have shared responsibility. The city owns the line from the main to the property line, the homeowner owns the line from the property line into the house. Either side can be lead, neither side, or both. A complete picture requires the municipality's inventory and a physical inspection of the homeowner's side.
Older galvanized service lines are a yellow flag, not a green one. Galvanized service lines installed before about 1960 frequently corrode in ways that release accumulated lead, even when no lead pipe was ever installed. Treating older galvanized as safe is a mistake.
Finally, this is sensitive data. Publishing address-level lead pipe risk lists is irresponsible in almost every context. Aggregate by postal code or Forward Sortation Area for public-facing analysis. Use property-level queries only for the homeowner of the specific property, the insurance carrier doing portfolio underwriting on policies they hold, or the municipal program team operating under a public health mandate.
Where this fits in the bigger picture
The pattern I keep coming back to with property data is that the most useful queries are not the flashy ones. Comparable listing analysis and automated valuations get the attention, but the queries that actually move public health and consumer protection forward are the boring ones. Pull every pre-1955 home in a postal code. Count knob-and-tube vintage stock by neighbourhood. Flag a renewal queue. Render a heatmap.
The reason this kind of work has been hard to do in Canada is not that the data does not exist. It is that the data has been locked inside individual property condition reports, municipal silos, and insurance carrier internal systems. Aggregating it into one queryable dataset is the unlock.
If you are a journalist covering municipal lead replacement programs, an underwriter scoping older-home risk, a municipal water utility planner, or a buyer trying not to walk into a six-figure remediation bill, the Houski dataset can give you a defensible starting point in a few API calls.
You can sign up and start querying at /api-documentation/quick-start. Pricing starts at $99 a month, which covers all four of the examples above with plenty of headroom for your own variations.
Be careful with the framing when you publish or act on the results. The dataset is a probability filter, not a verdict. Used responsibly it can speed up replacement programs, refine underwriting, and help individual buyers make better decisions. Used carelessly it can stigmatize neighbourhoods that are already overlooked. The difference is in how you aggregate, how you communicate, and whether you remember that there is a real home and a real family behind every row.
Alex Wilkinson CEO, Houski
