ooligo
n8n-flow

Candidate rediscovery for silver medalists with n8n

Difficulty
Fortgeschritten
Setup time
60min
For
recruiter · sourcer · talent-acquisition
Recruiting & TA

Stack

Ein n8n-Flow, der Greenhouse auf neu eröffnete Reqs überwacht, die früheren Kandidaten findet, die bei einem verwandten Req eine späte Interviewstufe erreicht haben und aus einem nicht-disqualifizierenden Grund abgelehnt wurden — die „Silbermedaillengewinner“ —, jeden einzelnen mit Claude erneut gegen das Rubric des neuen Reqs bewertet und eine gerankte Shortlist in einen Slack-Kanal postet. Er kontaktiert niemanden, fügt nie einen Kandidaten zu einer Pipeline hinzu und bewegt nie einen Kandidaten im ATS. Über jede Kontaktaufnahme entscheidet der Recruiter. Er verwandelt „wir haben letztes Frühjahr jemand anderen eingestellt, wer war noch mal der Zweitplatzierte?“ von einer 40-minütigen archäologischen Grabung in eine Slack-Nachricht, die in der Stunde landet, in der der Req eröffnet wird.

Wann zu verwenden

  • Sie arbeiten mit Greenhouse (oder einem anderen ATS mit einer Lese-API — die Intake-Nodes lassen sich austauschen), und Sie eröffnen genügend Reqs in wiederkehrenden Job-Familien, sodass die Finalisten des letzten Jahres die Shortlist dieses Jahres sind.
  • Sie lehnen Finalisten tatsächlich mit strukturierten Ablehnungsgründen ab. Das gesamte Sicherheitsmodell des Flows beruht darauf, „jemand anderen eingestellt“ von „die Background-Prüfung nicht bestanden“ zu unterscheiden. Wenn Ihr Team alle mit einem einzigen generischen Grund ablehnt, beheben Sie das zuerst; der Flow hat nichts, woran er gaten könnte.
  • Sie haben Feeder-Reqs, auf die Sie zeigen können. Der Flow rät nicht, welche vergangenen Reqs „verwandt“ sind — Sie listen die vergangenen Greenhouse-Job-IDs je Job-Familie in einer Konfigurationsdatei auf. Das macht den Match auditierbar statt zu einer Ähnlichkeits-Blackbox.
  • Ein Recruiter geht das Digest durch und entscheidet über die Kontaktaufnahme. Der Flow bringt zutage und rankt; ein Mensch screent erneut und kontaktiert.

Wann NICHT zu verwenden

  • Automatische Kontaktaufnahme im Loop. Der Flow rankt und postet in Slack; er mailt nie, fügt nie zu einer Sequenz hinzu, bewegt nie eine Stufe. Einen Outreach-Versand an das Digest zu verdrahten, verwandelt einen Wiederkontakt-Vorschlag in automatisierte Verarbeitung von Kandidatendaten — und einen Kandidaten nach Ablauf der ihm gegenüber offengelegten Aufbewahrungsfrist erneut zu kontaktieren, ist eine GDPR-Verletzung, kein Growth-Hack. Die Confirm first:-Zeile pro Kandidat im Digest existiert genau deshalb, damit ein Recruiter vor jeder Nachricht Einwilligung und Aktualität prüft.
  • Kein Aktualitätsfenster. GDPR verlangt, dass Sie Kandidatendaten nicht über die dem Kandidaten mitgeteilte Aufbewahrungsfrist hinaus halten oder erneut verarbeiten — üblicherweise 12–24 Monate für erfolglose Bewerber. Das recency_months-Gate des Flows entfernt jeden, der außerhalb des Fensters liegt. Es länger als Ihre angegebene Aufbewahrungsfrist zu setzen, um den Pool zu erweitern, ist die eine Bearbeitung, die diesen Flow in eine Haftung verwandelt.
  • Ablehnungsgründe, denen Sie nicht trauen können. Wenn „Position filled“ stillschweigend für „wir hatten Bedenken“ verwendet wird, kann die Deny-List Sie nicht schützen. Der Flow ist nur so sicher wie die Disziplin bei den Ablehnungsgründen, die dahintersteht.
  • Winzige oder einmalige Einstellungen. Ein Team, das drei unzusammenhängende Reqs pro Jahr eröffnet, ist schneller, wenn es sein eigenes Gedächtnis durchgeht, als ein Rubric und eine Feeder-Req-Liste zu verfassen. Das Setup zahlt sich aus, wenn eine Job-Familie wiederkehrt.
  • Vertrauliche oder Executive-Suchen. Andere Einwilligungshaltung, andere Audit-Kette. Diese gehören nicht in einen geteilten Slack-Kanal.

