AutomationFlowsWeb Scraping › Create Verified User Profiles with Email Validation, PDF Generation & Gmail…

Create Verified User Profiles with Email Validation, PDF Generation & Gmail…

Original n8n title: Create Verified User Profiles with Email Validation, PDF Generation & Gmail Delivery

ByJitesh Dugar @jiteshdugar on n8n.io

Overview

Webhook trigger★★★★☆ complexity20 nodesHTTP RequestGmailGoogle SheetsN8N Nodes VerifiemailN8N Nodes Htmlcsstopdf
Web Scraping Trigger: Webhook Nodes: 20 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #10163 — 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": "",
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "Verified User Profile Creation",
  "tags": [],
  "nodes": [
    {
      "id": "6b5340c0-efc3-42ed-ba9b-f87d4df66ca9",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -32
      ],
      "parameters": {
        "color": 6,
        "width": 405,
        "height": 410,
        "content": "## \ud83d\udd27 SETUP CREDENTIALS\n\n**Required Credentials:**\n\n1. **VerifiEmail API**\n   - Sign up at https://verifi.email\n   - Get your API key\n\n2. **HTMLcsstoPDF API**\n   - Register at https://htmlcsstoimg.com\n   - Get User ID & API Key\n\n3. **Gmail OAuth2**\n   - Authenticate your Google account\n\n4. **Google Sheets OAuth2**\n   - Same Google account as Gmail\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a5433c21-6cc1-4147-aaae-2c12102e95b5",
      "name": "Webhook - Receive User Data",
      "type": "n8n-nodes-base.webhook",
      "position": [
        368,
        224
      ],
      "parameters": {
        "path": "create-profile",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 1
    },
    {
      "id": "3bd46209-c0c6-4b89-acaf-752e5e16f332",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        -112
      ],
      "parameters": {
        "color": 5,
        "width": 356,
        "height": 493,
        "content": "## \ud83d\udce5 STEP 1: WEBHOOK TRIGGER\n\n**Purpose:** Receive user signup data\n\n**Expected JSON Input:**\n```json\n{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"city\": \"Gurugram\",\n  \"profession\": \"Software Engineer\",\n  \"bio\": \"Loves building software\"\n}\n```\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0033dc9f-4322-4fd2-9df9-7e78761dce5d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 248,
        "height": 381,
        "content": "## \u2705 STEP 2: EMAIL VERIFICATION\n\n**Purpose:** Validate email using VerifiEmail API\n\n**Parameters:**\n- email: User's email from webhook\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d171efbb-aeb3-48dc-ba89-34ad1308c22d",
      "name": "IF Email Valid?",
      "type": "n8n-nodes-base.if",
      "position": [
        960,
        224
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.valid }}",
              "value2": "={{ true }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c5ef3261-eeda-4934-bee0-0ecc3549ce4a",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -144
      ],
      "parameters": {
        "color": 5,
        "width": 316,
        "height": 507,
        "content": "## \u2696\ufe0f STEP 3: CONDITIONAL LOGIC\n\n**Purpose:** Branch workflow based on email validation\n\n**TRUE Path (Green):**\n\u2192 Email is valid\n\u2192 Generate HTML template\n\u2192 Create PDF\n\u2192 Send profile email\n\u2192 Log to Google Sheets\n\n**FALSE Path (Red):**\n\u2192 Email is invalid\n\u2192 Send rejection email\n\u2192 End workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "d8664417-6235-4331-b37a-ee0a216d04f2",
      "name": "Generate HTML Template",
      "type": "n8n-nodes-base.set",
      "position": [
        1328,
        64
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "html_content",
              "value": "=<html>\n   <head>\n     <style>\n       body { font-family: 'Inter', sans-serif; padding: 40px; background: #f9fafb; }\n       .container { background: white; border-radius: 20px; padding: 30px; max-width: 600px; margin: auto; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }\n       h1 { color: #2563eb; text-align: center; margin-bottom: 20px; }\n       h2 { color: #1f2937; margin-top: 20px; }\n       p { color: #4b5563; line-height: 1.6; margin: 10px 0; }\n       .label { font-weight: 600; color: #374151; }\n       .footer { color: #9ca3af; font-size: 12px; margin-top: 30px; text-align: center; border-top: 1px solid #e5e7eb; padding-top: 15px; }\n     </style>\n   </head>\n   <body>\n     <div class=\"container\">\n       <h1>\ud83d\udc64 Verified User Profile</h1>\n       <h2>{{ $('Webhook - Receive User Data').item.json.body.name }}</h2>\n       <p><span class=\"label\">Email:</span> {{ $('Webhook - Receive User Data').item.json.body.email }}</p>\n       <p><span class=\"label\">City:</span> {{ $('Webhook - Receive User Data').item.json.body.city }}</p>\n       <p><span class=\"label\">Profession:</span> {{ $('Webhook - Receive User Data').item.json.body.profession }}</p>\n       <p><span class=\"label\">Bio:</span> {{ $('Webhook - Receive User Data').item.json.body.bio }}</p>\n       <div class=\"footer\">\n         \u2705 Verified by n8n Automation<br>\n         Generated on: {{ new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }) }}\n       </div>\n     </div>\n   </body>\n   </html>"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "7633467d-1190-4223-bcd0-07f03cecafc5",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        -208
      ],
      "parameters": {
        "color": 5,
        "width": 284,
        "height": 428,
        "content": "## \ud83e\uddfe STEP 4: HTML TEMPLATE CREATION\n\n**Purpose:** Create beautiful HTML profile layout\n\n**Features:**\n- Modern, responsive design\n- Custom styling with CSS\n- Dynamic data from webhook\n- Professional appearance\n"
      },
      "typeVersion": 1
    },
    {
      "id": "225534ff-724a-4009-8886-add1b3bb63e4",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        -176
      ],
      "parameters": {
        "color": 5,
        "width": 364,
        "height": 385,
        "content": "## \ud83d\udcc4 STEP 5: PDF GENERATION\n\n**Purpose:** Convert HTML to downloadable image/PDF\n\n**Request Body:**\n- html: The generated HTML content\n- google_fonts: Inter font family\n- viewport_width: 800px\n- viewport_height: 1200px\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "defd69e1-8347-4418-914e-5808e0d0440e",
      "name": "Download PDF Binary",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2016,
        64
      ],
      "parameters": {
        "url": "={{ $json.pdf_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d4be989c-6907-4a51-84ff-60ddc8f3747a",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1904,
        -144
      ],
      "parameters": {
        "color": 5,
        "width": 332,
        "height": 333,
        "content": "## \ud83d\udcbe STEP 6: DOWNLOAD PDF\n\n**Purpose:** Fetch the generated PDF as binary data\n\n**Method:** GET request to the URL returned by HTMLcsstoPDF\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d6e3ca94-dd1f-425b-91ab-e9c060102c07",
      "name": "Send Profile Email - Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2336,
        64
      ],
      "parameters": {
        "sendTo": "={{ $('Webhook - Receive User Data').item.json.body.email }}",
        "message": "=<!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; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\">\n  \n  <!-- Main Container -->\n  <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 40px 20px;\">\n    <tr>\n      <td align=\"center\">\n        \n        <!-- Content Card -->\n        <table width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"background: #ffffff; border-radius: 16px; box-shadow: 0 20px 60px rgba(0,0,0,0.3); overflow: hidden;\">\n          \n          <!-- Header Section with Icon -->\n          <tr>\n            <td style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 40px; text-align: center;\">\n              <div style=\"background: rgba(255,255,255,0.2); width: 80px; height: 80px; border-radius: 50%; margin: 0 auto 20px; display: inline-flex; align-items: center; justify-content: center; backdrop-filter: blur(10px);\">\n                <span style=\"font-size: 48px;\">\u2705</span>\n              </div>\n              <h1 style=\"color: #ffffff; margin: 0; font-size: 32px; font-weight: 700; text-shadow: 0 2px 4px rgba(0,0,0,0.1);\">Profile Verified!</h1>\n              <p style=\"color: rgba(255,255,255,0.9); margin: 10px 0 0 0; font-size: 16px;\">Your account has been successfully verified</p>\n            </td>\n          </tr>\n          \n          <!-- Greeting Section -->\n          <tr>\n            <td style=\"padding: 40px 40px 20px 40px;\">\n              <h2 style=\"color: #1f2937; margin: 0 0 20px 0; font-size: 24px; font-weight: 600;\">\n                Hi {{ $('Webhook - Receive User Data').item.json.body.name }} \ud83d\udc4b\n              </h2>\n              <p style=\"color: #4b5563; line-height: 1.8; font-size: 16px; margin: 0 0 20px 0;\">\n                Congratulations! Your profile has been <strong style=\"color: #667eea;\">successfully verified</strong> and is now active. Your personalized profile PDF is ready and attached to this email.\n              </p>\n            </td>\n          </tr>\n          \n          <!-- Profile Details Card -->\n          <tr>\n            <td style=\"padding: 0 40px 30px 40px;\">\n              <div style=\"background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%); border-radius: 12px; padding: 30px; border-left: 4px solid #667eea;\">\n                <h3 style=\"color: #1f2937; margin: 0 0 20px 0; font-size: 18px; font-weight: 600; display: flex; align-items: center;\">\n                  <span style=\"background: #667eea; color: white; width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; margin-right: 12px; font-size: 16px;\">\ud83d\udccb</span>\n                  Your Profile Details\n                </h3>\n                \n                <!-- Profile Items -->\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                  <tr>\n                    <td style=\"padding: 12px 0; border-bottom: 1px solid #d1d5db;\">\n                      <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                        <tr>\n                          <td style=\"width: 40px; vertical-align: top;\">\n                            <span style=\"font-size: 20px;\">\ud83d\udc64</span>\n                          </td>\n                          <td>\n                            <div style=\"color: #6b7280; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px;\">Full Name</div>\n                            <div style=\"color: #1f2937; font-size: 16px; font-weight: 600;\">{{ $('Webhook - Receive User Data').item.json.body.name }}</div>\n                          </td>\n                        </tr>\n                      </table>\n                    </td>\n                  </tr>\n                  \n                  <tr>\n                    <td style=\"padding: 12px 0; border-bottom: 1px solid #d1d5db;\">\n                      <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                        <tr>\n                          <td style=\"width: 40px; vertical-align: top;\">\n                            <span style=\"font-size: 20px;\">\ud83d\udce7</span>\n                          </td>\n                          <td>\n                            <div style=\"color: #6b7280; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px;\">Email Address</div>\n                            <div style=\"color: #1f2937; font-size: 16px; font-weight: 600;\">{{ $('Webhook - Receive User Data').item.json.body.email }}</div>\n                          </td>\n                        </tr>\n                      </table>\n                    </td>\n                  </tr>\n                  \n                  <tr>\n                    <td style=\"padding: 12px 0; border-bottom: 1px solid #d1d5db;\">\n                      <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                        <tr>\n                          <td style=\"width: 40px; vertical-align: top;\">\n                            <span style=\"font-size: 20px;\">\ud83d\udccd</span>\n                          </td>\n                          <td>\n                            <div style=\"color: #6b7280; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px;\">Location</div>\n                            <div style=\"color: #1f2937; font-size: 16px; font-weight: 600;\">{{ $('Webhook - Receive User Data').item.json.body.city }}</div>\n                          </td>\n                        </tr>\n                      </table>\n                    </td>\n                  </tr>\n                  \n                  <tr>\n                    <td style=\"padding: 12px 0;\">\n                      <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                        <tr>\n                          <td style=\"width: 40px; vertical-align: top;\">\n                            <span style=\"font-size: 20px;\">\ud83d\udcbc</span>\n                          </td>\n                          <td>\n                            <div style=\"color: #6b7280; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px;\">Profession</div>\n                            <div style=\"color: #1f2937; font-size: 16px; font-weight: 600;\">{{ $('Webhook - Receive User Data').item.json.body.profession }}</div>\n                          </td>\n                        </tr>\n                      </table>\n                    </td>\n                  </tr>\n                </table>\n              </div>\n            </td>\n          </tr>\n          \n          <!-- PDF Attachment Notice -->\n          <tr>\n            <td style=\"padding: 0 40px 30px 40px;\">\n              <div style=\"background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%); border-radius: 12px; padding: 20px; border: 2px solid #10b981; text-align: center;\">\n                <span style=\"font-size: 32px; display: block; margin-bottom: 10px;\">\ud83d\udcce</span>\n                <p style=\"color: #065f46; margin: 0; font-size: 16px; font-weight: 600;\">\n                  Your Profile PDF is attached to this email\n                </p>\n                <p style=\"color: #047857; margin: 8px 0 0 0; font-size: 14px;\">\n                  Download and save it for your records\n                </p>\n              </div>\n            </td>\n          </tr>\n          \n          <!-- What's Next Section -->\n          <tr>\n            <td style=\"padding: 0 40px 40px 40px;\">\n              <h3 style=\"color: #1f2937; margin: 0 0 16px 0; font-size: 18px; font-weight: 600;\">What's Next? \ud83d\ude80</h3>\n              <ul style=\"margin: 0; padding: 0 0 0 20px; color: #4b5563; line-height: 1.8;\">\n                <li style=\"margin-bottom: 8px;\">Access your dashboard and complete your profile</li>\n                <li style=\"margin-bottom: 8px;\">Explore all available features and tools</li>\n                <li style=\"margin-bottom: 8px;\">Connect with our community</li>\n                <li>Start your journey with us today!</li>\n              </ul>\n            </td>\n          </tr>\n          \n          <!-- Footer Section -->\n          <tr>\n            <td style=\"background: #f9fafb; padding: 30px 40px; border-top: 1px solid #e5e7eb;\">\n              <p style=\"color: #1f2937; margin: 0 0 20px 0; font-size: 16px; line-height: 1.6;\">\n                Thank you for registering with us! We're excited to have you on board. \ud83c\udf89\n              </p>\n              <p style=\"color: #6b7280; margin: 0; font-size: 14px; line-height: 1.6;\">\n                If you have any questions or need assistance, feel free to reach out to our support team.\n              </p>\n              \n              <!-- Signature -->\n              <div style=\"margin-top: 24px; padding-top: 24px; border-top: 1px solid #e5e7eb;\">\n                <p style=\"color: #1f2937; margin: 0 0 4px 0; font-size: 15px; font-weight: 600;\">\n                  Best regards,\n                </p>\n                <p style=\"color: #667eea; margin: 0; font-size: 15px; font-weight: 700;\">\n                  The Verification Team\n                </p>\n              </div>\n            </td>\n          </tr>\n          \n          <!-- Social Links / Contact Info (Optional) -->\n          <tr>\n            <td style=\"background: #1f2937; padding: 20px 40px; text-align: center;\">\n              <p style=\"color: #9ca3af; margin: 0; font-size: 12px;\">\n                \u00a9 2025 Your Company Name. All rights reserved.\n              </p>\n              <p style=\"color: #6b7280; margin: 8px 0 0 0; font-size: 11px;\">\n                This is an automated message. Please do not reply to this email.\n              </p>\n            </td>\n          </tr>\n          \n        </table>\n        \n      </td>\n    </tr>\n  </table>\n  \n</body>\n</html>",
        "options": {
          "attachmentsUi": {
            "attachmentsBinary": [
              {}
            ]
          }
        },
        "subject": "Your Verified Profile PDF is Ready \u2705"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "382aabcc-1bee-4536-845c-caf8bcef2522",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2256,
        -192
      ],
      "parameters": {
        "color": 5,
        "width": 368,
        "height": 423,
        "content": "## \ud83d\udce7 STEP 7: EMAIL DELIVERY\n\n**Purpose:** Send profile PDF to verified user\n\n**Gmail Configuration:**\n- **To:** User's email from webhook\n- **Subject:** \"Your Verified Profile PDF is Ready \u2705\"\n- **Type:** HTML email\n- **Body:** Personalized message with profile summary\n- **Attachment:** PDF binary data from previous node\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e8c9e5b1-7c63-49e3-acc4-bd390a0349f9",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2736,
        64
      ],
      "parameters": {
        "columns": {
          "value": {
            "City": "={{ $('Webhook - Receive User Data').item.json.body.city }}",
            "Date": "={{ new Date().toLocaleDateString('en-US') }}",
            "Name": "={{ $('Webhook - Receive User Data').item.json.body.name }}",
            "Email": "={{ $('Webhook - Receive User Data').item.json.body.email }}",
            "Verified": "\u2705",
            "Profession": "={{ $('Webhook - Receive User Data').item.json.body.profession }}"
          },
          "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": "City",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "City",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Profession",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Profession",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Verified",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Verified",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "Verified_Users_Profiles"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "a21a9553-ff14-4184-a9ea-01a213d9df07",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2640,
        -224
      ],
      "parameters": {
        "color": 5,
        "width": 380,
        "height": 448,
        "content": "## \ud83d\udcca STEP 8: DATA LOGGING\n\n**Purpose:** Track all verified users in Google Sheets\n\n**Spreadsheet Columns:**\n1. **Name** - User's full name\n2. **Email** - Verified email address\n3. **City** - User's location\n4. **Profession** - Job title/role\n5. **Verified** - \u2705 checkmark\n6. **PDF_URL** - Link to generated PDF\n7. **Date** - Verification timestamp\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7795da16-16bd-485f-a44f-6880253dcfde",
      "name": "Send Rejection Email - Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1648,
        352
      ],
      "parameters": {
        "sendTo": "={{ $('Webhook - Receive User Data').item.json.body.email }}",
        "message": "=<h3>Hi {{ $('Webhook - Receive User Data').item.json.body.name }},</h3>\n<p>We couldn't verify your email address: <strong>{{ $('Webhook - Receive User Data').item.json.body.email }}</strong></p>\n<p>This could be due to:</p>\n<ul>\n  <li>Invalid email format</li>\n  <li>Non-existent email domain</li>\n  <li>Temporary email service</li>\n  <li>Disposable email address</li>\n</ul>\n<p><strong>What to do next:</strong></p>\n<p>Please check your email address and try registering again with a valid email.</p>\n<p>If you believe this is an error, please contact our support team.</p>\n<p style=\"color: #666; margin-top: 20px;\">\u2013 The Verification Team</p>",
        "options": {},
        "subject": "Profile Verification Failed \u274c"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6349b52f-f398-49be-9847-6280a023639a",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1536,
        336
      ],
      "parameters": {
        "color": 5,
        "width": 372,
        "height": 560,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n## \ud83d\udeab STEP 9: INVALID EMAIL HANDLING\n\n**Purpose:** Notify users when email verification fails\n\n**Email Details:**\n- **Subject:** \"Profile Verification Failed \u274c\"\n- **Message:** Explains why verification failed\n- **Guidance:** Steps to resolve the issue\n\n**Common Failure Reasons:**\n- Invalid format\n- Non-existent domain\n- Temporary/disposable email\n- Typo in email address\n"
      },
      "typeVersion": 1
    },
    {
      "id": "26712fee-42f0-4c18-b345-aeed77bfc290",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3040,
        -112
      ],
      "parameters": {
        "color": 4,
        "width": 368,
        "height": 336,
        "content": "## \u2705 WORKFLOW COMPLETE!\n\n**Success Path Summary:**\n\u2705 Webhook receives user data\n\u2705 Email verified via API\n\u2705 HTML profile generated\n\u2705 PDF created and downloaded\n\u2705 Profile emailed to user\n\u2705 Data logged to Google Sheets\n\n**Failure Path Summary:**\n\u274c Email verification fails\n\u274c Rejection email sent\n\u274c No PDF generated\n\u274c No data logged\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b91d5210-1e6b-4ee4-9217-5ac7c9760fba",
      "name": "Verifi Email",
      "type": "n8n-nodes-verifiemail.verifiEmail",
      "position": [
        656,
        224
      ],
      "parameters": {
        "email": "={{ $json.body.email }}"
      },
      "credentials": {
        "verifiEmailApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1b44d9a8-e00d-4400-a00b-8c45b3dabea4",
      "name": "HTML to PDF",
      "type": "n8n-nodes-htmlcsstopdf.htmlcsstopdf",
      "position": [
        1600,
        64
      ],
      "parameters": {
        "html_content": "={{ $json.html_content }}"
      },
      "credentials": {
        "htmlcsstopdfApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "HTML to PDF": {
      "main": [
        [
          {
            "node": "Download PDF Binary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verifi Email": {
      "main": [
        [
          {
            "node": "IF Email Valid?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Email Valid?": {
      "main": [
        [
          {
            "node": "Generate HTML Template",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Rejection Email - Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download PDF Binary": {
      "main": [
        [
          {
            "node": "Send Profile Email - Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate HTML Template": {
      "main": [
        [
          {
            "node": "HTML to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Profile Email - Gmail": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook - Receive User Data": {
      "main": [
        [
          {
            "node": "Verifi 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

Overview

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

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

Verified Corporate Training Certificate with CEUs – Fully Automated & Verifiable

Google Drive, Slack, Google Sheets +4
Web Scraping

Hackathon Participant Badge Generator with QR Code & Email Delivery

HTTP Request, Gmail, N8N Nodes Verifiemail +2
Web Scraping

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

Google Drive, Gmail, N8N Nodes Verifiemail +2
Web Scraping

Transform your event registration process with this comprehensive automation that eliminates manual certificate creation and ensures only verified attendees receive credentials.

HTTP Request, Gmail, Google Sheets +4
Web Scraping

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.

Google Drive, Gmail, N8N Nodes Verifiemail +2