Automation proposal · n8n prototype · 2026
An AI CV screener designed to never drop a candidate
A proposed n8n workflow that reads CVs from Gmail, matches them to open roles, scores them with OpenAI, and alerts the recruiter only when a candidate clears the bar. Every failure gets logged, so nothing is silently lost.
Proposal. A working n8n prototype for a use case I want to implement. It hasn’t run on production data yet, so everything below describes how it’s designed to work.
The problem
Applications land in an inbox as a pile of emails with attachments in every format. Someone has to open each one, figure out which role it’s for, check whether this person already applied, read the CV, and decide if it’s worth the hiring manager’s time. Most of that is mechanical, and the part that isn’t is easy to get wrong when you’re tired.
How it works
The workflow runs one candidate at a time, so a bad file never takes the rest of the batch down with it. Each CV passes through five stages:
- Validate the attachment. Confirm there’s a usable PDF or Word file before spending anything on it.
- Match the job and check for duplicates. The email subject is matched against open roles in a Google Sheet, then the sender is checked against everyone who has already applied.
- Extract text, with an OCR gate. PDFs and DOCX files are parsed separately. If the extracted text is too short, it’s probably a scanned image, so it goes to manual review instead of feeding the AI garbage.
- Analyze with AI. OpenAI returns a structured JSON response against a fixed schema, which means no fragile text parsing and a predictable record every time.
- Store and notify. Every real candidate gets logged with their matched role, strengths, weaknesses, and score. Only high scorers trigger an email to the recruiter, and the original email is marked as read.

The design choice that matters
Every failure branch, whether it’s a missing attachment, an unmatched role, an unsupported file, a scanned CV, an AI error, or a parse failure, converges on one place and writes a single row to an issues log explaining what happened. Nothing gets marked as handled unless it actually was.
A companion workflow reads that log once a day and emails a short digest, along with a count of anything still unread in the inbox. If there’s nothing to report, no email goes out. A quiet day stays quiet.