AutomationFlowsEmail & Gmail › Automated Email Verification & Onboarding with Verifiemail, Gmail & Slack

Automated Email Verification & Onboarding with Verifiemail, Gmail & Slack

ByJitesh Dugar @jiteshdugar on n8n.io

Automated email verification and welcome email workflow that validates new user signups, prevents fake emails, and creates a seamless onboarding experience with real-time team notifications.

Webhook trigger★★★★☆ complexity21 nodesN8N Nodes VerifiemailSlackGoogle SheetsGmailStop And Error
Email & Gmail Trigger: Webhook Nodes: 21 Complexity: ★★★★☆ Added:
Automated Email Verification & Onboarding with Verifiemail, Gmail & Slack — n8n workflow card showing N8N Nodes Verifiemail, Slack, Google Sheets integration

This workflow corresponds to n8n.io template #9150 — we link there as the canonical source.

This workflow follows the Gmail → Google Sheets 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 →

Download .json
{
  "id": "0l3nj6SM84lw3lvH",
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "Customer Onboarding Email Verification",
  "tags": [],
  "nodes": [
    {
      "id": "86910847-a9b7-4a7d-9ed0-259e9fb0b880",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -80,
        0
      ],
      "parameters": {
        "path": "/new-signup",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "e834db7e-1dc7-4ee5-8ac4-1be83f1a4041",
      "name": "Data Sanitization",
      "type": "n8n-nodes-base.code",
      "position": [
        176,
        0
      ],
      "parameters": {
        "jsCode": "// Handle different input structures safely\nconst items = $input.all();\n\nreturn items.map(item => {\n  // Try different possible data structures\n  const data = item.json.body || item.json || {};\n  \n  // Safe access with fallbacks\n  const name = (data.name || '').trim();\n  const email = (data.email || '').toLowerCase().trim();\n  \n  // Validation\n  if (!name || !email) {\n    throw new Error(`Missing required fields. Received: ${JSON.stringify(data)}`);\n  }\n  \n  return {\n    json: {\n      name: name,\n      email: email,\n      original_email: data.email || email,\n      received_at: new Date().toISOString()\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "f0ccbc6e-9c10-47b3-bd2e-fb06a1f3615d",
      "name": "Email Validation",
      "type": "n8n-nodes-verifiemail.verifiEmail",
      "position": [
        496,
        0
      ],
      "parameters": {
        "email": "={{ $json.email }}"
      },
      "credentials": {
        "verifiEmailApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7fa85889-6906-4637-8bcb-d2ec30370fda",
      "name": "Validation Decision",
      "type": "n8n-nodes-base.if",
      "position": [
        800,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "35f8b0f1-c001-46e2-a4f1-f7d5bb7b2b24",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.valid }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1c045477-d1eb-4bc7-a006-fd87321ddbb4",
      "name": "Personalize Welcome Email",
      "type": "n8n-nodes-base.code",
      "position": [
        1072,
        -96
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Get data from previous nodes\nconst name = $('Data Sanitization').item.json.name;\nconst email = $('Data Sanitization').item.json.email;\nconst firstName = name.split(' ')[0];\n\n// Get validation details (optional - for logging)\nconst validationScore = $json.quality_score || 'N/A';\n\nreturn {\n  json: {\n    name: name,\n    firstName: firstName,\n    email: email,\n    subject: `Welcome to Our Platform, ${firstName}! \ud83c\udf89`,\n    emailBody: `\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n</head>\n<body style=\"margin: 0; padding: 0; font-family: Arial, sans-serif; background-color: #f4f4f4;\">\n  <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background-color: #f4f4f4; padding: 20px;\">\n    <tr>\n      <td align=\"center\">\n        <table width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"background-color: #ffffff; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 4px rgba(0,0,0,0.1);\">\n          \n          <!-- Header -->\n          <tr>\n            <td style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 40px 20px; text-align: center;\">\n              <h1 style=\"color: #ffffff; margin: 0; font-size: 28px;\">Welcome, ${firstName}! \ud83c\udf89</h1>\n            </td>\n          </tr>\n          \n          <!-- Content -->\n          <tr>\n            <td style=\"padding: 40px 30px;\">\n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0 0 20px 0;\">\n                Hi <strong>${firstName}</strong>,\n              </p>\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0 0 20px 0;\">\n                Thank you for joining us! We're thrilled to have you as part of our community.\n              </p>\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0 0 30px 0;\">\n                Here's what you can do next:\n              </p>\n              \n              <!-- Action Buttons -->\n              <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-bottom: 30px;\">\n                <tr>\n                  <td style=\"padding: 10px 0;\">\n                    <a href=\"https://yourapp.com/dashboard\" style=\"display: inline-block; background-color: #667eea; color: #ffffff; text-decoration: none; padding: 14px 30px; border-radius: 5px; font-weight: bold; font-size: 16px;\">\n                      \ud83d\udcca Access Your Dashboard\n                    </a>\n                  </td>\n                </tr>\n                <tr>\n                  <td style=\"padding: 10px 0;\">\n                    <a href=\"https://yourapp.com/getting-started\" style=\"display: inline-block; background-color: #48bb78; color: #ffffff; text-decoration: none; padding: 14px 30px; border-radius: 5px; font-weight: bold; font-size: 16px;\">\n                      \ud83d\udcda Getting Started Guide\n                    </a>\n                  </td>\n                </tr>\n                <tr>\n                  <td style=\"padding: 10px 0;\">\n                    <a href=\"https://yourapp.com/support\" style=\"display: inline-block; background-color: #ed8936; color: #ffffff; text-decoration: none; padding: 14px 30px; border-radius: 5px; font-weight: bold; font-size: 16px;\">\n                      \ud83d\udcac Contact Support\n                    </a>\n                  </td>\n                </tr>\n              </table>\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0 0 10px 0;\">\n                Questions? Just reply to this email - we're here to help!\n              </p>\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0;\">\n                Best regards,<br>\n                <strong>The Team</strong>\n              </p>\n            </td>\n          </tr>\n          \n          <!-- Footer -->\n          <tr>\n            <td style=\"background-color: #f7fafc; padding: 20px 30px; text-align: center; border-top: 1px solid #e2e8f0;\">\n              <p style=\"font-size: 12px; color: #718096; margin: 0;\">\n                \u00a9 2025 Your Company. All rights reserved.\n              </p>\n            </td>\n          </tr>\n          \n        </table>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n    `,\n    timestamp: new Date().toISOString(),\n    status: 'verified',\n    validationScore: validationScore\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "090efe61-fd58-400b-935b-70291bb3595e",
      "name": "Prepare Correction Email",
      "type": "n8n-nodes-base.code",
      "position": [
        1104,
        176
      ],
      "parameters": {
        "jsCode": "const name = $('Data Sanitization').item.json.name;\nconst email = $('Data Sanitization').item.json.email;\nconst firstName = name.split(' ')[0];\n\n// Get validation reason\nconst validationData = $json;\nconst reason = validationData.deliverability || 'invalid';\n\n// Simple typo detection\nlet suggestion = '';\nconst commonTypos = {\n  'gmial': 'gmail',\n  'gmai': 'gmail',\n  'yahooo': 'yahoo',\n  'yaho': 'yahoo',\n  'hotmial': 'hotmail',\n  'outlok': 'outlook',\n  'outloo': 'outlook'\n};\n\nfor (const [typo, correct] of Object.entries(commonTypos)) {\n  if (email.includes(typo)) {\n    suggestion = email.replace(typo, correct);\n    break;\n  }\n}\n\nreturn {\n  json: {\n    name: name,\n    firstName: firstName,\n    email: email,\n    suggestion: suggestion,\n    reason: reason,\n    subject: `Please verify your email address`,\n    emailBody: `\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n</head>\n<body style=\"margin: 0; padding: 0; font-family: Arial, sans-serif; background-color: #f4f4f4;\">\n  <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background-color: #f4f4f4; padding: 20px;\">\n    <tr>\n      <td align=\"center\">\n        <table width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"background-color: #ffffff; border-radius: 8px; overflow: hidden;\">\n          \n          <!-- Header -->\n          <tr>\n            <td style=\"background-color: #f56565; padding: 30px 20px; text-align: center;\">\n              <h1 style=\"color: #ffffff; margin: 0; font-size: 24px;\">\u26a0\ufe0f Email Verification Issue</h1>\n            </td>\n          </tr>\n          \n          <!-- Content -->\n          <tr>\n            <td style=\"padding: 40px 30px;\">\n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0 0 20px 0;\">\n                Hi <strong>${firstName}</strong>,\n              </p>\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0 0 20px 0;\">\n                We attempted to verify your email address but encountered an issue:\n              </p>\n              \n              <div style=\"background-color: #fff5f5; border-left: 4px solid #f56565; padding: 15px; margin: 20px 0;\">\n                <p style=\"margin: 0; color: #742a2a; font-family: monospace;\">\n                  <strong>Email entered:</strong> ${email}\n                </p>\n              </div>\n              \n              ${suggestion ? `\n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 20px 0;\">\n                Did you mean: <strong style=\"color: #48bb78;\">${suggestion}</strong>?\n              </p>\n              ` : ''}\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 20px 0;\">\n                Please double-check your email address and try again:\n              </p>\n              \n              <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                <tr>\n                  <td style=\"padding: 20px 0; text-align: center;\">\n                    <a href=\"https://yourapp.com/signup\" style=\"display: inline-block; background-color: #4299e1; color: #ffffff; text-decoration: none; padding: 14px 40px; border-radius: 5px; font-weight: bold; font-size: 16px;\">\n                      Try Again\n                    </a>\n                  </td>\n                </tr>\n              </table>\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 20px 0;\">\n                Need help? <a href=\"https://yourapp.com/support\" style=\"color: #4299e1;\">Contact our support team</a>.\n              </p>\n              \n              <p style=\"font-size: 16px; line-height: 1.6; color: #333333; margin: 0;\">\n                Best regards,<br>\n                <strong>The Team</strong>\n              </p>\n            </td>\n          </tr>\n          \n          <!-- Footer -->\n          <tr>\n            <td style=\"background-color: #f7fafc; padding: 20px 30px; text-align: center;\">\n              <p style=\"font-size: 12px; color: #718096; margin: 0;\">\n                \u00a9 2025 Your Company\n              </p>\n            </td>\n          </tr>\n          \n        </table>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n    `,\n    status: 'invalid',\n    timestamp: new Date().toISOString()\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "3fb1d01c-b57d-4f0d-b160-5ed16f4ff5e5",
      "name": "Team Notification",
      "type": "n8n-nodes-base.slack",
      "position": [
        1968,
        -96
      ],
      "parameters": {
        "text": "=\ud83c\udf89 *New Verified Signup!*\n\ud83d\udc64 *Name:* {{ $('Personalize Welcome Email').item.json.name }}\n\ud83d\udce7 *Email:* {{ $('Personalize Welcome Email').item.json.email }}\n\u23f0 *Time:* {{ $('Personalize Welcome Email').item.json.timestamp }}\n\u2705 *Status:* Verified & Welcomed",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "new-signup"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "d42409be-e1c4-41e0-8114-4d59aaccea1e",
      "name": "Log Valid Users",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1536,
        -96
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $('Personalize Welcome Email').item.json.name }}",
            "Email": "={{ $('Personalize Welcome Email').item.json.email }}",
            " Status": "={{ $('Personalize Welcome Email').item.json.status }}",
            "Verified At": "={{ $('Personalize Welcome Email').item.json.timestamp }}",
            "Original Email": "={{ $('Data Sanitization').item.json.original_email }}",
            "Validation Score": "={{ $('Personalize Welcome Email').item.json.validationScore }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": " Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": " Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Verified At",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Verified At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Original Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Original Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Validation Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Validation Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Verified Users"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "9e8d198e-2cda-4ff3-8cda-3bfc909444b5",
      "name": "Send Welcome Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1328,
        -96
      ],
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "={{ $json.emailBody }}",
        "options": {},
        "subject": "={{ $json.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "04369699-c5d2-4948-96ea-47e74919fe9a",
      "name": "Stop and Error",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        1472,
        176
      ],
      "parameters": {
        "errorMessage": "\"Invalid email address\""
      },
      "typeVersion": 1
    },
    {
      "id": "b03ea9e9-1f92-4858-b2ae-e39f4ad2fe83",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -752,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 368,
        "content": "## CUSTOMER ONBOARDING EMAIL VERIFICATION WORKFLOW\n\n**Purpose**: Validate **new signups** and send **personalized welcome emails**\n**Owner**: [Your Team]\n**Status**: \u2705 Active\n\n**Quick Stats**:\n- Average execution time: **~3-5 seconds**\n- API calls per signup: **1 (email validation)**\n- Success rate target: **>95%**\n\n**Monitor**: Check **Google Sheets** daily\n**Alerts**: **Slack #new-signups channel**"
      },
      "typeVersion": 1
    },
    {
      "id": "528bf108-604f-4242-8b99-1990ea3e682e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -448
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 576,
        "content": "## WEBHOOK TRIGGER\n\n**Configuration**:\n- Method: **POST**\n- Path: **/new-signup**\n- Authentication: **[None/Basic Auth]**\n\n**Required Fields**:\n```\n{\n  \"name\": \"string\",\n  \"email\": \"string\"\n}\n```\n\n**TIP**: Use **\"Listen for Test Event\"** \n     to debug incoming data structure\n\n**IMPORTANT**: Rate limiting not enabled\n   Consider adding if public-facing"
      },
      "typeVersion": 1
    },
    {
      "id": "b06d93a6-c7d8-4983-8393-f3df19536dda",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -480
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 608,
        "content": "## DATA SANITIZATION\n\n- **Actions**:\n\u2713 Trim whitespace\n\u2713 Lowercase email\n\u2713 Preserve original email\n\u2713 Add timestamp\n\n**Common Issues**:\n- **\"undefined\" error** \u2192 Check webhook data structure\n- Missing fields \u2192 Ensure name & email present\n\n**Output Format**:\n```\n{\n  \"name\": \"John Doe\",\n  \"email\": \"johndoe@gmail.com\",\n  \"original_email\": \"JohnDoe@Gmail.com \",\n  \"received_at\": \"2025-10-01T09:07:28.320Z\"\n}\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "99f39f7d-8b0d-49b4-81a7-cc691caba8bb",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        -416
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 576,
        "content": "## EMAIL VALIDATION (VerifiEmail)\n\n- Service: **VerifiEmail API**\n\n**Validation Checks**:\n\u2713 Format validation\n\u2713 MX records exist\n\u2713 Disposable domain detection\n\u2713 Deliverability verification\n\n**Key Response Field**:\n- valid: **true/false (boolean)**\n\nCredentials: https://verifi.email\n\n\ud83d\udca1 **Fallback**: If API fails,\n   workflow will error - consider\n   adding error handling"
      },
      "typeVersion": 1
    },
    {
      "id": "878cf3ea-e3e7-4e87-a4e3-6a209497ec1b",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -320
      ],
      "parameters": {
        "color": 7,
        "height": 448,
        "content": "## VALIDATION DECISION POINT\n\n**DECISION POINT**\n**Condition**: **$json.valid == true**\n\n\u2705 **TRUE (~85-90%)**\n\u2192 Welcome email \u2192 Sheets \u2192 Slack\n\n\u274c **FALSE (~10-15%)**\n\u2192 Error message \u2192 Stop\n\n\ud83d\udca1 Monitor weekly split ratio"
      },
      "typeVersion": 1
    },
    {
      "id": "b9b68238-69ee-4542-ab77-1503382c235d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1008,
        -432
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 480,
        "content": "## PERSONALIZE EMAIL\n\n**Template**:\n- **Subject**: \"Welcome, {firstName}! \ud83c\udf89\"\n- **HTML format (~8KB)**\n\n**Update These**:\n- Company name\n- CTA URLs (yourapp.com/*)\n- Brand colors\n- Footer copyright\n\nData: Name, Email, firstName extracted"
      },
      "typeVersion": 1
    },
    {
      "id": "9d7e44a0-3e33-4e27-9e91-508b1704f6e4",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1488,
        -448
      ],
      "parameters": {
        "color": 7,
        "height": 496,
        "content": "## LOG TO SHEETS\n\n**Operation**: Append or Update\n**Match**: Email (no duplicates)\n\nFields:\n- Name, Email, Status\n- Timestamp, Original Email\n- Validation Score\n\n**Uses**:\n\u2713 Audit trail\n\u2713 Marketing list\n\u2713 Analytics source\n\n**Review weekly for trends**"
      },
      "typeVersion": 1
    },
    {
      "id": "d249ffe4-fb29-4c93-8146-bba14304ff66",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1792,
        -384
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 432,
        "content": "## SLACK ALERT\n\n**Channel**: #new-signup\n\n**Message**:\n\ud83c\udf89 New Verified Signup!\n\ud83d\udc64 Name \n\ud83d\udce7 Email \n\u23f0 Time\n\n**Who**: Sales, Marketing, Product\n\n- If >100/day, switch to:\n  - Hourly digest\n  - Daily summary"
      },
      "typeVersion": 1
    },
    {
      "id": "0d82df0e-bcef-478e-a58c-8d0562f40fc0",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        160
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 480,
        "content": "\n\n\n\n\n\n\n\n\n\n\n## STOP & ERROR\n\n**Error**: **\"Invalid email address\"**\n\n**Result**:\n- Workflow stops\n- Marked as error\n- No email sent\n- Not logged\n\n**BETTER OPTION**:\n- Replace with Send Email node\n- Notify user\n- Log to \"Invalid Attempts\" sheet\n- Graceful UX"
      },
      "typeVersion": 1
    },
    {
      "id": "e76c5aeb-c342-4e9e-81ec-ad9d0330eeab",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -704,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 384,
        "content": "## MAINTENANCE\n\n\ud83d\udcc5 WEEKLY:\n\u25a1 Check API usage\n\u25a1 Review Slack alerts\n\u25a1 Test sample signup\n\n\ud83d\udcc5 MONTHLY:\n\u25a1 Update email template\n\u25a1 Archive old data\n\u25a1 Check Gmail limits\n\n\ud83c\udd98 QUICK FIXES:\n- No emails? \u2192 Check Gmail OAuth2\n- Invalid all? \u2192 Check VerifiEmail API\n- No Slack? \u2192 Verify connection\n- Duplicates? \u2192 Check match column"
      },
      "typeVersion": 1
    },
    {
      "id": "f177dd8d-ba9e-4b74-816e-385b34a0da5d",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 496,
        "content": "## QUICK REFERENCE\n\n\ud83d\udd17 Links:\n- Webhook: /webhook/new-signup\n- Sheet: Verified Users\n- Slack: #new-signup\n- API: verifi.email\n\n\ud83d\udcca Targets:\n- Success: >95%\n- Time: <5 sec\n- Delivery: >98%\n\n\ud83e\uddea Test:\n```\ncurl -X POST [webhook] \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Test\",\"email\":\"test@gmail.com\"}'\n```\n\ud83d\udc65 Owner: [Your Name]\n\ud83d\udce7 Support: [Email]"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f6a13975-f0ea-4d5f-9df3-77b8adbc172b",
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Data Sanitization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Valid Users": {
      "main": [
        [
          {
            "node": "Team Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email Validation": {
      "main": [
        [
          {
            "node": "Validation Decision",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Sanitization": {
      "main": [
        [
          {
            "node": "Email Validation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Welcome Email": {
      "main": [
        [
          {
            "node": "Log Valid Users",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validation Decision": {
      "main": [
        [
          {
            "node": "Personalize Welcome Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Correction Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Correction Email": {
      "main": [
        [
          {
            "node": "Stop and Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Personalize Welcome Email": {
      "main": [
        [
          {
            "node": "Send Welcome Email",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automated email verification and welcome email workflow that validates new user signups, prevents fake emails, and creates a seamless onboarding experience with real-time team notifications.

Source: https://n8n.io/workflows/9150/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Transform your visitor management process with this fully automated, enterprise-grade workflow. The Verified Visitor Pass Generator eliminates manual data entry, prevents fake registrations through em

N8N Nodes Htmlcsstoimage, Gmail, Slack +3
Email & Gmail

Automate press credential verification and badge generation for journalists covering your events

Stop And Error, Gmail, Slack +3
Email & Gmail

Automatically generate, validate, and deliver professional course completion certificates with zero manual work — from webhook request to PDF delivery in seconds.

Gmail, Google Sheets, Error Trigger +4
Email & Gmail

A comprehensive n8n workflow template for automating e-commerce return processes with fraud prevention and professional document generation. E-commerce businesses preventing fraudulent returns Custome

N8N Nodes Verifiemail, Stop And Error, N8N Nodes Htmlcsstopdf +2
Email & Gmail

Transform your referral program into a fully automated, fraud-resistant system that delivers professional rewards to verified referrers. This workflow combines email validation, dynamic coupon generat

Gmail, Google Sheets, N8N Nodes Verifiemail +1