5 things I learned building a CV tailor workflow in n8n

:waving_hand: Hey n8n Community,

Just shipped a two-workflow CV tailor for a friend job-hunting (extracts a CV into a Google Sheet, then tailors it to any job posting upload with a matching cover letter). The build taught me a few things I hadn’t internalized from earlier workflows. Sharing in case any of these save someone else debugging time.

1. Don’t let the LLM grade its own output.

Original plan was to ask Gemini to score how well a CV matches a job posting before and after rewriting. Caught myself in time – that would mean the same model that rewrote the bullets also graded its own work. Not exactly an unbiased benchmark.

Moved the scoring to a deterministic JS Code node – keyword overlap, must-haves count double, no AI involved. Same formula runs against original and tailored bullets. The delta reflects real keyword surfacing, traceable to exactly which terms got mirrored.

If your workflow has any kind of “did the AI improve this” metric, the metric should not be calculated by the AI.

2. Build “honesty guardrails” into the prompt or the LLM will fabricate.

First version of the bullet-rewrite prompt just said “rewrite the CV to match the job posting.” Gemini happily added skills the candidate didn’t have. Adding three explicit rules fixed it:

  • “NEVER invent experience”
  • “Only mirror employer phrasing where the candidate has matching experience”
  • “If a must-have isn’t covered, list it under gaps instead of fabricating”

The gaps array became the most valuable output of the whole workflow. The candidate sees exactly what’s missing, the cover letter respects it, and the result feels honest instead of slick. LLMs don’t refuse to lie unless you explicitly tell them not to.

3. Tighten extraction prompts to atoms, not sentences.

First test: my must-have field returned items like “5+ years of professional backend engineering experience” and “Excellent problem-solving skills and attention to detail.” Match score: 0%, because nothing in the candidate’s bullets contains that exact 8-word phrase.

Updated the field description to:

  • “Return as SHORT noun phrases (1-3 words each)”
  • “Break compound requirements into individual atoms – ‘testing, monitoring, profiling’ must be returned as three separate items”
  • “Exclude soft skills like ‘attention to detail’”

Same posting, same workflow: 12 clean atomic must-haves. Score went from 0% → 33% on the same CV. The Extractor’s output quality is bottlenecked by how precisely your field descriptions specify the desired shape.

4. Constraints make better products.

The easybits free plan caps extractions at 10 fields. My first design had 13. Cutting to 10 forced me to ask which fields actually drove the workflow – and three of them never got used downstream.

This is the kind of thing you’d never figure out without a constraint forcing the question. “What can I cut” is a more useful design exercise than “what can I add.” Free-tier limits, character limits, time budgets – the constraints aren’t the enemy of the product, they’re often the reason the product gets sharper.

5. Score before AND after – the delta is the demo.

I almost shipped this with just an “after” score. The before score felt redundant – who cares what the original CV scored, you’re using the tool to fix it. But running the same calculation twice (once on the original, once on the tailored bullets) turns out to be the entire story.

A single 69% number is meaningless. “33% → 69% match” tells you the workflow is doing real work. It also makes the result honest in a way nothing else can – because the same deterministic formula runs in both places, the delta is the work, visibly traceable to which keywords got mirrored.

If your workflow transforms something, calculate the same metric on the input and the output. The before/after pair is more valuable than either number alone.

Both workflow JSONs are on GitHub:

CV Onboarding: n8n-workflows/easybits-cv-tailor-and-cover-letter-workflow/easybits_cv_onboarding_workflow.json at 9360864b0cfb20d9eea54b2214fdb58d61d71157 ¡ felix-sattler-easybits/n8n-workflows ¡ GitHub

CV Tailor + Cover Letter: n8n-workflows/easybits-cv-tailor-and-cover-letter-workflow/easybits_cv_tailor_workflow.json at 9360864b0cfb20d9eea54b2214fdb58d61d71157 ¡ felix-sattler-easybits/n8n-workflows ¡ GitHub

Run the onboarding one first – it sets up the Master CV sheet the second workflow reads from. Both stay within the 10-field free plan.

Curious which of these resonates most for the workflows you’ve built. The honesty-guardrail thing especially feels like it should apply to way more workflows than just CVs. Where else are you seeing this come up?

Best,
Felix