
Resume verification workflow automation
Description
Categories
⚙️ Automation
Nodes Used
n8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.gmailn8n-nodes-base.gmailn8n-nodes-base.mergen8n-nodes-base.webhookn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNote
PriceGratuit
Views0
Last Updated11/28/2025
workflow.json
{
"id": "",
"meta": {
"instanceId": "",
"templateCredsSetupCompleted": false
},
"name": "Resume verification workflow automation",
"tags": [
{
"id": "",
"name": "image-generation"
},
{
"id": "",
"name": "verifiemail"
},
{
"id": "",
"name": "automation"
}
],
"nodes": [
{
"id": "001d7a79-9826-40b6-91e6-6759765c7ca0",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-1184,
1072
],
"webhookId": "",
"parameters": {
"path": "resume-verifier",
"options": {},
"httpMethod": "POST",
"responseMode": "lastNode"
},
"typeVersion": 1
},
{
"id": "7529ae4c-48bb-4df6-90ad-cd492903708e",
"name": "Sticky Note - Webhook",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1312,
768
],
"parameters": {
"color": 7,
"width": 400,
"height": 440,
"content": "## 🟩 WEBHOOK TRIGGER\n\n**Expected Payload:**\n```json\n{\n \"name\": \"John Doe\",\n \"email\": \"[email protected]\",\n \"role\": \"Frontend Developer\",\n \"skills\": \"React, JavaScript, Tailwind, Git\"\n}\n```\n\n✅ **Test with:** Postman, cURL, or any HTTP client"
},
"typeVersion": 1
},
{
"id": "dd29171e-2d1c-4d6a-b7d9-8d2221ff2d9c",
"name": "Sticky Note - Credentials Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1760,
672
],
"parameters": {
"color": 7,
"width": 420,
"height": 424,
"content": "## ⚙️ CREDENTIALS SETUP GUIDE\n\n#### 1️⃣ **Gmail OAuth2**\n- Go to: Credentials → Add Credential\n- Type: Gmail OAuth2\n\n#### 2️⃣ **VerifiEmail API**\n- Sign up at: https://verifi.email\n- Get API Key from dashboard\n\n#### 3️⃣ **HTML/CSS to Image**\n- Sign up at: https://htmlcsstoimg.com\n- Get User ID + API Key\n\n💡 **All three credentials are REQUIRED** for this workflow to function!"
},
"typeVersion": 1
},
{
"id": "104ff66b-e922-4c5d-a47a-4be7182702bd",
"name": "Set - Prepare Resume Data",
"type": "n8n-nodes-base.set",
"position": [
-736,
1072
],
"parameters": {
"fields": {
"values": [
{
"name": "name",
"stringValue": "={{ $json.body.name }}"
},
{
"name": "email",
"stringValue": "={{ $json.body.email }}"
},
{
"name": "role",
"stringValue": "={{ $json.body.role }}"
},
{
"name": "skills",
"stringValue": "={{ $json.body.skills }}"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "2f3e9e78-710e-4ca3-88fb-abf99fed3645",
"name": "Sticky Note - Set Node",
"type": "n8n-nodes-base.stickyNote",
"position": [
-864,
848
],
"parameters": {
"color": 7,
"width": 400,
"height": 404,
"content": "## 🟨 DATA EXTRACTION & CLEANING\n\n\n**Field Mappings:**\n- `name` ← `$json.body.name`\n- `email` ← `$json.body.email`\n- `role` ← `$json.body.role`\n- `skills` ← `$json.body.skills`"
},
"typeVersion": 1
},
{
"id": "02b2a4ec-0b5b-4e96-bd4c-1950db99f701",
"name": "Sticky Note - Email Verification",
"type": "n8n-nodes-base.stickyNote",
"position": [
-432,
784
],
"parameters": {
"color": 7,
"width": 388,
"height": 456,
"content": "## 🟦 EMAIL VERIFICATION SERVICE\n\n**Input:** `{{ $json.email }}`\n\n**Verification Checks:**\n✓ **RFC Compliance** - Valid email format\n✓ **MX Records** - Domain has mail servers\n✓ **Deliverability** - Mailbox exists and active\n✓ **Spoof Detection** - Not a fake/temporary email\n✓ **Disposable Check** - Not from temporary email services\n\n"
},
"typeVersion": 1
},
{
"id": "b1f1e84a-b908-4d01-9d3c-851d55e86bc4",
"name": "IF - Check Email Valid",
"type": "n8n-nodes-base.if",
"position": [
96,
1072
],
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json.valid }}",
"value2": "={{ true }}"
}
]
}
},
"typeVersion": 1
},
{
"id": "6dd7a625-18a1-4823-961f-8c4935490fa3",
"name": "Sticky Note - IF Logic",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
608
],
"parameters": {
"color": 7,
"width": 400,
"height": 632,
"content": "## 🟧 CONDITIONAL ROUTING LOGIC\n\n**Condition:**\n```javascript\n$json.valid === true\n```\n\n**Flow Control:**\n\n### ✅ **TRUE Branch** (Top Output)\n1. → Merge with resume data\n2. → Generate image\n3. → Send success email with card\n\n### ❌ **FALSE Branch** (Bottom Output)\n1. → Send invalid email notice\n2. → Workflow ends"
},
"typeVersion": 1
},
{
"id": "e5748feb-cb89-4d19-b15e-ae45c8aba654",
"name": "Merge - Combine Data",
"type": "n8n-nodes-base.merge",
"position": [
496,
1008
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "mergeByPosition"
},
"typeVersion": 2.1
},
{
"id": "74c2eb03-f6f2-44cc-a393-17b20c58a869",
"name": "Sticky Note - Merge",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
544
],
"parameters": {
"color": 7,
"width": 420,
"height": 620,
"content": "## 🔀 DATA MERGE OPERATION\n\n**Input 1:** Resume Data (from Set node)\n```json\n{\n \"name\": \"John Doe\",\n \"email\": \"[email protected]\",\n \"role\": \"Frontend Developer\",\n \"skills\": \"React, JavaScript...\"\n}\n```\n\n**Input 2:** Validation Result (from IF TRUE)\n```json\n{\n \"valid\": true,\n \"details\": {\n \"rfcCompliant\": true,\n \"validMxRecord\": true,\n \"mx\": { \"provider\": \"google.com\" }\n }\n}\n```\n\n"
},
"typeVersion": 1
},
{
"id": "33f21065-5ab7-468b-bd09-ce64e9c66b43",
"name": "Sticky Note - Image Generation",
"type": "n8n-nodes-base.stickyNote",
"position": [
832,
768
],
"parameters": {
"color": 7,
"width": 296,
"height": 392,
"content": "## 🟪 VISUAL CARD GENERATION\n\n**Input Data:**\n- `{{ $json.name }}` - Candidate name\n- `{{ $json.role }}` - Job role/title\n- `{{ $json.skills }}` - Skills list\n- `{{ $json.email }}` - Verified email\n\n"
},
"typeVersion": 1
},
{
"id": "bcc58e51-720a-43ea-a695-5e182a302174",
"name": "Gmail - Send Valid Card",
"type": "n8n-nodes-base.gmail",
"position": [
1536,
1008
],
"webhookId": "",
"parameters": {
"sendTo": "={{ $('Set - Prepare Resume Data').item.json.email }}",
"message": "=<div style=\"font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;\">\n <h2 style=\"color: #667eea;\">Hi {{ $('Set - Prepare Resume Data').item.json.name }}! 👋</h2>\n <p style=\"font-size: 16px; line-height: 1.6; color: #333;\">\n Great news! Your email has been <strong>successfully verified</strong>. ✅\n </p>\n <p style=\"font-size: 16px; line-height: 1.6; color: #333;\">\n Here's your personalized resume snapshot card. Feel free to use it on your portfolio, LinkedIn, or share it with potential employers!\n </p>\n <div style=\"margin: 30px 0; padding: 20px; background: #f8f9fa; border-radius: 8px; text-align: center;\">\n <p style=\"margin: 0; color: #666; font-size: 14px;\">Your resume card is attached below 📎</p>\n </div>\n <p style=\"font-size: 14px; color: #666;\">\n Best regards,<br>\n <strong>Resume Verification Team</strong>\n </p>\n</div>",
"options": {
"attachmentsUi": {
"attachmentsBinary": [
{}
]
}
},
"subject": "Your Verified Resume Snapshot Card 🎉"
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_Gmail_OAuth2_Credential_ID",
"name": "Gmail OAuth2"
}
},
"typeVersion": 2.1
},
{
"id": "670d3f3a-77e6-410f-a4ac-dec7720ea9eb",
"name": "Sticky Note - Gmail Valid",
"type": "n8n-nodes-base.stickyNote",
"position": [
1488,
672
],
"parameters": {
"color": 7,
"width": 324,
"height": 488,
"content": "## 🟪 SUCCESS EMAIL DELIVERY\n\n**Attachment:**\n- Binary data from HTTP Request node\n- File: Resume card PNG image\n- Downloaded from htmlcsstoimg.com URL\n\n**Email Features:**\n✅ Personalized content\n✅ Professional HTML styling\n✅ Verification badge shown\n✅ Resume card attached as PNG\n✅ Mobile-responsive design\n"
},
"typeVersion": 1
},
{
"id": "1d23f4a7-cf65-4173-9b0c-42dbc6c6bb86",
"name": "Gmail - Send Invalid Notice",
"type": "n8n-nodes-base.gmail",
"position": [
560,
1312
],
"webhookId": "",
"parameters": {
"sendTo": "={{ $('Set - Prepare Resume Data').item.json.email }}",
"message": "=<div style=\"font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;\">\n <h2 style=\"color: #ef4444;\">Hi {{ $('Set - Prepare Resume Data').item.json.name }},</h2>\n <p style=\"font-size: 16px; line-height: 1.6; color: #333;\">\n Unfortunately, we couldn't verify the email address you provided: <code>{{ $('Set - Prepare Resume Data').item.json.email }}</code>\n </p>\n <div style=\"background: #fef2f2; border-left: 4px solid #ef4444; padding: 15px; margin: 20px 0;\">\n <p style=\"margin: 0; color: #991b1b; font-weight: 600;\">⚠️ Please check:</p>\n <ul style=\"color: #7f1d1d; margin: 10px 0;\">\n <li>Email spelling and format</li>\n <li>Domain name is correct</li>\n <li>Email account is active</li>\n </ul>\n </div>\n <p style=\"font-size: 14px; color: #666;\">\n Feel free to submit again with the correct email address.\n </p>\n <p style=\"font-size: 14px; color: #666;\">\n Best regards,<br>\n <strong>Resume Verification Team</strong>\n </p>\n</div>",
"options": {},
"subject": "Email Verification Failed ⚠️"
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_Gmail_OAuth2_Credential_ID",
"name": "Gmail OAuth2"
}
},
"typeVersion": 2.1
},
{
"id": "b9b8ba02-966b-4c7c-9e59-f574bee28749",
"name": "Sticky Note - Gmail Invalid",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
1312
],
"parameters": {
"color": 7,
"width": 420,
"height": 488,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n## 🟥 INVALID EMAIL HANDLER\n\n**Common Failure Reasons:**\n❌ **Typo in email** - Spelling mistake\n❌ **Invalid domain** - Domain doesn't exist\n❌ **Disposable email** - Temporary email service\n❌ **Mailbox doesn't exist** - Email not active\n❌ **No MX records** - Domain has no mail servers\n\n**Error Handling Benefits:**\n✅ User-friendly error message\n✅ Clear troubleshooting steps\n✅ Encourages correction and resubmission\n✅ Maintains professional communication\n✅ Prevents silent failures"
},
"typeVersion": 1
},
{
"id": "9a135cb2-e2a5-4b96-beff-3419ca846e6f",
"name": "Sticky Note - Workflow Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1744,
32
],
"parameters": {
"color": 7,
"width": 372,
"height": 616,
"content": "## 📊 WORKFLOW OVERVIEW\n\n### **Resume Verification & Visual Card Generator**\n\n### 🎯 **Purpose:**\nAutomatically verify candidate emails and generate beautiful, personalized resume snapshot cards delivered via email.\n\n### 📋 **Workflow Steps:**\n\n1️⃣ **Webhook Trigger** - Receive resume data via POST request\n2️⃣ **Data Cleaning** - Extract and format candidate information\n3️⃣ **Email Verification** - Validate email deliverability (VerifiEmail API)\n4️⃣ **Conditional Logic** - Route based on validation result\n5️⃣ **Data Merge** - Combine resume + validation data (valid only)\n6️⃣ **Image Generation** - Create visual resume card (htmlcsstoimg.com)\n7️⃣ **Download Image** - Fetch PNG for email attachment\n8️⃣ **Email Delivery** - Send card to valid emails OR error to invalid\n"
},
"typeVersion": 1
},
{
"id": "71ce79dc-e903-4089-86ee-cacf1cf38c84",
"name": "Verifi Email",
"type": "n8n-nodes-verifiemail.verifiEmail",
"position": [
-320,
1072
],
"parameters": {
"email": "={{ $json.email }}"
},
"credentials": {
"verifiEmailApi": {
"id": "YOUR_VerifiEmail_API_Key",
"name": "VerifiEmail API"
}
},
"typeVersion": 1
},
{
"id": "54df185b-5266-473f-9322-b45ffc0a6d3a",
"name": "Sticky Note - HTTP Request",
"type": "n8n-nodes-base.stickyNote",
"position": [
1152,
720
],
"parameters": {
"color": 7,
"width": 320,
"height": 440,
"content": "## 📥 IMAGE DOWNLOAD\n\n**Input:** `{{ $json.image_url }}`\n- URL from HTML/CSS to Image node\n- Example: `https://hcti.io/v1/image/abc123...`\n\n**Process:**\n1. Receives image URL from previous node\n2. Makes GET request to download image\n3. Stores as binary data in `data` field\n4. Passes to Gmail for attachment"
},
"typeVersion": 1
},
{
"id": "c6db2b65-3422-4b4a-a2fe-4df06bee3624",
"name": "Download Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
1232,
1008
],
"parameters": {
"url": "={{ $json.image_url }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "8e0283fa-6bd1-4e8d-a38e-03761b1a9109",
"name": "Generate Image",
"type": "n8n-nodes-htmlcsstoimage.htmlCssToImage",
"position": [
912,
1008
],
"parameters": {
"html_content": "=<div style=\"width:600px; padding:30px; font-family:'Inter', 'Segoe UI', sans-serif; background:linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius:16px; box-shadow:0 10px 40px rgba(0,0,0,0.3);\">\n <div style=\"background:rgba(255,255,255,0.95); padding:30px; border-radius:12px; color:#333;\">\n <div style=\"border-bottom:3px solid #667eea; padding-bottom:15px; margin-bottom:20px;\">\n <h1 style=\"margin:0; font-size:32px; color:#667eea;\">{{ $json.name }}</h1>\n <h3 style=\"margin:8px 0 0 0; color:#666; font-weight:400;\">{{ $json.role }}</h3>\n </div>\n <div style=\"margin:20px 0;\">\n <h4 style=\"color:#667eea; margin:0 0 10px 0; font-size:16px;\">🛠️ Skills & Technologies</h4>\n <p style=\"background:#f3f4f6; padding:12px; border-radius:8px; margin:0; line-height:1.6; color:#333;\">{{ $json.skills }}</p>\n </div>\n <div style=\"margin-top:25px; padding-top:20px; border-top:1px solid #e5e7eb; display:flex; justify-content:space-between; align-items:center;\">\n <span style=\"background:#10b981; color:white; padding:6px 16px; border-radius:20px; font-size:13px; font-weight:600;\">✓ EMAIL VERIFIED</span>\n <p style=\"margin:0; font-size:11px; color:#9ca3af;\">{{ $json.email }}</p>\n </div>\n </div>\n</div>"
},
"credentials": {
"htmlcsstoimgApi": {
"id": "YOUR_Htmlcsstoimg_API_Key",
"name": "Htmlcsstoimg API"
}
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "",
"connections": {
"Webhook": {
"main": [
[
{
"node": "Set - Prepare Resume Data",
"type": "main",
"index": 0
}
]
]
},
"Verifi Email": {
"main": [
[
{
"node": "IF - Check Email Valid",
"type": "main",
"index": 0
}
]
]
},
"Download Image": {
"main": [
[
{
"node": "Gmail - Send Valid Card",
"type": "main",
"index": 0
}
]
]
},
"Generate Image": {
"main": [
[
{
"node": "Download Image",
"type": "main",
"index": 0
}
]
]
},
"Merge - Combine Data": {
"main": [
[
{
"node": "Generate Image",
"type": "main",
"index": 0
}
]
]
},
"IF - Check Email Valid": {
"main": [
[
{
"node": "Merge - Combine Data",
"type": "main",
"index": 1
}
],
[
{
"node": "Gmail - Send Invalid Notice",
"type": "main",
"index": 0
}
]
]
},
"Set - Prepare Resume Data": {
"main": [
[
{
"node": "Verifi Email",
"type": "main",
"index": 0
},
{
"node": "Merge - Combine Data",
"type": "main",
"index": 0
}
]
]
}
},
"description": "Automatically verify candidate emails and generate beautiful resume snapshot cards. Uses VerifiEmail for validation and htmlcsstoimage.com to create professional visual cards delivered via Gmail."
}