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
Getting started
QuickstartCookbook
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/zoningGET/sourcesGET/sources/coverageGET/contractor/statsGET/contractor/coverageGET/contractorGET/propertyGET/address/normalizeGET/opening_soonGET/openingGET/businessGET/business/statsGET/business/coverageGET/permit/feedGET/contractor/{name_normalized}GET/permitGET/inspectionGET/licenceGET/development_permitGET/planning_applicationGET/assessmentGET/major_projectGET/permit/statsGET/inspection/statsGET/licence/statsGET/development_permit/statsGET/planning_application/statsGET/assessment/statsGET/major_project/statsGET/permit/coverageGET/inspection/coverageGET/licence/coverageGET/development_permit/coverageGET/planning_application/coverageGET/assessment/coverageGET/major_project/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}Quickstart
Three steps to your first call:
- Subscribe on RapidAPI and copy your key (there is a free tier).
- Call the base URL
https://builddata-canadian-construction-data-api.p.rapidapi.comwith your key in the headers. - Parse the JSON response.
curl --request GET \
--url 'https://builddata-canadian-construction-data-api.p.rapidapi.com/zone' \
--header 'x-rapidapi-host: builddata-canadian-construction-data-api.p.rapidapi.com' \
--header 'x-rapidapi-key: YOUR_RAPIDAPI_KEY'import requests
url = "https://builddata-canadian-construction-data-api.p.rapidapi.com/zone"
headers = {"x-rapidapi-host": "builddata-canadian-construction-data-api.p.rapidapi.com", "x-rapidapi-key": "YOUR_RAPIDAPI_KEY"}
resp = requests.get(url, headers=headers)
print(resp.json())const res = await fetch("https://builddata-canadian-construction-data-api.p.rapidapi.com/zone", {
headers: {
"x-rapidapi-host": "builddata-canadian-construction-data-api.p.rapidapi.com",
"x-rapidapi-key": "YOUR_RAPIDAPI_KEY",
},
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://builddata-canadian-construction-data-api.p.rapidapi.com/zone");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-rapidapi-host: builddata-canadian-construction-data-api.p.rapidapi.com",
"x-rapidapi-key: YOUR_RAPIDAPI_KEY",
]);
echo curl_exec($ch);require "net/http"
require "uri"
uri = URI("https://builddata-canadian-construction-data-api.p.rapidapi.com/zone")
req = Net::HTTP::Get.new(uri)
req["x-rapidapi-host"] = "builddata-canadian-construction-data-api.p.rapidapi.com"
req["x-rapidapi-key"] = "YOUR_RAPIDAPI_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://builddata-canadian-construction-data-api.p.rapidapi.com/zone", nil)
req.Header.Add("x-rapidapi-host", "builddata-canadian-construction-data-api.p.rapidapi.com")
req.Header.Add("x-rapidapi-key", "YOUR_RAPIDAPI_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://builddata-canadian-construction-data-api.p.rapidapi.com/zone"))
.header("x-rapidapi-host", "builddata-canadian-construction-data-api.p.rapidapi.com")
.header("x-rapidapi-key", "YOUR_RAPIDAPI_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 citiesGET/sourcesList all data sourcesGET/sources/coveragePer-source coverage: totals, open tenders, last-30-day activityGET/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/permit/feedPro: matched permit-lead feed (curated, deduplicated, new-since window)GET/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/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/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/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 ID
Ready to build?Subscribe on RapidAPI to get your key and start calling BuildData in minutes.
Get your API key →