FlowKit

Automatiser la veille des appels d'offres publics (BOAMP) avec n8n et l'IA

Par Clément Lacaille (Tech-Bharat) · Publié le 5 septembre 2026 · 6 min de lecture · notre méthode

Bundle FlowKit Complet — 269 €

12 workflows n8n prêts à importer, guide en français, garantie 14 jours

Voir le bundle

Un conducteur de travaux, un consultant ou une PME qui répond à des marchés publics passe couramment plusieurs heures par semaine à éplucher le Bulletin officiel des annonces des marchés publics (BOAMP) : ouvrir la liste des avis publiés, lire l'objet de chacun, écarter ce qui ne correspond pas au secteur ou à la zone géographique, avant de trouver la poignée d'appels d'offres réellement jouables. Le volume rend l'exercice ingrat — des dizaines de milliers d'avis sont publiés chaque année — et le coût n'est pas seulement le temps perdu : c'est aussi le bon appel d'offres raté parce que personne n'a eu le temps de le lire avant la clôture. Le BOAMP expose pourtant une API publique et gratuite, maintenue par la DILA, qui rend cette veille entièrement automatisable dans n8n.

Pourquoi automatiser plutôt que continuer à lire à la main

Filtrer des avis de marché par mots-clés n'a rien d'une idée neuve : c'est exactement la méthode qu'ont validée à grande échelle Jolien Grandia et Peter Kruyen dans leur étude Assessing the implementation of sustainable public procurement using quantitative text-analysis tools: A large-scale analysis of Belgian public procurement notices (Journal of Purchasing and Supply Management, 2020 — see the study). Les auteurs y appliquent une analyse textuelle automatisée à plus de 140 000 avis du portail belge des marchés publics pour en extraire des tendances qu'aucune lecture manuelle n'aurait permis de repérer à cette échelle. Le principe transposé ici est plus modeste — filtrer, pas produire une étude — mais le constat de fond est le même : au-delà d'un certain volume, le texte d'un avis de marché se prête très bien à un traitement automatisé, à condition de définir des critères clairs.

L'architecture : de l'API BOAMP au digest filtré

