FlowKit

Trier et présélectionner les candidatures avec n8n et l’IA, sans discriminer

Publié le 27 juillet 2026 · 6 min de lecture

Un poste publié qui reçoit cent cinquante candidatures en dix jours se heurte toujours au même mur : personne dans l’équipe RH n’a le temps de lire chaque CV avec la même attention le vendredi après-midi qu’un lundi matin. Le résultat classique — un tri à la va-vite par mots-clés dans le sujet de l’email, ou pire, par ordre d’arrivée — écarte parfois le profil le plus pertinent simplement parce qu’il est arrivé en fin de liste. Un pipeline n8n qui lit chaque CV, l’évalue contre une grille explicite et le range dans une file de revue priorisée change cette dynamique, à une condition non négociable : l’IA trie, elle ne décide jamais seule d’un rejet.

Ce que ce pipeline fait — et ce qu’il ne fait pas

Avant l’architecture, la limite : ce guide construit un outil de présélection et de priorisation, pas un outil de décision automatisée. L’article 22 du RGPD interdit qu’une décision produisant des effets juridiques ou significatifs sur une personne — un refus de candidature en est un — repose exclusivement sur un traitement automatisé, sans intervention humaine réelle. Le pipeline décrit ici respecte cette limite par construction : chaque candidature scorée atterrit dans une file de revue, jamais dans une réponse de refus envoyée automatiquement.

Vue d’ensemble du pipeline

Quatre briques, dans cet ordre : réception de la candidature, extraction du texte du CV, scoring par un LLM contre une grille liée au poste avec sortie structurée, puis classement dans une file de revue humaine avec alerte sur les profils les plus prometteurs. C’est une variante du même squelette webhook + IA + sortie structurée que nous détaillons pour la qualification de leads entrants — ici appliqué à des candidatures plutôt qu’à des prospects commerciaux, avec un garde-fou de revue humaine renforcé.

Étape 1 — Recevoir la candidature

Deux sources courantes selon votre process actuel :

  • Boîte email dédiée (recrutement@ ou candidatures@) : un node Gmail Trigger ou IMAP Email surveille la boîte et récupère chaque nouveau message avec sa pièce jointe PDF.
  • Formulaire sur la page carrière : un Form Trigger natif de n8n héberge directement le formulaire d’upload, sans outil tiers ; ou un Webhook classique si le formulaire vit déjà sur votre site.

Dans les deux cas, un node Set juste après normalise les champs utiles — nom, email, intitulé du poste visé, date de candidature — et vérifie que le binaire du CV est bien présent avant de poursuivre.

Étape 2 — Extraire le texte du CV

Comme pour tout document PDF entrant dans n8n, deux cas se présentent. Un CV généré numériquement (Word exporté en PDF, Canva, LinkedIn) contient du texte sélectionnable : le node Extract from File (n8n-nodes-base.extractFromFile) suffit, sans coût d’API. Un CV scanné ou une capture d’écran n’a aucun texte natif : basculez sur un Chat Model multimodal (GPT-4o, Claude, Gemini) auquel vous envoyez le fichier directement, qui lit l’image et en extrait le contenu en une seule passe. Notre guide sur l’extraction de données de factures PDF avec l’IA détaille ces deux approches en profondeur — l’architecture est identique, seul le schéma de sortie change.

Étape 3 — Scorer contre une grille liée au poste, pas au profil de la personne

C’est l’étape la plus sensible du pipeline, et celle qui mérite le plus de soin. Une Basic LLM Chain (chainLlm) ou un AI Agent reçoit le texte du CV et l’intitulé du poste, avec un prompt système qui fixe une grille strictement liée aux exigences du poste : compétences techniques requises, années d’expérience minimales, diplômes ou certifications pertinentes. Consigne explicite à ajouter dans le prompt : ignorer tout élément sans lien démontré avec la capacité à occuper le poste — âge, nom à consonance particulière, adresse, genre, photo, établissement d’origine hors pertinence du diplôme.

Un Structured Output Parser (@n8n/n8n-nodes-langchain.outputParserStructured) impose ensuite une sortie fiable :

{
  "adequation_poste": "entier 1 à 5",
  "competences_detectees": ["string"],
  "annees_experience_pertinente": "number",
  "justification": "string, fondée uniquement sur des critères objectifs du poste",
  "elements_manquants": ["string"]
}

Le champ justification n’est pas décoratif : c’est lui qui permet à un recruteur humain de vérifier en un coup d’œil que le score repose bien sur des critères objectifs, et de repérer un écart suspect avant qu’il ne devienne systématique.

Étape 4 — Pourquoi une grille explicite bat le jugement au fil de l’eau

Ce choix d’une grille rigide plutôt que d’une évaluation globale « à l’instinct » n’est pas qu’une précaution éthique — c’est aussi ce que montre la recherche en psychologie du travail. Une méta-analyse de Kuncel, Klieger, Connelly et Ones, publiée dans le Journal of Applied Psychology (2013), a comparé la validité prédictive de méthodes mécaniques (combinaison de données selon une règle fixe et explicite) face à des méthodes cliniques (jugement holistique d’un expert) dans des décisions de sélection et d’admission. Résultat constant : la combinaison mécanique surpasse systématiquement le jugement holistique, y compris quand celui-ci est rendu par des experts connaissant bien le poste et l’organisation (étude sur Google Scholar). Une grille explicite, appliquée de façon cohérente à chaque candidature, produit donc un tri plus fiable qu’une lecture rapide au fil de l’eau — à condition que la grille elle-même ne contienne que des critères pertinents pour le poste.

