BuildData API Documentation
Canada-wide construction data API across ten datasets: building permits, building inspections, business licences, new business openings, development permits, planning applications, property assessments, contractor profiles, and zoning, covering dozens of Canadian cities and provinces.
Documentation menu
Cookbook
OverviewNew permit leadsHighest-value permitsFurnace and rewire permitsPermits near a pointMegaproject pipelineProjects near a siteZoning at an addressEverything at one addressEndpoints
GET/zoneGET/geocodeGET/reverse-geocodeGET/zoningPOST/permit/estimateGET/contractor/statsGET/contractor/coverageGET/contractorGET/propertyGET/address/normalizeGET/opening_soonGET/openingGET/businessGET/business/statsGET/business/coverageGET/contractor/{name_normalized}GET/permitGET/inspectionGET/licenceGET/development_permitGET/planning_applicationGET/assessmentGET/major_projectGET/heritage_statusGET/occupancy_permitGET/permit/statsGET/inspection/statsGET/licence/statsGET/development_permit/statsGET/planning_application/statsGET/assessment/statsGET/major_project/statsGET/heritage_status/statsGET/occupancy_permit/statsGET/permit/coverageGET/inspection/coverageGET/licence/coverageGET/development_permit/coverageGET/planning_application/coverageGET/assessment/coverageGET/major_project/coverageGET/heritage_status/coverageGET/occupancy_permit/coverageGET/permit/{record_id}/historyGET/permit/{record_id}GET/inspection/{record_id}GET/licence/{record_id}GET/development_permit/{record_id}GET/planning_application/{record_id}GET/assessment/{record_id}GET/major_project/{record_id}GET/heritage_status/{record_id}GET/occupancy_permit/{record_id}Quickstart
Three steps to your first call:
- Sign up at builddata.ca/subscribe/ and copy your key (free tier, no card).
- Call the base URL
https://api.builddata.cawith your key in the headers. - Parse the JSON response.
curl --request GET \
--url 'https://api.builddata.ca/permit?municipality=toronto&limit=5' \
--header 'X-API-Key: YOUR_API_KEY'import requests
url = "https://api.builddata.ca/permit?municipality=toronto&limit=5"
headers = {"X-API-Key": "YOUR_API_KEY"}
resp = requests.get(url, headers=headers)
print(resp.json())const res = await fetch("https://api.builddata.ca/permit?municipality=toronto&limit=5", {
headers: {
"X-API-Key": "YOUR_API_KEY",
},
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.builddata.ca/permit?municipality=toronto&limit=5");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"X-API-Key: YOUR_API_KEY",
]);
echo curl_exec($ch);require "net/http"
require "uri"
uri = URI("https://api.builddata.ca/permit?municipality=toronto&limit=5")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = "YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.bodypackage main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.builddata.ca/permit?municipality=toronto&limit=5", nil)
req.Header.Add("X-API-Key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}import java.net.URI;
import java.net.http.*;
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.builddata.ca/permit?municipality=toronto&limit=5"))
.header("X-API-Key", "YOUR_API_KEY")
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());Guides
Getting started and authenticationGet an API key and make your first authenticated call in under five minutes.Filtering, search and paginationNarrow results with filters and full-text search, and page through large result sets.Export results to CSV or a spreadsheetPull records across pages and write them to a CSV you can open in Excel or Sheets.Monitor new recordsPoll for records added since your last check and act on them automatically.Errors and troubleshootingWhat each status code means, and how to read the message the API sends back.
Cookbook
Copy-paste recipes for common BuildData tasks.
Build a weekly new-permit lead listPull renovation permits issued in the last week for a city, newest first, as a lead stream for sales.Find the highest-value permits in a city this monthSort a city's permits by construction value to surface the biggest projects.Find furnace, rewire and repipe permits by tradeA trade permit is pulled for work on one system rather than the building, so it names the job directly: trade=mechanical is a furnace or HVAC change, trade=electrical a rewire, trade=plumbing a repipe.List permits within a radius of a coordinateFind recent permit activity around a job site or property using a lat/lng and radius.Track $100M+ capital projects under constructionMajor projects are the earliest and largest end of the construction funnel, years ahead of a building permit. Filter to the ones actually being built and rank them by capital cost.Find planned projects within range of a locationSurface upcoming capital work around a branch, depot or job site so you can plan coverage before the work goes to tender.Resolve the zoning district at a street addressGeocode an address, then look up the zoning district at that exact coordinate.Pull every record at a single street addressOne call returns the permits, inspections, development permits, assessment and licences recorded at an address, joined on a normalized form of the address so the datasets line up. No geocoding step, and no radius to guess at.
Endpoint reference
Every BuildData route. Click through for parameters, examples and a sample response.
GET/zoneGet ZoneGET/geocodeGeocode a Canadian street address to coordinates and postal codeGET/reverse-geocodeReverse geocode coordinates to the nearest Canadian address and postal codeGET/zoningList zoning districts for a city, or zoning coverage across citiesPOST/permit/estimatePro: estimated construction value for 1..N permits (by record id or attributes)GET/contractor/statsContractor aggregate statsGET/contractor/coverageContractor count per cityGET/contractorSearch Canadian contractor profilesGET/propertyEvery BuildData record at one addressGET/address/normalizeCanonical form of a street addressGET/opening_soonAddresses where a business is likely opening soonGET/openingNew business openingsGET/businessCanadian businesses: opened, active, closed, opening soonGET/business/statsBusiness counts by status and categoryGET/business/coverageBusiness count per cityGET/contractor/{name_normalized}Get contractor profile by normalized nameGET/permitSearch building permitsGET/inspectionSearch building inspectionsGET/licenceSearch business licencesGET/development_permitSearch development permitsGET/planning_applicationSearch planning applicationsGET/assessmentSearch property assessmentsGET/major_projectSearch major capital projectsGET/heritage_statusSearch heritage designationsGET/occupancy_permitSearch occupancy permitsGET/permit/statsBuilding permit statisticsGET/inspection/statsBuilding inspection statisticsGET/licence/statsBusiness licence statisticsGET/development_permit/statsDevelopment permit statisticsGET/planning_application/statsPlanning application statisticsGET/assessment/statsProperty assessment statisticsGET/major_project/statsMajor project statisticsGET/heritage_status/statsHeritage designation statisticsGET/occupancy_permit/statsOccupancy permit statisticsGET/permit/coverageBuilding permit count per cityGET/inspection/coverageInspection count per cityGET/licence/coverageBusiness licence count per cityGET/development_permit/coverageDevelopment permit count per cityGET/planning_application/coveragePlanning application count per cityGET/assessment/coverageProperty assessment count per cityGET/major_project/coverageMajor project count per cityGET/heritage_status/coverageHeritage designation count per cityGET/occupancy_permit/coverageOccupancy permit count per cityGET/permit/{record_id}/historyPlanning + development application history for a permitGET/permit/{record_id}Get permit by IDGET/inspection/{record_id}Get inspection by IDGET/licence/{record_id}Get licence by IDGET/development_permit/{record_id}Get development permit by IDGET/planning_application/{record_id}Get planning application by IDGET/assessment/{record_id}Get property assessment by IDGET/major_project/{record_id}Get major project by IDGET/heritage_status/{record_id}Get heritage designation by IDGET/occupancy_permit/{record_id}Get occupancy permit by ID
Ready to build?Create a free key and start calling BuildData in minutes. No card required.
Get your API key →