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
Getting started
QuickstartEndpoints
GET/sourcesGET/tender/alerts/unsubscribeGET/tender/{record_id}/documents/{doc_index}GET/vendorsGET/departmentsGET/department/{name}GET/vendor/{name}GET/contractGET/tenderGET/awardGET/disclosureGET/standing_offerGET/pre_solicitationGET/contract/statsGET/tender/statsGET/award/statsGET/disclosure/statsGET/standing_offer/statsGET/pre_solicitation/statsGET/contract/coverageGET/tender/coverageGET/award/coverageGET/disclosure/coverageGET/standing_offer/coverageGET/pre_solicitation/coverageGET/procurement/{solicitation_number}GET/tender/feedGET/contract/{record_id}GET/tender/{record_id}GET/award/{record_id}GET/disclosure/{record_id}GET/standing_offer/{record_id}GET/pre_solicitation/{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://procuredata-canadian-government-procurement-api.p.rapidapi.comwith your key in the headers. - 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.bodypackage 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
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.
Cookbook
Copy-paste recipes for common ProcureData tasks.
Find open tenders that match your keywordsSearch live tenders by keyword above a minimum value, sorted by closing date.See which contracts a competitor has wonPull every award booked by a named vendor, newest first, for competitive intelligence.Get a department's procurement profileFetch a government department's totals, top vendors and recent activity in one call.Send yourself a daily digest of new tendersFetch newly published tenders matching your keywords, newest first.
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 →