Documentation menu
Getting started
QuickstartEndpoints
GET/sourcesGET/tender/alerts/unsubscribeGET/vendorsGET/departmentsGET/expiringGET/tender/feedGET/tender/{record_id}/documents/{doc_index}GET/department/{name}GET/process/{process_key}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/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}Docs / Guides / Monitor new records
Monitor new records
Poll for records added since your last check and act on them automatically.
To act on new records as they appear, poll ProcureData on a schedule and keep the IDs you have already seen. Sort by newest and stop once you hit a known record.
import requests
URL = "https://api.procuredata.ca/sources"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}
seen = set() # persist this between runs
r = requests.get(URL, headers=HEADERS, params={"limit": 100}).json()
for record in r.get("results", []):
rid = record.get("record_id")
if rid in seen:
continue
seen.add(rid)
notify(record) # email, Slack, CRM, ...Run it on a cron (hourly or daily) and route new records to email, Slack, or your CRM.
This loop needs a paid plan. The free tier runs 30 days behind, so a poller on a free key will keep finding the same records it saw yesterday and nothing newer.
Ready to build?Create a free key and start calling ProcureData in minutes. No card required.
Get your API key →