← Retour au blogue

API CanadaBuys : accédez aux appels d'offres et contrats fédéraux

CanadaBuys est le portail fédéral d'approvisionnement du Canada, géré par Services publics et Approvisionnement Canada (SPAC). Il publie chaque contrat fédéral, chaque appel d'offres ouvert et chaque attribution de contrat. Le problème : il n'existe pas d'API REST publique. Les données se trouvent derrière une interface web et des téléchargements CSV en vrac, difficiles à exploiter à grande échelle.

ProcureData encapsule toutes les données CanadaBuys dans une API REST propre : 834 073 enregistrements couvrant contrats, appels d'offres et attributions, normalisés selon un schéma cohérent, interrogeables par ministère, fournisseur, mot-clé, date et valeur. Mise à jour chaque semaine.

Pourquoi le portail natif est difficile à utiliser à grande échelle

Le portail web CanadaBuys fonctionne pour des recherches ponctuelles. Il devient inutilisable dès qu'il faut extraire des données de façon systématique : pour un outil d'intelligence fournisseurs, un tableau de bord d'approvisionnement, un agent IA, ou simplement une liste de contrats du MDN des 12 derniers mois.

Portail CanadaBuys

  • Pas d'API REST, pas d'endpoint de pagination
  • Téléchargements CSV de plusieurs Go avec des noms de colonnes incohérents selon les années
  • Environ 90 variantes pour les mêmes noms de ministères
  • Pas de recherche plein texte sur les descriptions
  • Impossible de relier un appel d'offres au contrat résultant

API ProcureData

  • API REST, réponses JSON, moins de 200 ms
  • Pagination par curseur pour itérer sur l'ensemble des données
  • Noms de ministères normalisés (20 formes canoniques)
  • Recherche plein texte via ?q=
  • /procurement/{solicitation_number} relie l'appel d'offres aux attributions et contrats

834 073 enregistrements CanadaBuys. Un seul endpoint. Niveau gratuit : 25 requêtes par jour.

À quoi ressemblent les données CanadaBuys dans l'API

Chaque enregistrement comprend des champs de premier niveau pour le filtrage rapide (department, vendor, contract_value, category, event_date) ainsi qu'un objet data contenant les champs bruts de la source. Un enregistrement de contrat :

json
{
  "record_id": "canada_contracts|W8486-226285|A",
  "entity_type": "contract",
  "source_id": "canada_contracts",
  "event_date": "2025-11-03",
  "department": "National Defence",
  "vendor": "L3Harris Technologies Inc",
  "contract_value": 8400000.00,
  "category": "GD",
  "government_level": "federal",
  "data": {
    "solicitation_number": "W8486-226285",
    "procurement_method": "Competitive",
    "contract_period_start": "2025-11-03",
    "contract_period_end": "2028-03-31",
    "description": "Communications equipment and support",
    "vendor_province": "Ontario"
  }
}

Exemples de requêtes

Appels d'offres ouverts CanadaBuys filtrés par mot-clé

curl
curl -G "https://procuredata-canadian-government-procurement-api.p.rapidapi.com/tender" \
  --data-urlencode "q=développement logiciel" \
  --data-urlencode "government_level=federal" \
  --data-urlencode "issued_after=2025-01-01" \
  --data-urlencode "limit=20" \
  -H "X-RapidAPI-Key: VOTRE_CLE_API" \
  -H "X-RapidAPI-Host: procuredata-canadian-government-procurement-api.p.rapidapi.com"

Tous les contrats attribués à un fournisseur donné

curl
curl -G "https://procuredata-canadian-government-procurement-api.p.rapidapi.com/contract" \
  --data-urlencode "vendor=Deloitte" \
  --data-urlencode "government_level=federal" \
  --data-urlencode "sort_by=value" \
  --data-urlencode "limit=50" \
  -H "X-RapidAPI-Key: VOTRE_CLE_API" \
  -H "X-RapidAPI-Host: procuredata-canadian-government-procurement-api.p.rapidapi.com"

Contrats d'un ministère, 12 derniers mois, triés par valeur

