1. Opening Problem Statement
Meet Sarah, an HR manager at a fast-growing tech startup receiving hundreds of job applications weekly. Each CV arrives in different formats and languages, piled up through multiple platforms. Manually opening each file, skimming for relevant skills, and ranking candidates is not only tedious but error-prone. Sarah often misses hidden talents or wastes hours sifting through resumes that do not fit. The inefficiency stretches the hiring cycle, potentially costing the company valuable time and money in a competitive market.
This is the exact challenge solved by this n8n automation workflow, designed to automate CV screening using advanced AI analysis and structured data handling, streamlining Sarah’s daily applicant evaluation process.
2. What This Automation Does
When this workflow is run, it:
- Downloads a candidate’s CV from a direct URL (e.g., Supabase storage or Dropbox).
- Extracts the text content from PDF resumes using n8n’s “Extract Document PDF” node.
- Sends the extracted CV text and a detailed job description to OpenAI’s GPT-4o-mini model for critical analysis.
- Receives a structured candidate evaluation response, including a matching percentage, summary, reasons for suitability, and concerns.
- Parses this JSON response and stores or processes it further as needed.
- Enables quick, data-driven decisions by HR on candidate suitability without manually reading every resume.
Overall, this automation saves recruitment teams hours per batch of applicants, reduces oversight errors, and delivers consistent, critical insights for hiring decisions.
3. Prerequisites ⚙️
- n8n Account: To build and run the automation workflow. Self-hosting options available if preferred.
- OpenAI API Key 🔑: For accessing the GPT-4o-mini model to analyze CV content.
- HTTP Access to CV Storage 📁: The resumes must be accessible via direct URLs (e.g., Supabase public URLs).
- Basic familiarity with JSON and REST APIs.
4. Step-by-Step Guide
Step 1: Create the Manual Trigger
In n8n, click + New Workflow. Add a Manual Trigger node. This will allow you to test the workflow on-demand initially.
Step 2: Set Variables for Testing
Add a Set node named “Set Variables”. Configure it to create test input data:
file_url: URL of a sample CV PDF file (use the example URL in the workflow).job_description: Paste the complete job description text you want to evaluate candidates against.prompt: A detailed prompt instructing OpenAI how to analyze resumes critically, including evaluating candidate job jumps and skills fit.json_schema: Define the JSON structure for the AI’s response, specifying expected fields like percentage, summary, and reasons.
This node prepares the fixed input data for downstream nodes.
Step 3: Download the CV File
Add an HTTP Request node named “Download File”. Configure:
- Method: GET (default)
- URL: Use the expression selector and map from
{{$json.file_url}}
This node fetches the CV file content for extraction.
Step 4: Extract Text from the PDF
Add an Extract Document PDF node named “Extract Document PDF”. Configure:
- Operation: pdf
Connect the HTTP Request node output to this node input. It extracts readable text from the downloaded PDF content.
Step 5: Analyze CV with OpenAI
Add an HTTP Request node named “OpenAI – Analyze CV”. Configure:
- URL: https://api.openai.com/v1/chat/completions
- Method: POST
- Authentication: Use your OpenAI API key credential in n8n.
- Request Body: JSON format including the GPT-4o-mini model, system and user messages.
- In the system message, inject the
promptvariable from “Set Variables” node. - In the user message, send the URL-encoded extracted CV text.
- Use
response_formatto request the structured JSON response matching yourjson_schema.
This node sends the CV data and job description to OpenAI for detailed candidate evaluation.
Step 6: Parse the OpenAI JSON Response
Add a Set node named “Parsed JSON”. Configure it to parse the JSON string returned by OpenAI:
={{ JSON.parse($json.choices[0].message.content) }}This converts the AI analysis to a usable JSON object in your workflow.
Step 7: Run & Test the Workflow
Connect all nodes as per the flow: Manual Trigger → Set Variables → Download File → Extract Document PDF → OpenAI – Analyze CV → Parsed JSON.
Click Execute Workflow. You should see the candidate evaluation data appear in the “Parsed JSON” node output.
5. Customizations ✏️
- Adjust Job Description: In the “Set Variables” node, replace the
job_descriptiontext with your specific role to tailor the AI’s evaluation. - Change File Source: Modify the “file_url” in the “Set Variables” node to point to different storage providers or files.
- Use Different AI Models: In “OpenAI – Analyze CV” node, update the
modelparameter to GPT-4 or another suitable model depending on your subscription. - Add More Extraction Options: Extend the “Extract Document PDF” node or add additional extractors to support DOCX or other document types.
6. Troubleshooting 🔧
- Problem: “Error: Could not download file from URL.”
Cause: The URL specified infile_urlis invalid or inaccessible.
Solution: Verify the URL is public and reachable. You can test it by pasting it in a browser. Update the “Set Variables” node accordingly. - Problem: “Extract Document PDF” node returns empty or garbled text.
Cause: The CV PDF might be scanned images or protected.
Solution: Confirm the CV is machine-readable. Use OCR tools or alternate extraction methods for scanned documents. - Problem: OpenAI API returns error or unexpected response.
Cause: API key invalid, exceeded usage limits, or request JSON misformatted.
Solution: Check and update your OpenAI credentials in n8n. Review request body payload formatting carefully.
7. Pre-Production Checklist ✅
- Ensure the CV file URLs are accessible and valid.
- Validate the JSON schema matches the expected OpenAI response.
- Test OpenAI API credentials and permissions.
- Run end-to-end test with sample CVs matching job criteria.
- Backup your workflow version in n8n before starting production runs.
8. Deployment Guide
Activate the workflow in n8n once testing is successful. You can trigger it manually, or extend it with webhook or form inputs to automate with real candidate CV submissions. Monitor logs in n8n’s execution history to track processing results and detect errors early. Integrate the parsed data output with other systems like HRIS or databases for seamless candidate tracking.
10. Conclusion
By following this guide, you’ve built a robust n8n automation that downloads, extracts, analyzes, and evaluates candidate CVs using OpenAI’s powerful AI model. This workflow can save recruitment teams significant time, provide consistent candidate insights, and reduce errors from manual reviews.
Next automation ideas you can try include automatically emailing shortlisted candidates via Gmail node, adding sentiment analysis on cover letters, or integrating with Slack to notify hiring managers instantly.
With this workflow, you’ve taken a huge step towards smarter, AI-powered recruiting — simplifying your hiring process with speed and precision.