Ce gain de fiabilité n’élimine pas pour autant le risque de biais algorithmique. Raghavan, Barocas, Kleinberg et Levy, dans une étude présentée à la conférence ACM FAccT (2020) sur les pratiques des éditeurs d’outils de présélection automatisée, montrent que la plupart des fournisseurs communiquent peu de détails vérifiables sur leurs méthodes de détection et de correction de biais (étude sur Google Scholar). La conclusion pratique pour un pipeline construit en interne : documentez votre grille, limitez-la strictement aux critères du poste, et ne la laissez jamais remplacer la revue humaine — c’est exactement l’objet de l’étape suivante.

Étape 5 — Router vers une file de revue, jamais vers une décision

Un node IF ou Switch classe les candidatures scorées, mais uniquement pour prioriser l’ordre de lecture d’un recruteur humain :

  • Score ≥ 4 : ajout en tête de file dans une table Airtable ou Supabase dédiée, avec une alerte Slack groupée (un digest, pas une notification par candidature) signalant les profils à examiner en priorité.
  • Score < 4 : ajout dans la même file, sans alerte, pour un traitement en lot par le recruteur.

Aucune branche n’envoie de refus automatique. Si vous voulez automatiser la réponse « candidature non retenue » une fois la décision humaine prise, le pattern d’approbation humaine avec le node Wait et des boutons Slack s’applique directement : le recruteur valide sa décision dans Slack, et c’est cette validation — pas le score IA — qui déclenche l’email de réponse.

Traçabilité : conservez la justification, pas seulement le score

Pour pouvoir démontrer, en cas de contestation, que le tri a reposé sur des critères objectifs et non discriminatoires, conservez systématiquement le score, la justification complète du LLM et l’identité du recruteur ayant validé la décision finale — pas seulement le résultat. Notre guide sur la piste d’audit RGPD avec n8n et Supabase détaille la mise en place d’une table de journalisation append-only adaptée à ce besoin, directement réutilisable pour un process de recrutement.

Fiabilité et coûts

Comme pour tout appel IA à volume variable (un pic de candidatures les derniers jours avant la clôture d’une offre), configurez un Error Workflow dédié pour ne jamais perdre silencieusement une candidature suite à un timeout — voir notre guide sur la gestion des erreurs dans n8n. Côté coût, un modèle économique (gpt-4o-mini ou équivalent) traite un CV d’une à deux pages pour quelques centimes, extraction et scoring compris — négligeable face au temps recruteur économisé sur un volume de cent CV.

Pour aller plus loin

L’architecture de ce pipeline — réception, extraction structurée, scoring par LLM avec sortie fiable — reprend les mêmes briques que le tri d’emails du Pack Inbox IA (79 €). Si votre besoin dépasse la présélection et inclut la traçabilité complète des décisions RH pour un audit ou un contrôle, le Pack Conformité & Audit (149 €) fournit la brique de journalisation Supabase et le rapport de synthèse prêts à brancher derrière ce type de pipeline. Et pour couvrir en une fois la boîte mail, l’assistant documentaire et la conformité, le Bundle FlowKit Complet (269 € au lieu de 347 €) regroupe les trois packs.

FAQ

Questions fréquentes

Ce pipeline peut-il rejeter automatiquement une candidature ?

Techniquement oui, mais ce n’est pas ce que cet article recommande. L’article 22 du RGPD encadre strictement les décisions individuelles fondées exclusivement sur un traitement automatisé produisant des effets juridiques ou significatifs — un refus d’embauche en fait clairement partie. Le pipeline décrit ici trie et priorise une file de revue ; c’est toujours un recruteur humain qui décide d’un rejet.

Comment limiter les biais du LLM sur des critères comme l’âge ou le nom ?

Deux réflexes limitent le risque : ne jamais transmettre au prompt des champs sans lien avec le poste (nom complet, âge, adresse, photo si le CV en contient une) et exiger un score fondé exclusivement sur des critères objectifs listés dans la grille (compétences, années d’expérience, diplômes pertinents). Ça ne supprime pas tout risque de biais indirect via la formulation du CV, d’où l’intérêt de la revue humaine systématique décrite plus loin.

Faut-il un ATS (outil de suivi des candidatures) pour mettre en place ce pipeline ?

Non. Une table Airtable ou Supabase suffit largement pour démarrer : colonnes candidat, score, justification, statut de revue. Le pipeline fonctionne identiquement si vous migrez plus tard vers un ATS dédié (Greenhouse, Recruitee) — seul le node de destination change.

Que faire si le CV est une image scannée sans texte sélectionnable ?

Le node Extract from File ne renverra rien d’exploitable dans ce cas. Basculez sur un LLM multimodal (GPT-4o, Claude, Gemini) auquel vous envoyez directement le fichier : il lit l’image et en extrait le texte en une seule passe, sans étape d’OCR séparée à gérer.

Bundle FlowKit Complet

269 €