curl
curl -G "https://procuredata-canadian-government-procurement-api.p.rapidapi.com/contract" \
  --data-urlencode "department=National Defence" \
  --data-urlencode "issued_after=2025-05-01" \
  --data-urlencode "sort_by=value" \
  --data-urlencode "limit=100" \
  -H "X-RapidAPI-Key: VOTRE_CLE_API" \
  -H "X-RapidAPI-Host: procuredata-canadian-government-procurement-api.p.rapidapi.com"

Cycle de vie complet : de l'appel d'offres au contrat

L'endpoint /procurement/{solicitation_number} retourne la vue complète du cycle de vie : l'avis d'appel d'offres original, tous les avis d'attribution et tous les contrats résultants liés par numéro de sollicitation. Un seul appel au lieu de trois.

curl
curl "https://procuredata-canadian-government-procurement-api.p.rapidapi.com/procurement/W8486-226285" \
  -H "X-RapidAPI-Key: VOTRE_CLE_API" \
  -H "X-RapidAPI-Host: procuredata-canadian-government-procurement-api.p.rapidapi.com"

Normalisation des noms de ministères

CanadaBuys contient environ 90 variantes de noms de ministères dans les données brutes : "National Defence", "Dept. of National Defence", "DND", "Department Of National Defence Canada" font tous référence au même acheteur. L'API normalise ces variantes vers une vingtaine de noms canoniques. Utilisez ?department=National Defence et vous obtiendrez tous les enregistrements correspondants, quelle que soit la variante utilisée dans la source.

Pour obtenir la liste complète des noms de ministères canoniques et leur nombre d'enregistrements :

curl
curl "https://procuredata-canadian-government-procurement-api.p.rapidapi.com/departments" \
  -H "X-RapidAPI-Key: VOTRE_CLE_API" \
  -H "X-RapidAPI-Host: procuredata-canadian-government-procurement-api.p.rapidapi.com"

Foire aux questions

Est-ce que CanadaBuys offre une API publique?
Non. CanadaBuys (achatscanada.gc.ca) n'offre pas d'API REST publique. Les données sont accessibles via le portail web et des téléchargements CSV en vrac. ProcureData propose une API REST couvrant l'ensemble des données CanadaBuys : contrats (591 762 enregistrements), appels d'offres (99 182) et attributions (143 129).
Comment rechercher des appels d'offres CanadaBuys par mot-clé?
Utilisez l'endpoint /tender avec ?q=votre+mot+cle&government_level=federal. Le paramètre q effectue une recherche sur le titre et la description de l'appel d'offres. Ajoutez les filtres issued_after et department pour affiner les résultats.
À quelle fréquence les données CanadaBuys sont-elles mises à jour?
Les contrats, appels d'offres et attributions CanadaBuys sont rafraîchis chaque semaine (tous les lundis entre 2 h 00 et 6 h 00 UTC). Appelez /sources pour obtenir l'horodatage exact de la dernière mise à jour par source.
Puis-je filtrer par catégorie d'approvisionnement?
Oui. Utilisez ?category=SRV pour les services, GD pour les biens, CNST pour la construction, ou SRVTGD pour services et biens combinés. Ces codes correspondent aux codes de produits utilisés par CanadaBuys.
Y a-t-il un niveau gratuit?
Oui. Plan Basic : gratuit, 25 requêtes/jour via RapidAPI. Plan Pro : 49 $/mois, 1 000 requêtes/jour.
Notes sur les données : Nombre d'enregistrements au mai 2026. Données CanadaBuys provenant des données ouvertes de achatscanada.gc.ca. government_level=federal retourne les données CanadaBuys, les divulgations proactives du SCT et les offres à commandes de SPAC. Noms de ministères normalisés à partir d'environ 90 variantes brutes vers une vingtaine de formes canoniques. Codes de catégorie : SRV (Services), GD (Biens), CNST (Construction), SRVTGD (Services et biens). Les enregistrements albertains antérieurs à 2000 sont peu nombreux; les requêtes pratiques devraient utiliser issued_after=2010-01-01.

Commencez à interroger les contrats, appels d'offres et attributions CanadaBuys avec une clé API gratuite.

Obtenir une clé API sur RapidAPI Voir la spec OpenAPI