Skip to content
in-development

Evidence-Based Job Application Automation

An automation workflow that analyses job descriptions, calculates candidate fit, selects verified career evidence, and generates role-specific CVs without inventing qualifications.

11

Pipeline steps

Human

Approval gates

DOCX + PDF

Output formats

About

This workflow automates the job application process by analysing job descriptions, matching requirements against a verified career profile, scoring fit, and generating tailored CVs. It uses human approval at key decision points and generates DOCX and PDF output.

Problem

Job applications require tailoring CVs to specific roles, which is time-consuming and error-prone. Generic CVs miss relevant experience. This workflow automates evidence-based tailoring without fabricating qualifications.

Pipeline

JOB_APPLICATION_AUTOMATION_PIPELINE

01
JD Input
02
Extract
03
Classify
04
Match
05
Analyse
06
Generate
07
Validate
08
Approve
09
Export
10
Track

Workflow

01Job Description → Requirement Extraction
02Skill Classification and Categorisation
03Evidence Matching against verified profile
04Match Score Calculation
05Gap Analysis
06CV Template Selection
07Tailored CV Content Generation
08Accuracy Validation (no invented skills)
09Human Approval Gate
10DOCX and PDF Generation
11Application Tracker Update

Code

JSONn8n workflow webhook trigger
{
  "name": "Job Application Pipeline",
  "nodes": [
    {
      "type": "n8n-nodes-base.webhook",
      "position": [0, 300],
      "parameters": {
        "path": "job-application",
        "options": {}
      }
    },
    {
      "type": "n8n-nodes-base.httpRequest",
      "position": [300, 300],
      "parameters": {
        "url": "={{ $json.jobDescriptionUrl }}",
        "options": {}
      }
    }
  ],
  "connections": {
    "Webhook": { "main": [[ { "node": "HTTP Request" } ]] }
  }
}
PythonEvidence matcher
def match_evidence(requirements: list[str], profile: CareerProfile) -> MatchResult:
    scored: list[EvidenceMatch] = []
    for req in requirements:
        best_score = 0.0
        best_evidence = None
        for entry in profile.entries:
            similarity = calculate_similarity(req, entry.description)
            if similarity > best_score:
                best_score = similarity
                best_evidence = entry
        scored.append(EvidenceMatch(
            requirement=req,
            evidence=best_evidence,
            score=best_score,
        ))
    overall = sum(m.score for m in scored) / len(scored)
    return MatchResult(matches=scored, overall_score=overall)

Quick start

Terminal
Import the workflow JSON into n8n
Configure webhook trigger URL
Set up Google Sheets connection for job tracking
Configure local LLM endpoint in n8n nodes
Create career profile YAML with verified experience
Trigger via webhook with a job description URL

Current functionality

  • Verified career profile with evidence weighting
  • No invented skills or qualifications
  • Human approval at each application
  • Multiple CV templates
  • Match reporting with gap analysis
  • Local-first privacy for LLM processing
  • Google Sheets job tracking
  • DOCX and PDF file generation

Limitations

  • Requires maintained career profile data
  • Tailoring quality depends on profile completeness
  • Approval gate introduces manual step per application

Planned improvements

  • Add company research enrichment
  • Add cover letter generation
  • Support more file formats
  • Add interview scheduling integration

Technology

n8nLocal LLMsGoogle SheetsPythonJSON/YAMLDOCX generationPDF generation

Status

in-development

This project is currently in development. Core functionality is being built and tested.

Interested in this project?

Stagbyte builds practical automation systems. If this project aligns with a problem you are solving, reach out to discuss how it can be adapted or extended.