FAQ — données, schéma, qualité, fraîcheur

Ce que contient l'API, comment les champs sont structurés, ce sur quoi vous pouvez compter, et à quelle fréquence les données arrivent.

1. Périmètre et sources

TenderAPI agrège deux sources officielles de marchés publics :

Couverture temporelle

Volumétrie actuelle

2,5 M+ tenders (avis publiés) et 1,7 M+ awards (résultats d'attribution) à date.

2. Modèle de données

L'API expose deux ressources principales :

Conventions

Champ awarded_at_source

Pour chaque award, ce champ indique d'où vient la date d'attribution. C'est utile pour interpréter la précision de awarded_at :

3. Qualité et complétude des champs

Les taux ci-dessous indiquent la proportion de lignes où le champ est renseigné, mesurée sur la totalité du corpus actuel. Ils dépendent essentiellement du format imposé par la source à l'autorité contractante au moment de la publication.

Tenders
ChampBOAMPTED legacyTED eForms
title 100%100%100%
buyer_name 100%100%100%
cpv_codes 62% 100%100%
buyer_siret 77% 16% 95%
deadline 86%95%89%
budget_max 0% 38% 6%
department (FR) 100%91%95%
Awards
ChampBOAMPTED legacyTED eForms
winner_name 91%85%100%
winner_siret 74%14%94%
amount 78%78%96%
awarded_at 95%100%100%

Pourquoi ces écarts ?

Ces taux reflètent ce que les sources officielles publient effectivement, et constituent une limite intrinsèque à ces sources — pas de notre traitement. Pour les lignes où un champ est null, c'est qu'il était absent ou non parsable dans la donnée source.

4. Mises à jour et fraîcheur

L'ingestion des nouvelles publications est entièrement automatisée :

La latence typique entre la publication officielle d'un avis et sa disponibilité dans l'API est inférieure à 24 heures.

Bascule automatique des avis clôturés

Chaque jour, les tenders dont la date limite de remise des offres est dépassée basculent automatiquement de status="open" à status="closed". Les avis sans date limite renseignée (rectificatifs, accords-cadres permanents, anciens MAPA) restent en open par défaut — pour les exclure, ajoutez deadline_after=now à votre requête.