Documentation menu
Docs / Cookbook / Track $100M+ capital projects under construction

Track $100M+ capital projects under construction

Major 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.

curl --request GET \
  --url 'https://builddata-canadian-construction-data-api.p.rapidapi.com/major_project?status=under_construction&min_value=100000000&sort_by=value&sort_order=desc&limit=25' \
  --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/major_project?status=under_construction&min_value=100000000&sort_by=value&sort_order=desc&limit=25"
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/major_project?status=under_construction&min_value=100000000&sort_by=value&sort_order=desc&limit=25", {
  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/major_project?status=under_construction&min_value=100000000&sort_by=value&sort_order=desc&limit=25");
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/major_project?status=under_construction&min_value=100000000&sort_by=value&sort_order=desc&limit=25")
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/major_project?status=under_construction&min_value=100000000&sort_by=value&sort_order=desc&limit=25", 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/major_project?status=under_construction&min_value=100000000&sort_by=value&sort_order=desc&limit=25"))
    .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());

status accepts proposed, under_construction, complete or on_hold, and matches every source's wording (including French: En realisation and Construction started both count as under_construction). Swap in &municipality=toronto or &category=Transit to narrow by market or sector.

Ready to build?Subscribe on RapidAPI to get your key and start calling BuildData in minutes.
Get your API key →