This workflow corresponds to n8n.io template #9435 — we link there as the canonical source.
This workflow follows the Agent → Gmail recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "AU3wTmjcDjBhtGH4",
"name": "AI-Powered Hiring: Resume Screening & Candidate Routing using Jotform",
"tags": [
{
"id": "TDW7E4RVCMchXf5b",
"name": "published",
"createdAt": "2025-10-13T01:18:01.305Z",
"updatedAt": "2025-10-13T01:18:01.305Z"
}
],
"nodes": [
{
"id": "d549b930-1e35-4bcd-a7d7-8806c6990170",
"name": "Extract Application Data",
"type": "n8n-nodes-base.set",
"position": [
-2752,
688
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "candidate_name",
"name": "candidate_name",
"type": "string",
"value": "={{ $json.q3_fullName?.first || '' }} {{ $json.q3_fullName?.last || '' }}"
},
{
"id": "candidate_email",
"name": "candidate_email",
"type": "string",
"value": "={{ $json.q4_email }}"
},
{
"id": "candidate_phone",
"name": "candidate_phone",
"type": "string",
"value": "={{ $json.q5_phone }}"
},
{
"id": "position_applied",
"name": "position_applied",
"type": "string",
"value": "={{ $json.q6_position }}"
},
{
"id": "years_experience",
"name": "years_experience",
"type": "string",
"value": "={{ $json.q7_experience }}"
},
{
"id": "linkedin_url",
"name": "linkedin_url",
"type": "string",
"value": "={{ $json.q8_linkedin || 'Not provided' }}"
},
{
"id": "portfolio_url",
"name": "portfolio_url",
"type": "string",
"value": "={{ $json.q9_portfolio || 'Not provided' }}"
},
{
"id": "resume_url",
"name": "resume_url",
"type": "string",
"value": "={{ $json.q10_resume?.[0] || '' }}"
},
{
"id": "cover_letter",
"name": "cover_letter",
"type": "string",
"value": "={{ $json.q11_coverLetter || 'Not provided' }}"
},
{
"id": "application_id",
"name": "application_id",
"type": "string",
"value": "=APP-{{ $json.submissionID }}-{{ Date.now() }}"
},
{
"id": "application_date",
"name": "application_date",
"type": "string",
"value": "={{ new Date().toISOString() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "01591f1c-25da-4d0a-b627-0814d817d785",
"name": "Download Resume",
"type": "n8n-nodes-base.httpRequest",
"position": [
-2528,
672
],
"parameters": {
"url": "={{ $json.resume_url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "3af3677e-0537-417e-9249-a51af94e4fe6",
"name": "Process Resume",
"type": "n8n-nodes-base.code",
"position": [
-2224,
688
],
"parameters": {
"jsCode": "const items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n try {\n // Get resume binary data\n const resumeData = item.binary?.data;\n \n if (resumeData) {\n // Convert binary to base64 for AI processing\n const base64Resume = resumeData.data;\n \n results.push({\n json: {\n ...item.json,\n resume_base64: base64Resume,\n resume_available: true\n }\n });\n } else {\n results.push({\n json: {\n ...item.json,\n resume_available: false,\n resume_text: 'Resume not available for parsing'\n }\n });\n }\n } catch (error) {\n results.push({\n json: {\n ...item.json,\n resume_available: false,\n resume_text: 'Error processing resume',\n error: error.message\n }\n });\n }\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "0a82dda9-b144-41f5-8903-579947f536c8",
"name": "AI Resume Parser",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-2032,
688
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {},
"messages": {
"values": [
{
"content": "=You are an expert technical recruiter and resume parser. Extract structured information from this job application.\n\n**Candidate Name:** {{ $('Extract Application Data').item.json.candidate_name }}\n**Position Applied:** {{ $('Extract Application Data').item.json.position_applied }}\n**Years of Experience:** {{ $('Extract Application Data').item.json.years_experience }}\n**LinkedIn:** {{ $('Extract Application Data').item.json.linkedin_url }}\n**Portfolio:** {{ $('Extract Application Data').item.json.portfolio_url }}\n\n**Cover Letter:**\n{{ $('Extract Application Data').item.json.cover_letter }}\n\n**Resume:** (Attached or provided separately)\n\nPlease extract and structure the following information in markdown format:\n\n## Professional Summary\n[Write a 2-3 sentence summary of the candidate]\n\n## Key Skills\n- List all technical skills mentioned\n- Programming languages\n- Frameworks and tools\n- Soft skills\n\n## Work Experience\n[Summarize their work history with companies, roles, and key achievements]\n\n## Education\n[Degrees, certifications, institutions]\n\n## Notable Projects\n[Any significant projects mentioned]\n\n## Red Flags or Concerns\n[Job hopping, gaps, inconsistencies, or none]\n\n## Standout Qualities\n[What makes this candidate unique or impressive]"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "c071c207-e09d-4ca5-90b9-d4d300476dde",
"name": "AI Candidate Screener",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1424,
720
],
"parameters": {
"text": "=You are an expert hiring manager evaluating candidates for our company. Your job is to thoroughly assess this candidate against our job requirements and provide a detailed, structured analysis.\n\n---\n\n## JOB REQUIREMENTS\n\n**Position:** Senior Full-Stack Engineer\n\n**Required Skills:**\n- 5+ years of professional software development experience\n- Strong proficiency in React, Node.js, and TypeScript\n- Experience with PostgreSQL or similar relational databases\n- RESTful API design and development\n- Git version control and collaborative development\n- Experience with cloud platforms (AWS, GCP, or Azure)\n- Strong problem-solving and debugging skills\n\n**Preferred Skills:**\n- Experience with Next.js or similar meta-frameworks\n- GraphQL API development\n- Docker and container orchestration\n- CI/CD pipeline setup and maintenance\n- Experience with testing frameworks (Jest, Cypress)\n- Open source contributions\n- Startup experience\n\n**Soft Skills:**\n- Excellent communication skills\n- Self-motivated and able to work independently\n- Collaborative team player\n- Passion for learning new technologies\n- Strong attention to detail\n\n**Red Flags to Watch For:**\n- Job hopping (multiple jobs under 1 year)\n- Unexplained employment gaps\n- Lack of progression in career\n- Generic or copied cover letters\n- Overly inflated claims without evidence\n- Poor communication in application materials\n\n---\n\n## CANDIDATE INFORMATION\n\n**Name:** {{ $('Extract Application Data').item.json.candidate_name }}\n**Email:** {{ $('Extract Application Data').item.json.candidate_email }}\n**Position Applied:** {{ $('Extract Application Data').item.json.position_applied }}\n**Years of Experience:** {{ $('Extract Application Data').item.json.years_experience }}\n**LinkedIn:** {{ $('Extract Application Data').item.json.linkedin_url }}\n**Portfolio:** {{ $('Extract Application Data').item.json.portfolio_url }}\n\n**Parsed Resume Summary:**\n{{ $json.message.content }}\n\n**Cover Letter:**\n{{ $('Extract Application Data').item.json.cover_letter }}\n\n---\n\n## YOUR TASK\n\nProvide a comprehensive evaluation with the following structure:\n\n1. **Overall Assessment** - High-level verdict on candidate quality\n\n2. **Skills Match Analysis** - Compare their skills against requirements:\n - Required skills they have\n - Required skills they're missing\n - Preferred skills they have\n - Unique skills they bring\n\n3. **Experience Evaluation** - Assess their work history quality and relevance\n\n4. **Standout Qualities** - What makes them impressive or unique\n\n5. **Concerns or Red Flags** - Any potential issues identified\n\n6. **Cultural Fit Indicators** - Based on communication style, values alignment\n\n7. **Interview Focus Areas** - What to dig deeper on in interviews\n\n8. **Salary Expectations** - Estimated range based on experience level\n\nProvide detailed reasoning for all assessments. Be honest about weaknesses but also highlight genuine strengths.",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "7e3e68f1-7ab2-42aa-811b-52bf2984c90b",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1456,
976
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "34f9050d-fac1-4501-8742-719d589e7d5c",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1200,
992
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"required\": [\n \"overall_score\",\n \"recommendation\",\n \"skills_match_score\",\n \"experience_score\",\n \"cultural_fit_score\",\n \"required_skills_present\",\n \"required_skills_missing\",\n \"preferred_skills_present\",\n \"standout_qualities\",\n \"concerns_or_red_flags\",\n \"interview_focus_areas\",\n \"estimated_salary_range\",\n \"detailed_assessment_markdown\"\n ],\n \"properties\": {\n \"overall_score\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 100,\n \"description\": \"Overall candidate score out of 100\"\n },\n \"recommendation\": {\n \"type\": \"string\",\n \"enum\": [\"strong_yes\", \"yes\", \"maybe\", \"no\", \"strong_no\"],\n \"description\": \"Hiring recommendation\"\n },\n \"skills_match_score\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 100\n },\n \"experience_score\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 100\n },\n \"cultural_fit_score\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 100\n },\n \"required_skills_present\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"required_skills_missing\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"preferred_skills_present\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"standout_qualities\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"concerns_or_red_flags\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"interview_focus_areas\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"estimated_salary_range\": {\n \"type\": \"string\",\n \"description\": \"Estimated salary range like $120k-$150k\"\n },\n \"detailed_assessment_markdown\": {\n \"type\": \"string\",\n \"description\": \"Full assessment in markdown format\"\n }\n }\n}"
},
"typeVersion": 1.3
},
{
"id": "8f0f2d89-2164-4f31-b6cb-b8e71ebbda57",
"name": "Strong Yes?",
"type": "n8n-nodes-base.if",
"position": [
-784,
704
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true
},
"combinator": "or",
"conditions": [
{
"id": "strong-yes-condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.recommendation }}",
"rightValue": "strong_yes"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "867d5a96-aaaf-4bce-a9e7-a1a8e3737713",
"name": "Maybe or Yes?",
"type": "n8n-nodes-base.if",
"position": [
-784,
944
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true
},
"combinator": "or",
"conditions": [
{
"id": "yes-maybe-condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.recommendation }}",
"rightValue": "yes"
},
{
"id": "maybe-condition",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.recommendation }}",
"rightValue": "maybe"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "4b90f9bd-a0b3-42a2-8aa9-ef308563c1cb",
"name": "Send Interview Invitation",
"type": "n8n-nodes-base.gmail",
"position": [
-192,
544
],
"parameters": {
"sendTo": "={{ $('Extract Application Data').item.json.candidate_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n<style>\nbody{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;line-height:1.6;color:#333;max-width:600px;margin:0 auto;padding:20px}\n.header{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;padding:30px 20px;text-align:center;border-radius:8px 8px 0 0}\n.content{background:#f8f9fa;padding:30px 20px;border:1px solid #e9ecef;border-top:none}\n.cta-button{display:inline-block;background:#667eea;color:#fff;padding:14px 28px;text-decoration:none;border-radius:6px;font-weight:600;margin:20px 0}\n.footer{margin-top:20px;padding-top:20px;border-top:1px solid #dee2e6;font-size:14px;color:#6c757d}\n</style>\n</head>\n<body>\n<div class=\"header\">\n<h1 style=\"margin:0;font-size:24px\">Great News, {{ $('Extract Application Data').item.json.candidate_name.split(' ')[0] }}! \ud83c\udf89</h1>\n</div>\n<div class=\"content\">\n<p>Thank you for applying for the <strong>{{ $('Extract Application Data').item.json.position_applied }}</strong> position at [Your Company].</p>\n\n<p>We've reviewed your application and we're impressed! Your experience and skills align really well with what we're looking for, and we'd love to learn more about you.</p>\n\n<p><strong>Next Steps:</strong></p>\n<ul>\n<li>We'll be reaching out within 1-2 business days to schedule a technical screening call (30-45 minutes)</li>\n<li>This will be a casual conversation about your experience and technical background</li>\n<li>You'll also get to learn more about our team, tech stack, and culture</li>\n</ul>\n\n<p>In the meantime, feel free to check out our <a href=\"https://yourcompany.com/engineering\">engineering blog</a> or explore our <a href=\"https://github.com/yourcompany\">open source projects</a>.</p>\n\n<p>Looking forward to speaking with you soon!</p>\n\n<p>Best regards,<br>\n<strong>Hiring Team</strong><br>\n[Your Company]</p>\n</div>\n<div class=\"footer\">\n<p>Application ID: {{ $('Extract Application Data').item.json.application_id }}</p>\n</div>\n</body>\n</html>",
"options": {},
"subject": "=Next Steps - {{ $('Extract Application Data').item.json.position_applied }} at [Your Company]"
},
"typeVersion": 2.1
},
{
"id": "3f187791-5c7a-4292-a623-f7e005db0da2",
"name": "Request Manager Review",
"type": "n8n-nodes-base.gmail",
"position": [
-512,
800
],
"parameters": {
"sendTo": "user@example.com",
"message": "=<!DOCTYPE html>\n<html>\n<head><style>body{font-family:Arial,sans-serif;line-height:1.6;color:#333}.container{max-width:700px;margin:0 auto;padding:20px}.header{background:#f8f9fa;padding:20px;border-left:4px solid #ffc107;margin-bottom:20px}.score-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin:20px 0}.score-box{background:#f8f9fa;padding:15px;text-align:center;border-radius:5px}.score-box strong{display:block;font-size:24px;color:#667eea}.list-section{margin:15px 0}.list-section h3{color:#667eea;margin-bottom:10px}.badge{display:inline-block;padding:4px 8px;border-radius:3px;font-size:12px;font-weight:600}.badge-yes{background:#d4edda;color:#155724}.badge-maybe{background:#fff3cd;color:#856404}.cta{background:#667eea;color:#fff;padding:15px 30px;text-decoration:none;border-radius:5px;display:inline-block;margin:20px 0}</style></head>\n<body>\n<div class=\"container\">\n<div class=\"header\">\n<h2 style=\"margin:0\">\ud83d\udccb Candidate Review Required</h2>\n<p style=\"margin:5px 0 0 0\"><span class=\"badge badge-maybe\">NEEDS REVIEW</span></p>\n</div>\n\n<p><strong>Candidate:</strong> {{ $('Extract Application Data').item.json.candidate_name }}<br>\n<strong>Position:</strong> {{ $('Extract Application Data').item.json.position_applied }}<br>\n<strong>Email:</strong> {{ $('Extract Application Data').item.json.candidate_email }}<br>\n<strong>Application ID:</strong> {{ $('Extract Application Data').item.json.application_id }}</p>\n\n<div class=\"score-grid\">\n<div class=\"score-box\"><strong>{{ $('AI Candidate Screener').item.json.output.overall_score }}</strong>Overall Score</div>\n<div class=\"score-box\"><strong>{{ $('AI Candidate Screener').item.json.output.skills_match_score }}%</strong>Skills Match</div>\n<div class=\"score-box\"><strong>{{ $('AI Candidate Screener').item.json.output.experience_score }}%</strong>Experience</div>\n</div>\n\n<div class=\"list-section\">\n<h3>\u2705 Strengths</h3>\n<ul>\n{{ $('AI Candidate Screener').item.json.output.standout_qualities.map(q => '<li>' + q + '</li>').join('') }}\n</ul>\n</div>\n\n<div class=\"list-section\">\n<h3>\u26a0\ufe0f Concerns</h3>\n<ul>\n{{ $('AI Candidate Screener').item.json.output.concerns_or_red_flags.length > 0 ? $('AI Candidate Screener').item.json.output.concerns_or_red_flags.map(c => '<li>' + c + '</li>').join('') : '<li>No major concerns identified</li>' }}\n</ul>\n</div>\n\n<div class=\"list-section\">\n<h3>\ud83d\udcb0 Estimated Salary</h3>\n<p>{{ $('AI Candidate Screener').item.json.output.estimated_salary_range }}</p>\n</div>\n\n<p><strong>AI Recommendation:</strong> {{ $('AI Candidate Screener').item.json.output.recommendation.toUpperCase().replace('_', ' ') }}</p>\n\n<p><strong>Your decision is needed:</strong> Should we move forward with this candidate?</p>\n\n<p><em>Click below to approve or reject this application.</em></p>\n\n</div>\n</body>\n</html>",
"options": {},
"subject": "=Review Candidate - {{ $('Extract Application Data').item.json.candidate_name }}",
"operation": "sendAndWait"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "5dbe1e3b-b603-4e38-ac36-19e800f042c7",
"name": "Send Rejection Email",
"type": "n8n-nodes-base.gmail",
"position": [
-480,
1104
],
"parameters": {
"sendTo": "={{ $('Extract Application Data').item.json.candidate_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n<style>\nbody{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;line-height:1.6;color:#333;max-width:600px;margin:0 auto;padding:20px}\n.header{background:#667eea;color:#fff;padding:30px 20px;text-align:center;border-radius:8px 8px 0 0}\n.content{background:#fff;padding:30px 20px;border:1px solid #e9ecef;border-top:none}\n.footer{margin-top:20px;padding-top:20px;border-top:1px solid #dee2e6;font-size:14px;color:#6c757d}\n</style>\n</head>\n<body>\n<div class=\"header\">\n<h1 style=\"margin:0;font-size:24px\">Thank You for Applying</h1>\n</div>\n<div class=\"content\">\n<p>Hi {{ $('Extract Application Data').item.json.candidate_name.split(' ')[0] }},</p>\n\n<p>Thank you for taking the time to apply for the <strong>{{ $('Extract Application Data').item.json.position_applied }}</strong> position at [Your Company]. We genuinely appreciate your interest in joining our team.</p>\n\n<p>After carefully reviewing your application and experience, we've decided to move forward with candidates whose backgrounds more closely align with our current needs for this specific role.</p>\n\n<p>This was a competitive process, and we were impressed by many aspects of your background. We encourage you to:</p>\n<ul>\n<li>Check our <a href=\"https://yourcompany.com/careers\">careers page</a> for other opportunities that might be a better fit</li>\n<li>Connect with us on <a href=\"https://linkedin.com/company/yourcompany\">LinkedIn</a> to stay updated on future openings</li>\n<li>Reapply in the future as your career develops</li>\n</ul>\n\n<p>We wish you all the best in your job search and future career endeavors.</p>\n\n<p>Best regards,<br>\n<strong>Talent Acquisition Team</strong><br>\n[Your Company]</p>\n</div>\n<div class=\"footer\">\n<p>Application ID: {{ $('Extract Application Data').item.json.application_id }}</p>\n</div>\n</body>\n</html>",
"options": {},
"subject": "=Update on Your {{ $('Extract Application Data').item.json.position_applied }} Application"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "7e75f755-7d07-4a34-a91e-5a33ae27696b",
"name": "Log to Hiring Database",
"type": "n8n-nodes-base.googleSheets",
"position": [
336,
784
],
"parameters": {
"columns": {
"value": {
"status": "={{ $json.status || 'Processed' }}",
"linkedin": "={{ $('Extract Application Data').item.json.linkedin_url }}",
"portfolio": "={{ $('Extract Application Data').item.json.portfolio_url }}",
"cultural_fit": "={{ $('AI Candidate Screener').item.json.output.cultural_fit_score }}",
"skills_match": "={{ $('AI Candidate Screener').item.json.output.skills_match_score }}",
"overall_score": "={{ $('AI Candidate Screener').item.json.output.overall_score }}",
"application_id": "={{ $('Extract Application Data').item.json.application_id }}",
"candidate_name": "={{ $('Extract Application Data').item.json.candidate_name }}",
"recommendation": "={{ $('AI Candidate Screener').item.json.output.recommendation }}",
"candidate_email": "={{ $('Extract Application Data').item.json.candidate_email }}",
"candidate_phone": "={{ $('Extract Application Data').item.json.candidate_phone }}",
"salary_estimate": "={{ $('AI Candidate Screener').item.json.output.estimated_salary_range }}",
"application_date": "={{ $('Extract Application Data').item.json.application_date }}",
"experience_score": "={{ $('AI Candidate Screener').item.json.output.experience_score }}",
"position_applied": "={{ $('Extract Application Data').item.json.position_applied }}",
"years_experience": "={{ $('Extract Application Data').item.json.years_experience }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"typeVersion": 4.5
},
{
"id": "baadadfd-335e-44fb-84d0-0ef98335c76e",
"name": "Sticky Note - Intake",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3008,
336
],
"parameters": {
"color": 5,
"width": 640,
"height": 576,
"content": "## \ud83d\udcdd Application Intake\n\nCaptures job applications via Jotform and extracts all candidate data including resume.\n\n### What Happens Here\n- **Jotform** trigger receives application.\nCreate your form for free on [Jotform using this link](https://www.jotform.com/?partner=mediajade)\n- Extracts: name, email, phone, position, experience, LinkedIn, portfolio, resume\n- Generates unique application ID\n- Downloads resume file for processing\n\n**Output:** Structured candidate data ready for AI analysis"
},
"typeVersion": 1
},
{
"id": "54f7865d-5b0f-4dac-8f32-fcf7aeac882e",
"name": "Sticky Note - Parsing",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2272,
192
],
"parameters": {
"color": 4,
"width": 562,
"height": 724,
"content": "## \ud83e\udd16 AI Resume Analysis\n\nUses OpenAI to parse resume and extract structured information.\n\n### AI Tasks\n1. **Resume Parsing:** Extracts skills, experience, education, projects\n2. **Pattern Detection:** Identifies job hopping, gaps, progression\n3. **Quality Assessment:** Evaluates presentation and completeness\n\n### Output\nMarkdown-formatted summary with:\n- Professional summary\n- Technical & soft skills\n- Work history with achievements\n- Education & certifications\n- Red flags or concerns\n- Standout qualities\n\n**Tech:** OpenAI GPT-4o-mini for cost-effective processing"
},
"typeVersion": 1
},
{
"id": "4ba29b67-1c31-4793-bed8-ac0f39033c30",
"name": "Sticky Note - Screening",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1552,
80
],
"parameters": {
"color": 6,
"width": 500,
"height": 1116,
"content": "## \ud83c\udfaf Intelligent Candidate Screening\n\nAI Agent evaluates candidates against job requirements with structured scoring.\n\n### Evaluation Criteria\n- **Skills Match:** Required vs preferred skills analysis\n- **Experience Quality:** Career progression and relevance\n- **Cultural Fit:** Communication style and values\n- **Red Flags:** Job hopping, gaps, inconsistencies\n\n### Scoring System\n- **Overall Score:** 0-100 based on weighted criteria\n- **Recommendation:** strong_yes | yes | maybe | no | strong_no\n- **Component Scores:** Skills, experience, culture fit\n\n### Structured Output\nJSON schema ensures consistent evaluations:\n- Scores and recommendation\n- Skills lists (present/missing)\n- Standout qualities\n- Interview focus areas\n- Salary estimate\n- Detailed markdown assessment\n\n**Result:** Data-driven hiring decisions with full transparency"
},
"typeVersion": 1
},
{
"id": "efc3e4dc-a5eb-4b6a-9b24-e863af4838c5",
"name": "Sticky Note - Routing",
"type": "n8n-nodes-base.stickyNote",
"position": [
-896,
-96
],
"parameters": {
"color": 3,
"width": 892,
"height": 1388,
"content": "## \ud83d\udea6 Smart Routing & Actions\n\nAutomatically routes candidates based on AI evaluation and triggers appropriate workflows.\n\n### Route 1: Strong Yes (Score 85-100)\n\u2705 **Instant Actions:**\n- Slack alert to hiring team\n- Interview invitation email\n- Log to database with \"Hot Candidate\" tag\n\n### Route 2: Yes/Maybe (Score 60-84)\n\u26a0\ufe0f **Manager Review:**\n- Email to hiring manager with full assessment\n- Await human approval decision\n- Then send appropriate email\n\n### Route 3: No/Strong No (Score <60)\n\u274c **Polite Rejection:**\n- Professional rejection email\n- Encouragement to apply for other roles\n- Log to database for future reference\n\n**All routes:** Log complete data to Google Sheets for analytics\n\n**Result:** Fast response times, no candidate left behind, data-driven decisions"
},
"typeVersion": 1
},
{
"id": "bde3090f-306e-47c0-96c1-5d2737952475",
"name": "Sticky Note - Analytics",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
288
],
"parameters": {
"color": 7,
"width": 496,
"height": 672,
"content": "## \ud83d\udcca Hiring Analytics Hub\n\nAll applications logged to Google Sheets for comprehensive hiring analytics.\n\n### Tracked Metrics\n- Application volume by position\n- Average candidate scores\n- Time-to-hire by recommendation tier\n- Skills gap analysis\n- Source effectiveness\n- Conversion rates by score range\n\n### Sheet Columns\napplication_id | date | name | email | phone | position | experience | overall_score | skills_match | experience_score | cultural_fit | recommendation | status | linkedin | portfolio | salary_estimate\n\n**Use Case:** Build dashboards to optimize hiring process and identify top talent sources"
},
"typeVersion": 1
},
{
"id": "48ef417e-9b90-4fc9-9693-09a0ed4c0e1d",
"name": "Send a message",
"type": "n8n-nodes-base.slack",
"position": [
-480,
560
],
"parameters": {
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": ""
},
"otherOptions": {}
},
"typeVersion": 2.3
},
{
"id": "b0ec920b-97b7-425e-a0fa-f30f91a70f31",
"name": "Jotform Trigger",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-2960,
656
],
"parameters": {
"form": "252815294070456"
},
"credentials": {
"jotFormApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "659cd7d7-9d4d-44fb-828c-b7a7282656d5",
"connections": {
"Strong Yes?": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Maybe or Yes?": {
"main": [
[
{
"node": "Request Manager Review",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Rejection Email",
"type": "main",
"index": 0
}
]
]
},
"Process Resume": {
"main": [
[
{
"node": "AI Resume Parser",
"type": "main",
"index": 0
}
]
]
},
"Send a message": {
"main": [
[
{
"node": "Send Interview Invitation",
"type": "main",
"index": 0
}
]
]
},
"Download Resume": {
"main": [
[
{
"node": "Process Resume",
"type": "main",
"index": 0
}
]
]
},
"Jotform Trigger": {
"main": [
[
{
"node": "Extract Application Data",
"type": "main",
"index": 0
}
]
]
},
"AI Resume Parser": {
"main": [
[
{
"node": "AI Candidate Screener",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Candidate Screener",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Send Rejection Email": {
"main": [
[
{
"node": "Log to Hiring Database",
"type": "main",
"index": 0
}
]
]
},
"AI Candidate Screener": {
"main": [
[
{
"node": "Strong Yes?",
"type": "main",
"index": 0
},
{
"node": "Maybe or Yes?",
"type": "main",
"index": 0
}
]
]
},
"Request Manager Review": {
"main": [
[
{
"node": "Log to Hiring Database",
"type": "main",
"index": 0
}
]
]
},
"Extract Application Data": {
"main": [
[
{
"node": "Download Resume",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Candidate Screener",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Send Interview Invitation": {
"main": [
[
{
"node": "Log to Hiring Database",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2jotFormApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Revolutionize your recruitment process with intelligent AI-driven candidate screening that evaluates resumes, scores applicants, and automatically routes them based on fit - saving 10-15 hours per week on initial screening.
Source: https://n8n.io/workflows/9435/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.
Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.
This template is designed for marketers, content creators, and e-commerce brands who want to automate the creation of professional ad videos at scale. It’s ideal for teams looking to generate consiste
This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.
🧠 Automate end-to-end SEO blog creation and WordPress publishing using a GPT-5 multi-agent workflow with real-time research, metadata generation, and optional featured images.