Setup

  1. Importieren Sie den Flow. Legen Sie apps/web/public/artifacts/candidate-rediscovery-n8n/candidate-rediscovery-n8n.json in Ihre n8n-Instanz. Jede Node trägt notesInFlow: true, sodass die Notizen auf dem Canvas jede Entscheidung erklären.
  2. Verdrahten Sie die Credentials. Drei: PLACEHOLDER_GREENHOUSE_CRED_ID (Harvest-API-Key, nur Lese-Scope — Jobs, Applications, Scorecards), PLACEHOLDER_ANTHROPIC_CRED_ID (Claude-API-Key), PLACEHOLDER_SLACK_CRED_ID (Slack-Bot-Token mit chat:write für #talent-rediscovery). Die _README.md des Bundles zeigt, wo jeder Wert liegt.
  3. Verfassen Sie eine Konfigurationsdatei pro Job-Familie unter ${CONFIG_DIR}/<family>.json. Sie enthält die match_job_ids (die Feeder-Reqs), min_stage_reached (das Gate für die späte Stufe), die Allow- und Deny-Listen der Ablehnungsgründe, recency_months, fit_threshold, top_n und das Rubric. Das vollständige Format steht in _README.md. Keine Konfiguration für eine Familie → der Flow hält mit missing_config an, statt gegen Defaults zu bewerten.
  4. Setzen Sie den Lookback. POLL_LOOKBACK_HOURS muss ≥ dem Schedule-Intervall sein (Standard 6h), sonst rutscht ein zwischen den Polls eröffneter Req durch. Beide werden zusammen abgestimmt.
  5. Dry-Run auf einer Familie, für die Sie gerade eingestellt haben. Die Zweitplatzierten, an die Sie sich erinnern, sollten nahe der Spitze des Digests landen. Stimmen Sie min_stage_reached und die Rubric-Anker an Ihrem Gedächtnis ab, bevor Sie ihm bei einer frischen Familie vertrauen.
  6. Aktivieren Sie den Trigger. Stellen Sie active: true erst um, nachdem ein Digest gekommen ist, auf das Sie tatsächlich handeln würden.

Was der Flow macht

Zwölf Nodes, in Reihenfolge. Die deterministischen Einwilligungs- und Fairness-Gates laufen vor dem Modell-Aufruf, denn ein LLM auf das vollständige Ablehnungsarchiv loszulassen, ist der Weg, jemanden erneut zu kontaktieren, der Sie gebeten hat, ihn nie zu kontaktieren.

  1. Every 6 Hours — Schedule-Trigger. Greenhouse hat keinen zuverlässigen Job-Created-Webhook, also pollt der Flow.
  2. Fetch New Open ReqsGET /v1/jobs?status=open&created_after=… gegen Greenhouse Harvest. Das JSON-Array wird in ein Item pro neuem Req aufgeteilt.
  3. Load Match Config — löst die Job-Familie des Reqs auf, lädt deren Konfiguration, hasht sie für das Audit-Log. Hält bei missing_config an.
  4. Config Loaded? — IF-Gate; Reqs ohne Konfiguration stoppen hier.
  5. Fetch Rejected PoolGET /v1/applications?status=rejected&last_activity_after=…, paginiert. Ein Item pro abgelehnter Application.
  6. Eligibility Filter — der Fünf-Gate-Boden: Feeder-Req-Match, späte Stufe erreicht, Ablehnungsgrund Allow/Deny (Deny gewinnt), Aktualitätsfenster, Do-not-contact-Unterdrückung. Alles andere wird verworfen, bevor irgendein Modell es sieht.
  7. Fetch Scorecards — zieht die früheren Interview-Scorecards des Kandidaten, den Grounding-Text für den Re-Match.
  8. Claude Re-Match — bewertet den früheren Kandidaten gegen das Rubric des neuen Reqs auf Sonnet 4.6, mit der expliziten Anweisung, die alte Ablehnungsentscheidung nicht zu übernehmen und nicht anhand von Proxys für geschützte Merkmale zu bewerten. Evidenz erforderlich: kein wörtliches Scorecard-Zitat → Fit 1.
  9. Parse + Keep — erzwingt die Evidenzregel, markiert Keep, wenn Fit ≥ dem Konfigurations-Threshold ist.
  10. Audit Append — eine pseudonyme JSONL-Zeile pro bewertetem Kandidaten (Kandidaten-ID + Link, kein Name, kein Scorecard-Text).
  11. Build Digest — gruppiert nach Req, dedupliziert einen Kandidaten, der über zwei Feeder-Reqs gematcht hat (höherer Fit gewinnt), rankt, kürzt auf top_n.
  12. Slack Digest — postet eine gerankte Shortlist pro Req in #talent-rediscovery, jeden Kandidaten mit einem einzeiligen Grund zum erneuten Auftauchen und einer Confirm first:-Notiz.

Kostenrealität

  • Anthropic-API-Token — jeder Kandidat sendet Scorecard-Text + Rubric (~4–5k Input-Token) und liefert ~300 Output-Token zurück. Bei der Sonnet-4.6-Listenpreisgestaltung landet das bei rund $0,015–0,03 pro bewertetem Kandidaten, sodass eine Familie, die 200 berechtigte Silbermedaillengewinner zieht, etwa $3–6 pro eröffnetem Req kostet (aus Token-Zählungen berechnet, nicht an Ihren Daten gemessen).
  • Greenhouse-Harvest-Aufrufe — nur lesend: ein Jobs-Poll, ein paginierter Applications-Pull, ein Scorecards-Fetch pro berechtigtem Kandidaten. Das bleibt für jede realistische Familiengröße innerhalb des dokumentierten Per-Key-Rate-Limits von Harvest.
  • n8n-Kosten — selbst gehostet ist im Container kostenlos. Der Starter-Plan von n8n Cloud deckt das Polling-Volumen ab; nur sehr hoher Req-Durchsatz braucht Pro.
  • Recruiter-Zeit — der Gewinn. Eine Silbermedaillengewinner-Liste über vergangene Reqs hinweg von Hand zu rekonstruieren, dauert den besseren Teil einer Stunde pro Req; das Digest landet gerankt, mit Einwilligungs-Flags und Re-Screen-Prompts vorbereitet, in den Minuten nach Eröffnung des Reqs.
  • Die Ökonomie hinter dem Gewinn. Veröffentlichte Recruiting-Benchmarks setzen die Cost-per-Hire über $4.500 und die Ersparnis eines wiederentdeckten Hires bei rund $2.000–3.000 an, wobei die Time-to-Fill bei Wiederentdeckungs-Hires um 20–30 Tage sinkt. Teams starten typischerweise bei einer Wiederentdeckungsrate von 5–15 % und zielen innerhalb eines Jahres auf 35–50 %; die Benchmark für die Einstellungsrate von Silbermedaillengewinnern liegt bei rund 8–15 %. Der Flow existiert, um das Erreichen dieser Zahlen zum Default zu machen, nicht zu einem Quartalsprojekt.

Erfolgsmetrik

Verfolgen Sie drei Zahlen pro Job-Familie pro Quartal:

  • Shortlist-zu-Screen-Rate — Anteil der Digest-Kandidaten, die ein Recruiter zu einem Re-Screen mitnimmt. Unter ~20 % bedeutet, dass das Rubric oder min_stage_reached zu locker ist; ziehen Sie die Anker an, bevor Sie den Pool erweitern.
  • Wiederentdeckungs-Einstellungsrate — Anteil der Einstellungen in der Familie, die aus dem Digest stammen. Die Benchmark von 8–15 % ist das Ziel; unter 5 % nach zwei Quartalen bedeutet, dass die Feeder-Req-Liste oder das Aktualitätsfenster zu eng ist.
  • Zeit von Req-Eröffnung bis zum ersten qualifizierten Slate — die Metrik für Candidate Experience und Hiring-Manager. Das Digest sollte das von Tagen auf denselben Tag verschieben.

vs Alternativen

  • vs Wiederentdeckung durch Gem oder hireEZ — das sind verwaltete Talent-CRM-Produkte mit eigenen Re-Engagement-Kampagnen und einem Candidate-Graph; wählen Sie sie, wenn Sie die Plattform wollen und das Budget es trägt. Wählen Sie den Flow, wenn Sie die Matching-Regeln, die Deny-List und das Audit-Log versionskontrolliert in Ihrem eigenen Repo wollen, auf die von Ihnen gewählten Feeder-Reqs zugeschnitten, mit dem Digest, das in Ihrem Stack landet.
  • vs Greenhouses eigene „Prospect-Pool“-Suche — die native Suche findet Kandidaten nach Keyword und Stufe, bewertet sie aber nicht erneut gegen das Rubric eines neuen Reqs mit zitierter Evidenz, und das Relevanz-Ranking ist eine Blackbox. Wählen Sie den Flow, wenn die reason_to_resurface- und Confirm first:-Zeilen pro Kandidat das sind, was den Recruiter zum Handeln bringt.
  • vs einem Recruiter, der das ATS manuell durchforstet — gleiche Qualität an einem guten Tag, aber der Recruiter vergisst das Aktualitätsfenster, überspringt unter Termindruck die Deny-List und macht es nur für die Reqs, an die er sich erinnert. Der Flow macht es für jeden wiederkehrenden Req, jedes Mal, mit nicht-optionalen Einwilligungs-Gates.

Fallstricke

  • Wiederkontakt über die Aufbewahrungsfrist hinaus. Schutz: das recency_months-Gate entfernt vor der Bewertung jeden, der außerhalb des offengelegten Aufbewahrungsfensters liegt, und das Audit-Log erfasst das verwendete Fenster. Setzen Sie es auf Ihre angegebene Aufbewahrungsfrist oder kürzer — niemals länger, um den Pool zu vergrößern.
  • Disqualifizierte Kandidaten, die wieder auftauchen. Schutz: die Deny-List der Ablehnungsgründe läuft vor dem Modell, und Deny gewinnt über Allow. Nicht bestandene Background-/Referenzprüfungen, Bedenken zum Verhalten, fehlende Arbeitserlaubnis und explizite Do-not-contact-Gründe können nie das Digest erreichen. Die Disziplin hängt von ehrlichen Ablehnungsgründen vorgelagert ab.
  • Bias-Übertragung aus alten Entscheidungen. Schutz: das Modell wird angewiesen, das frühere Ablehnungsurteil nicht zu übernehmen — ein Kandidat, der übergangen wurde, weil jemand anderes gewählt wurde, kann für einen neuen Req eine 5 sein — und nicht anhand von Name, Schule als eigenständigem Signal, Alter, Geschlecht oder Beschäftigungslücken zu bewerten. Der config_sha im Audit-Log macht die an jedem beliebigen Datum verwendeten Matching-Regeln unter einem AI-Screening-Bias-Review reproduzierbar.
  • Veralteter Kandidatenstatus. Schutz: die Confirm first:-Zeile pro Kandidat im Digest zwingt den Recruiter, vor der Kontaktaufnahme zu verifizieren, dass die Person noch in der Region, noch interessiert und noch passend ist; der Flow behauptet einen Match, keine aktuelle Tatsache. Anderswo aktive Kandidaten sind die Prüfung des Recruiters in Greenhouse, vermerkt in den bekannten Grenzen des Bundles.
  • Dünne Scorecards, die niedrig bewerten. Schutz: der Scorecard-Text ist das einzige Grounding, sodass ein Kandidat, der vor substanziellen Interviews abgelehnt wurde, per Design niedrig bewertet. Heben Sie min_stage_reached an, statt das Modell mit Lebensläufen zu füttern, die es nicht sehen kann.

Stack

Das Artefakt-Bundle liegt unter apps/web/public/artifacts/candidate-rediscovery-n8n/ und enthält:

  • candidate-rediscovery-n8n.json — der n8n-Flow-Export (jede Node konfiguriert, keine Stub-Parameter)
  • _README.md — Credential-Setup, Konfigurationsdatei-Format, die Einwilligungs- und Fairness-Gates, die Dry-Run-Prozedur

Tools, die der Workflow voraussetzt: Greenhouse (das ATS — wechseln Sie zu Ashby oder Lever, indem Sie die Intake-Nodes ersetzen), Claude (der Re-Match-Scorer), n8n (die Orchestrierung), Slack (die Entscheidungsoberfläche des Recruiters). Für das Triagieren frischer Inbounds gegen ein Rubric siehe den Inbound-Bewerber-Triage-Flow; für das Aufwärmen der Kandidaten, die dieser Flow zutage bringt, siehe die Candidate-Engagement-Sequenz und den Candidate-Sourcing-Claude-Skill.

Verwandte Konzepte: Recruiting-Funnel-Metriken, Candidate Experience, AI-Screening-Bias, strukturiertes Interviewen.

Files in this artifact

Download all (.zip)