Schedule Trigger (quotidien, tôt le matin)
        │
        ▼
   HTTP Request → API BOAMP (mots-clés, CPV, département, date)
        │
        ▼
   Remove Duplicates (clé = identifiant de l'avis, mémoire entre exécutions)
        │
        ▼
   AI Agent : score Go/No-Go selon le profil de l'entreprise
        │
        ├─► Score élevé  → Slack/email immédiat avec lien vers l'avis
        └─► Tous les avis → Supabase (historique, justification, statut)

Interroger l'API BOAMP

Un Schedule Trigger quotidien déclenche un node HTTP Request vers l'API BOAMP, hébergée sur la plateforme Opendatasoft de la DILA (jeu de données boamp). L'explorateur de données expose un onglet « API » qui génère l'URL exacte et le paramètre where correspondant à vos filtres cliqués dans l'interface — c'est le moyen le plus fiable de construire votre requête sans se tromper sur le nom exact des champs, qui peut évoluer. Dans la pratique, une requête de veille combine généralement :

  • un filtre plein texte sur l'objet et le résumé du marché (vos mots-clés métier) ;
  • un ou plusieurs codes CPV (Common Procurement Vocabulary), la nomenclature européenne qui catégorise chaque marché par nature de prestation — bien plus fiable qu'un mot-clé pour cibler un secteur précis ;
  • un filtre géographique (département ou région) si vous ne répondez qu'à une zone de chalandise définie ;
  • une fenêtre de date de publication limitée aux dernières 24 à 48 heures, pour ne récupérer que les avis réellement nouveaux.

Ne jamais alerter deux fois pour le même avis

Le BOAMP republie régulièrement le même avis dans la fenêtre de résultats tant que sa date de clôture n'est pas passée, ce qui produirait des doublons à chaque exécution quotidienne. Le node Remove Duplicates en opération « Remove Items Processed in Previous Executions », avec l'identifiant unique de l'avis comme clé et le mode « Value Is New », règle le problème sans code : n8n mémorise les identifiants déjà vus d'une exécution à l'autre, et seuls les avis réellement nouveaux poursuivent vers l'étape suivante.

Le scoring Go/No-Go par IA

Une fois le bruit des doublons éliminé, il reste un volume d'avis encore trop large pour une lecture systématique — c'est là que l'IA apporte le plus de valeur, à condition de la contraindre à un jugement structuré plutôt qu'un résumé vague. Un node AI Agent ou une simple chaîne LLM reçoit deux choses : l'objet complet de l'avis (nature de la prestation, montant estimé, lieu d'exécution, date limite de remise des plis) et un profil d'entreprise que vous définissez une fois pour toutes dans le prompt système — secteur d'activité, taille de marché visée, zone géographique couverte, mots-clés rédhibitoires à exclure. Un Structured Output Parser force une réponse dans un format exploitable :

{
  "avis_id": "24-123456",
  "decision": "go",
  "score_pertinence": 8,
  "justification": "Prestation de développement web, montant compatible, département couvert",
  "date_limite_remise_plis": "2026-09-22"
}

Cette structure permet de router automatiquement les scores élevés vers une alerte immédiate, tout en conservant les scores faibles pour un contrôle a posteriori plutôt que de les faire disparaître silencieusement — un modèle qui écarte un marché à tort sans laisser de trace ne peut jamais être corrigé.

Le digest, pas la notification en continu

Plutôt que d'envoyer une alerte à chaque avis pertinent détecté au fil de la journée, un digest quotidien groupé — envoyé une fois le traitement du jour terminé — évite l'effet d'usure d'un canal Slack qui sonne à toute heure. Le pattern de digest multi-sources déjà documenté sur ce blog s'applique ici presque tel quel : un node Code regroupe les avis « go » du jour, triés par score décroissant, dans un message unique avec pour chacun le titre, le montant estimé, la date limite et un lien direct vers l'avis complet sur le BOAMP. Les avis « no-go » et les avis ambigus restent consultables dans la table Supabase pour qui veut vérifier que rien d'important n'a été écarté à tort.

Archiver pour transformer la veille en tableau de bord

Chaque avis traité, qu'il soit retenu ou non, mérite une ligne dans une table Supabase appels_offres (identifiant, objet, CPV, montant, décision IA, score, date de clôture, statut de réponse). Cet historique sert deux objectifs distincts : d'abord recalibrer le prompt de scoring en confrontant ses décisions passées aux marchés effectivement remportés ou ignorés à raison, ensuite fournir la base d'un suivi de pipeline commercial classique — combien d'avis vus, combien répondus, combien gagnés. Une fois un marché remporté, son échéance de livraison et ses éventuelles clauses de reconduction rejoignent naturellement le même type de suivi que celui détaillé dans notre guide sur le suivi des échéances de contrats avec n8n, plutôt que de repartir sur un tableur séparé.

Pièges fréquents

  • Des mots-clés trop larges. « Informatique » ou « travaux » seuls ramènent des centaines d'avis hors périmètre chaque jour ; combinez systématiquement mot-clé et code CPV pour resserrer le filtre en amont de l'IA, qui traite alors un volume raisonnable plutôt que de compenser un filtre trop permissif.
  • Un prompt de scoring sans exemples concrets. Sans deux ou trois exemples annotés d'avis « go » et « no-go » propres à votre activité dans le message système, le modèle applique des critères génériques qui ne reflètent pas vos vrais critères d'acceptation (taille d'équipe, références exigées, montant minimal rentable).
  • Ignorer la date limite de remise des plis dans le tri du digest. Un avis pertinent mais qui clôture dans deux jours doit remonter avant un avis à un mois, quel que soit son score de pertinence — ajoutez ce critère au tri, pas seulement le score IA.
  • Ne pas revalider le filtre après quelques semaines. Les codes CPV et zones pertinents évoluent avec votre activité ; relisez périodiquement les avis « no-go » archivés pour vérifier qu'aucun marché gagnable n'y dort.

Pour aller plus loin

Cette veille automatisée s'articule naturellement avec le Pack Conformité & Audit (149 €) : la même logique de piste d'audit horodatée dans Supabase, utilisée ici pour tracer chaque avis traité, sert aussi à documenter le dossier de réponse une fois l'appel d'offres engagé. Si vos échanges avec les acheteurs publics arrivent ensuite par email (demandes de compléments, notifications d'attribution), le Pack Inbox IA (79 €) prend le relais pour les trier et les prioriser automatiquement. Les deux packs, réunis dans le Bundle FlowKit Complet (269 € au lieu de 347 € pris séparément), couvrent la chaîne complète de la détection d'un marché jusqu'au suivi de son exécution.

FAQ

Questions fréquentes

Faut-il payer pour interroger l'API du BOAMP ?

Non. L'API du Bulletin officiel des annonces des marchés publics est publiée gratuitement par la DILA sous licence ouverte, sans clé ni quota bloquant pour un usage de veille classique. Aucun credential payant n'est nécessaire pour le node HTTP Request de ce workflow.

L'IA peut-elle décider seule qu'un appel d'offres n'est pas pertinent et le rejeter définitivement ?

Ce n'est pas recommandé. Le modèle doit produire un score et une justification, pas une suppression silencieuse : archivez systématiquement les avis écartés dans Supabase avec leur justification, pour pouvoir corriger le prompt si un marché pertinent est mal classé, et pour affiner vos critères au fil des semaines.

Comment éviter de recevoir le même appel d'offres plusieurs jours de suite ?

L'API BOAMP renvoie les avis publiés récemment, y compris ceux déjà vus la veille tant que leur date de clôture n'est pas dépassée. Le node Remove Duplicates en mode « Remove Items Processed in Previous Executions », avec l'identifiant de l'avis comme clé, filtre ce qui a déjà été alerté sans qu'il soit nécessaire de gérer cette mémoire à la main.

Cette veille couvre-t-elle aussi les marchés européens (JOUE) ou seulement français ?

Ce guide se concentre sur le BOAMP, qui couvre l'essentiel des marchés publics français en dessous et au-dessus des seuils européens. Les marchés publiés au JOUE (Journal officiel de l'Union européenne, TED) suivent une logique de recherche similaire sur leur propre API ; le même pipeline n8n s'adapte en changeant simplement le node HTTP Request et le mapping des champs.

Bundle FlowKit Complet

269 €