BuildData API Documentation

Canada-wide construction data API across eight datasets: building permits, building inspections, business licences, development permits, planning applications, property assessments, contractor profiles, and zoning, covering dozens of Canadian cities and provinces.

Documentation menu

Quickstart

Three steps to your first call:

  1. Subscribe on RapidAPI and copy your key (there is a free tier).
  2. Call the base URL https://builddata-canadian-construction-data-api.p.rapidapi.com with your key in the headers.
  3. 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.body
package 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

Cookbook

Copy-paste recipes for common BuildData tasks.

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/contractor/statsContractor aggregate statsGET/contractor/coverageContractor count per cityGET/contractor/{name_normalized}Get contractor profile by normalized nameGET/contractorSearch Canadian contractor profilesGET/permitSearch building permitsGET/inspectionSearch building inspectionsGET/licenceSearch business licencesGET/development_permitSearch development permitsGET/planning_applicationSearch planning applicationsGET/assessmentSearch records by entity typeGET/permit/statsBuilding permit statisticsGET/inspection/statsBuilding inspection statisticsGET/licence/statsBusiness licence statisticsGET/development_permit/statsDevelopment permit statisticsGET/planning_application/statsPlanning application statisticsGET/assessment/statsStats for an entity typeGET/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/coverageRecord count per city for an entity typeGET/permit/feedPro: matched permit-lead feed (curated, deduplicated, new-since window)GET/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 record by ID
Ready to build?Subscribe on RapidAPI to get your key and start calling BuildData in minutes.
Get your API key →