ProcureData API Documentation
Every Canadian government tender, contract, and award in one normalized API. Federal contracts, tenders, and awards (CanadaBuys, TBS proactive disclosure, PSPC/SOSA standing offers), Quebec public sector (SEAO), and provincial and municipal sources: Nova Scotia, British Columbia, Alberta…
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.Errors and troubleshootingWhat each status code means, and how to read the message the API sends back.
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 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/coverageContract count per municipalityGET/tender/coverageTender count per municipalityGET/award/coverageAward count per municipalityGET/disclosure/coverageDisclosure count per municipalityGET/standing_offer/coverageStanding offer count per municipalityGET/pre_solicitation/coveragePre-solicitation count per municipalityGET/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 →