ProcureData API Documentation

Every government tender Canadian businesses are eligible to bid on, in one normalized API. Canada-first: federal contracts, tenders, and awards (CanadaBuys, TBS proactive disclosure, SOSA standing offers), Quebec public sector (SEAO), Nova Scotia, Alberta, BC, Yukon, and municipal (Montreal…

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://procuredata-canadian-government-procurement-api.p.rapidapi.com with your key in the headers.
  3. Parse the JSON response.
curl --request GET \
  --url 'https://procuredata-canadian-government-procurement-api.p.rapidapi.com/sources' \
  --header 'x-rapidapi-host: procuredata-canadian-government-procurement-api.p.rapidapi.com' \
  --header 'x-rapidapi-key: YOUR_RAPIDAPI_KEY'
import requests

url = "https://procuredata-canadian-government-procurement-api.p.rapidapi.com/sources"
headers = {"x-rapidapi-host": "procuredata-canadian-government-procurement-api.p.rapidapi.com", "x-rapidapi-key": "YOUR_RAPIDAPI_KEY"}
resp = requests.get(url, headers=headers)
print(resp.json())
const res = await fetch("https://procuredata-canadian-government-procurement-api.p.rapidapi.com/sources", {
  headers: {
    "x-rapidapi-host": "procuredata-canadian-government-procurement-api.p.rapidapi.com",
    "x-rapidapi-key": "YOUR_RAPIDAPI_KEY",
  },
});
const data = await res.json();
console.log(data);
<?php
$ch = curl_init("https://procuredata-canadian-government-procurement-api.p.rapidapi.com/sources");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "x-rapidapi-host: procuredata-canadian-government-procurement-api.p.rapidapi.com",
    "x-rapidapi-key: YOUR_RAPIDAPI_KEY",
]);
echo curl_exec($ch);
require "net/http"
require "uri"

uri = URI("https://procuredata-canadian-government-procurement-api.p.rapidapi.com/sources")
req = Net::HTTP::Get.new(uri)
req["x-rapidapi-host"] = "procuredata-canadian-government-procurement-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://procuredata-canadian-government-procurement-api.p.rapidapi.com/sources", nil)
    req.Header.Add("x-rapidapi-host", "procuredata-canadian-government-procurement-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://procuredata-canadian-government-procurement-api.p.rapidapi.com/sources"))
    .header("x-rapidapi-host", "procuredata-canadian-government-procurement-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 ProcureData tasks.

Endpoint reference

Every ProcureData route. Click through for parameters, examples and a sample response.

GET/sourcesList all data sourcesGET/tender/alerts/unsubscribeUnsubscribe from tender alertsGET/tender/{record_id}/documents/{doc_index}Redirect to a CanadaBuys tender document by indexGET/vendorsSearch and list vendors by nameGET/departmentsSearch and list departmentsGET/department/{name}Department procurement profileGET/vendor/{name}Vendor procurement profileGET/contractSearch contractsGET/tenderSearch tendersGET/awardSearch awardsGET/disclosureSearch proactive disclosure contractsGET/standing_offerSearch standing offers and supply arrangementsGET/pre_solicitationSearch pre-solicitation notices (ACAN, RFI, ITQ)GET/contract/statsContract statisticsGET/tender/statsTender statisticsGET/award/statsAward statisticsGET/disclosure/statsDisclosure statisticsGET/standing_offer/statsStanding offer statisticsGET/pre_solicitation/statsPre-solicitation statisticsGET/contract/coverageRecord count per city for an entity typeGET/tender/coverageRecord count per city for an entity typeGET/award/coverageRecord count per city for an entity typeGET/disclosure/coverageRecord count per city for an entity typeGET/standing_offer/coverageRecord count per city for an entity typeGET/pre_solicitation/coverageRecord count per city for an entity typeGET/procurement/{solicitation_number}Procurement lifecycle for a solicitationGET/tender/feedPro: matched open-tender lead feed (keyword-matched, new-since window)GET/contract/{record_id}Get contract by IDGET/tender/{record_id}Get tender by IDGET/award/{record_id}Get award by IDGET/disclosure/{record_id}Get disclosure by IDGET/standing_offer/{record_id}Get standing offer by IDGET/pre_solicitation/{record_id}Get pre-solicitation notice by ID
Ready to build?Subscribe on RapidAPI to get your key and start calling ProcureData in minutes.
Get your API key →