← All builds
n8n workflow · Built

Job Outreach: rank the people, enrich only the right ones, draft the letter

How it worksBuilt; held behind two switches until the contact list is reviewed

Given a list of people at a company, it decides who is worth contacting, spends enrichment credits only on those, and drafts a formal German Initiativbewerbung into each contact's row. It never sends; every automated path ends at a draft a human opens.

How it works

Cold outreach fails when the wrong person gets a good letter. So this workflow puts judgement before spend. Ranking runs first and costs almost nothing. Enrichment, which costs credits, only happens for contacts the ranker scored Contact.

Plan Today Work reads both Notion boards and decides what needs doing: open applications with nobody linked, contacts that have not been judged, or nothing new but an enrich-only ping so contacts ranked on an earlier day are never stranded. Route Work sends each kind down its own arm.

The ranker reads titles the way a human would rather than matching keywords. It knows that Geschäftsführer is managing director, Bereichsleiter is a division head, Personalreferent is recruiting, and Prokurist is a signing officer, not necessarily a hiring manager. It scores a company's people comparatively: who would own this role, who could refer, who is only a gatekeeper. Anyone it fails to score defaults to Skip rather than being left blank.

The draft prompt receives the ranker's reason for this person and the facts from my Experience Master page. Rules: address as Herr or Frau with Sie, one concrete opening line tied to the company, exactly two proof points with real numbers, one clear ask, under 200 words, and never invent a fact that is not in the background.

Key features

  • Ranking before enrichment, so twenty people at one company cost three credits rather than twenty
  • Title reading tuned for German org charts and the English titles German scale-ups use
  • An enrichment toggle that lets the whole path be tested end to end without spending a credit
  • Two enrichment branches converge in one node, so nothing downstream cares which path ran
  • Drafts written to the contact row, never sent; failed enrichment is marked rather than dropped
  • A deliberately disconnected node that would otherwise overwrite a hundred rows in one unattended pass

Step by step

  1. Daily Run07:00, an hour after discovery.
  2. Load boardsExperience Master for background, then applications and contacts.
  3. Plan Today Work and Route WorkDecide the kind of work and route it.
  4. Per Company loopBuild a ranking prompt, get a JSON verdict per person, parse it defensively, save fit score, priority and type to Notion.
  5. Get Ranked Contacts and Ready To EnrichOnly Priority = Contact with a LinkedIn URL and no email.
  6. Per Contact loopEnrichment switch, optional lookup for work email and phone, resolve to one shape.
  7. Contact Resolved?Draft the Initiativbewerbung and save it to the row, or mark enrichment failed with a note to check the Impressum by hand.

Why it is not switched on yet

Two gates are set on purpose. A test gate limits ranking to one company, and enrichment is off. Both exist because over 100 open applications have no contacts linked, and an unattended first run would touch every one of them. The right first run is small, watched, and reversible.

Want to talk through this one?

Happy to walk through the design, the trade-offs, and what I would do differently.