This workflow corresponds to n8n.io template #10133 — we link there as the canonical source.
This workflow follows the Gmail → HTTP Request 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": "",
"meta": {
"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
],
"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": "## \ud83d\udfe9 WEBHOOK TRIGGER\n\n**Expected Payload:**\n```json\n{\n \"name\": \"John Doe\",\n \"email\": \"john@gmail.com\",\n \"role\": \"Frontend Developer\",\n \"skills\": \"React, JavaScript, Tailwind, Git\"\n}\n```\n\n\u2705 **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": "## \u2699\ufe0f CREDENTIALS SETUP GUIDE\n\n#### 1\ufe0f\u20e3 **Gmail OAuth2**\n- Go to: Credentials \u2192 Add Credential\n- Type: Gmail OAuth2\n\n#### 2\ufe0f\u20e3 **VerifiEmail API**\n- Sign up at: https://verifi.email\n- Get API Key from dashboard\n\n#### 3\ufe0f\u20e3 **HTML/CSS to Image**\n- Sign up at: https://htmlcsstoimg.com\n- Get User ID + API Key\n\n\ud83d\udca1 **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": "## \ud83d\udfe8 DATA EXTRACTION & CLEANING\n\n\n**Field Mappings:**\n- `name` \u2190 `$json.body.name`\n- `email` \u2190 `$json.body.email`\n- `role` \u2190 `$json.body.role`\n- `skills` \u2190 `$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": "## \ud83d\udfe6 EMAIL VERIFICATION SERVICE\n\n**Input:** `{{ $json.email }}`\n\n**Verification Checks:**\n\u2713 **RFC Compliance** - Valid email format\n\u2713 **MX Records** - Domain has mail servers\n\u2713 **Deliverability** - Mailbox exists and active\n\u2713 **Spoof Detection** - Not a fake/temporary email\n\u2713 **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": "## \ud83d\udfe7 CONDITIONAL ROUTING LOGIC\n\n**Condition:**\n```javascript\n$json.valid === true\n```\n\n**Flow Control:**\n\n### \u2705 **TRUE Branch** (Top Output)\n1. \u2192 Merge with resume data\n2. \u2192 Generate image\n3. \u2192 Send success email with card\n\n### \u274c **FALSE Branch** (Bottom Output)\n1. \u2192 Send invalid email notice\n2. \u2192 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": "## \ud83d\udd00 DATA MERGE OPERATION\n\n**Input 1:** Resume Data (from Set node)\n```json\n{\n \"name\": \"John Doe\",\n \"email\": \"john@gmail.com\",\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": "## \ud83d\udfea 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
],
"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 }}! \ud83d\udc4b</h2>\n <p style=\"font-size: 16px; line-height: 1.6; color: #333;\">\n Great news! Your email has been <strong>successfully verified</strong>. \u2705\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 \ud83d\udcce</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 \ud83c\udf89"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"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": "## \ud83d\udfea 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\u2705 Personalized content\n\u2705 Professional HTML styling\n\u2705 Verification badge shown\n\u2705 Resume card attached as PNG\n\u2705 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
],
"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;\">\u26a0\ufe0f 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 \u26a0\ufe0f"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"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## \ud83d\udfe5 INVALID EMAIL HANDLER\n\n**Common Failure Reasons:**\n\u274c **Typo in email** - Spelling mistake\n\u274c **Invalid domain** - Domain doesn't exist\n\u274c **Disposable email** - Temporary email service\n\u274c **Mailbox doesn't exist** - Email not active\n\u274c **No MX records** - Domain has no mail servers\n\n**Error Handling Benefits:**\n\u2705 User-friendly error message\n\u2705 Clear troubleshooting steps\n\u2705 Encourages correction and resubmission\n\u2705 Maintains professional communication\n\u2705 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": "## \ud83d\udcca WORKFLOW OVERVIEW\n\n### **Resume Verification & Visual Card Generator**\n\n### \ud83c\udfaf **Purpose:**\nAutomatically verify candidate emails and generate beautiful, personalized resume snapshot cards delivered via email.\n\n### \ud83d\udccb **Workflow Steps:**\n\n1\ufe0f\u20e3 **Webhook Trigger** - Receive resume data via POST request\n2\ufe0f\u20e3 **Data Cleaning** - Extract and format candidate information\n3\ufe0f\u20e3 **Email Verification** - Validate email deliverability (VerifiEmail API)\n4\ufe0f\u20e3 **Conditional Logic** - Route based on validation result\n5\ufe0f\u20e3 **Data Merge** - Combine resume + validation data (valid only)\n6\ufe0f\u20e3 **Image Generation** - Create visual resume card (htmlcsstoimg.com)\n7\ufe0f\u20e3 **Download Image** - Fetch PNG for email attachment\n8\ufe0f\u20e3 **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": {
"name": "<your credential>"
}
},
"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": "## \ud83d\udce5 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;\">\ud83d\udee0\ufe0f 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;\">\u2713 EMAIL VERIFIED</span>\n <p style=\"margin:0; font-size:11px; color:#9ca3af;\">{{ $json.email }}</p>\n </div>\n </div>\n</div>"
},
"credentials": {
"htmlcsstoimgApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"active": false,
"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."
}
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.
gmailOAuth2htmlcsstoimgApiverifiEmailApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Verify candidate emails and auto-generate beautiful resume cards. Validates deliverability, creates professional PNG cards, and emails them instantly.
Source: https://n8n.io/workflows/10133/ — 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.
This workflow automates the entire pre-issuance process of workshop participation certificates. When an attendee submits a registration form via a webhook, the workflow validates the data, verifies th
Automated Email Verification & Digital Health Card Generator
Automate your entire beta tester onboarding process from signup to tracking with this comprehensive, production-ready n8n workflow.
A comprehensive n8n workflow template that completely automates the startup pitch deck submission process for accelerators, incubators, VC firms, and startup competitions. This workflow validates foun
This workflow automates the entire parent consent process for school field trips, replacing manual paper forms with a secure, verified, and legally compliant digital system.