{
  "workflow": {
    "id": 10138,
    "name": "Newsletter signup flow with Email Verification API, Gmail & Google Sheets tracking",
    "views": 242,
    "recentViews": 0,
    "totalViews": 242,
    "createdAt": "2025-10-24T22:25:26.975Z",
    "description": "# Newsletter Sign-up with Email Verification & Welcome Email Automation\n\n## 📋 Description\n\nA complete, production-ready newsletter automation workflow that validates email addresses, sends personalized welcome emails, and maintains comprehensive logs in Google Sheets. Perfect for marketing teams, content creators, and businesses looking to build high-quality email lists with minimal manual effort.\n\n## ✨ Key Features\n\n### Email Verification\n- **Real-time validation** using Verifi Email API\n- Checks email format (RFC compliance)\n- Verifies domain existence and MX records\n- Detects disposable/temporary email addresses\n- Identifies potential spoofed emails\n\n### Automated Welcome Emails\n- **Personalized HTML emails** with subscriber's first name\n- Beautiful, mobile-responsive design with gradient headers\n- Branded confirmation and unsubscribe links\n- Sent via Gmail (or SMTP) automatically to valid subscribers\n\n### Smart Data Handling\n- **Comprehensive logging** to Google Sheets with three separate tabs\n- Handles incomplete submissions gracefully\n- Preserves original user data throughout verification process\n- Tracks source attribution for multi-channel campaigns\n\n### Error Management\n- Automatic retry logic on API failures\n- Separate logging for different error types\n- Detailed technical reasons for invalid emails\n- No data loss with direct webhook referencing\n\n## 🎯 Use Cases\n\n- **Newsletter sign-ups** on websites and landing pages\n- **Lead generation** forms with quality control\n- **Marketing campaigns** requiring verified email lists\n- **Community building** with automated onboarding\n- **SaaS product launches** with email collection\n- **Content creator** audience building\n- **E-commerce** customer list management\n\n## 📊 What Gets Logged\n\n### Master Log (All Subscribers)\n- Timestamp, name, email, verification result\n- Verification score and email sent status\n- Source tracking, disposable status, domain info\n\n### Invalid Emails Log\n- Detailed rejection reasons\n- Technical diagnostic information\n- MX record status, RFC compliance\n- Provider information for troubleshooting\n\n### Invalid Submissions Log\n- Incomplete form data\n- Missing required fields\n- Timestamp for follow-up\n\n## 🔧 Technical Stack\n\n**Trigger:** Webhook (POST endpoint)  \n**Email Verification:** Verifi Email API  \n**Email Sending:** Gmail OAuth2 (or SMTP)  \n**Data Storage:** Google Sheets (3 tabs)  \n**Processing:** JavaScript code nodes for data formatting\n\n## 🚀 Setup Requirements\n\n1. **Google Account** - For Sheets and Gmail integration\n2. **Verifi Email API Key** - (https://verifi.email)\n3. **Google Sheets** - Pre-configured with 3 tabs (template provided)\n4. **5-10 minutes** - Quick setup with step-by-step instructions included\n\n## 📈 Benefits\n\n✅ **Improve Email Deliverability** - Remove invalid emails before sending campaigns  \n✅ **Reduce Bounce Rates** - Only send to verified, active email addresses  \n✅ **Save Money** - Don't waste email credits on invalid addresses  \n✅ **Better Analytics** - Track conversion rates by source  \n✅ **Professional Onboarding** - Personalized welcome experience  \n✅ **Scalable Solution** - Handles high-volume sign-ups automatically  \n✅ **Data Quality** - Build a clean, high-quality subscriber list  \n\n## 🎨 Customization Options\n\n- **Email Template** - Fully customizable HTML design\n- **Verification Threshold** - Adjust score requirements\n- **Brand Colors** - Match your company branding\n- **Confirmation Flow** - Add double opt-in if desired\n- **Multiple Sources** - Track different signup forms\n- **Language** - Easily translate email content\n\n## 📦 What's Included\n\n- ✅ Complete n8n workflow JSON (ready to import)\n- ✅ Google Sheets template structure\n- ✅ Responsive HTML email template\n- ✅ Setup documentation with screenshots\n- ✅ Troubleshooting guide\n- ✅ Customization examples\n\n## 🔒 Privacy & Compliance\n\n- GDPR-compliant with unsubscribe links\n- Secure data handling via OAuth2\n- No data shared with third parties\n- Audit trail in Google Sheets\n- Easy data deletion/export\n\n## 💡 Quick Stats\n\n- **12 Nodes** - Fully automated workflow\n- **3 Data Paths** - Valid, invalid, and incomplete submissions\n- **100% Uptime** - When properly configured\n- **Instant Processing** - Real-time email verification\n- **Unlimited Scale** - Based on your API limits\n\n## 🏆 Perfect For\n\n- Marketing Agencies\n- SaaS Companies\n- Content Creators\n- E-commerce Stores\n- Community Platforms\n- Educational Institutions\n- Membership Sites\n- Newsletter Publishers\n\n## 🌟 Why Use This Workflow?\n\nInstead of manually verifying emails or dealing with bounce complaints, this workflow automates the entire process from sign-up to welcome email. Save hours of manual work, improve your email deliverability, and create a professional first impression with every new subscriber.\n\n**Start building a high-quality email list today!**\n\n---\n",
    "workflow": {
      "id": "",
      "meta": {
        "instanceId": "",
        "templateCredsSetupCompleted": false
      },
      "name": "Newsletter Verification & Welcome Email Workflow",
      "tags": [],
      "nodes": [
        {
          "id": "a949eca7-950b-4d16-9015-50844e411833",
          "name": "Webhook - Newsletter Signup",
          "type": "n8n-nodes-base.webhook",
          "position": [
            -944,
            336
          ],
          "webhookId": "",
          "parameters": {
            "path": "newsletter-signup",
            "options": {},
            "httpMethod": "POST",
            "responseMode": "lastNode"
          },
          "typeVersion": 1
        },
        {
          "id": "f05fbb8b-b55a-4386-99a3-e603b344a445",
          "name": "Sticky Note - Webhook Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1040,
            96
          ],
          "parameters": {
            "width": 320,
            "height": 392,
            "content": "## 🎯 WORKFLOW START\n\n**Expected Payload**:\n```json\n{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"source\": \"website_footer\"\n}\n```"
          },
          "typeVersion": 1
        },
        {
          "id": "1a7ac1eb-2a43-4ace-86e7-1c88c1e97ac5",
          "name": "Check Data Completeness",
          "type": "n8n-nodes-base.if",
          "position": [
            -608,
            336
          ],
          "parameters": {
            "conditions": {
              "number": [],
              "string": [
                {
                  "value1": "={{ $json.body.email }}",
                  "operation": "isNotEmpty"
                },
                {
                  "value1": "={{ $json.body.name }}",
                  "operation": "isNotEmpty"
                }
              ],
              "boolean": []
            }
          },
          "typeVersion": 1
        },
        {
          "id": "be02be23-fbf5-4d2c-a5f5-52d0c88511b3",
          "name": "Sticky Note - Data Validation",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -688,
            96
          ],
          "parameters": {
            "color": 4,
            "width": 300,
            "height": 384,
            "content": "## ✅ DATA VALIDATION\n\n**Purpose**: Ensure required fields exist\n\n**Checks**:\n- Email is not empty\n- Name is not empty\n\n**TRUE**: Continue to email verification\n**FALSE**: Log incomplete submission"
          },
          "typeVersion": 1
        },
        {
          "id": "97593e4d-ee1b-452e-8e15-e6aad3ff8c90",
          "name": "Log Incomplete Submissions",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            -416,
            544
          ],
          "parameters": {
            "columns": {
              "value": {
                "name": "={{ $json.body.name || 'N/A' }}",
                "email": "={{ $json.body.email || 'N/A' }}",
                "reason": "Incomplete data",
                "timestamp": "={{ $now.toISO() }}"
              },
              "schema": [
                {
                  "id": "timestamp",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "timestamp",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "name",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "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": "reason",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "reason",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "defineBelow",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_GOOGLE_SHEETS_SHEET_ID",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid/YOUR_GOOGLE_SHEETS_SHEET_ID",
              "cachedResultName": "Invalid_Submissions"
            },
            "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": "Newsletter_Tracking"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4
        },
        {
          "id": "5804f33e-ef20-4aa9-89ad-0f12f207f08e",
          "name": "Sticky Note - Log Invalid",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -464,
            528
          ],
          "parameters": {
            "color": 7,
            "width": 280,
            "height": 396,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n## 📝 LOG INVALID DATA\n\n**Sheet**: Invalid_Submissions\n**Data Logged**:\n- Timestamp\n- Name (or N/A)\n- Email (or N/A)\n- Reason: \"Incomplete data\""
          },
          "typeVersion": 1
        },
        {
          "id": "6404d655-cebb-4bbb-8f4b-cc875b431c3a",
          "name": "Sticky Note - Email Verification",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -368,
            -96
          ],
          "parameters": {
            "color": 2,
            "width": 300,
            "height": 468,
            "content": "## 🔍 EMAIL VERIFICATION\n\n**What it checks**:\n- Email format validity\n- Domain existence\n- MX records\n- Disposable email detection\n- Deliverability score\n\n**Output**: \n- valid: true/false\n- domain info"
          },
          "typeVersion": 1
        },
        {
          "id": "e6ced67a-7615-4cf6-8cbf-d6a299116046",
          "name": "Check Email Validity",
          "type": "n8n-nodes-base.if",
          "position": [
            16,
            224
          ],
          "parameters": {
            "conditions": {
              "boolean": [
                {
                  "value1": "={{ $json.valid }}",
                  "value2": "={{ true }}"
                }
              ]
            }
          },
          "typeVersion": 1
        },
        {
          "id": "0c120ee2-e65e-4971-86dc-3dc8955eb188",
          "name": "Sticky Note - Conditional Logic",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -48,
            -32
          ],
          "parameters": {
            "color": 3,
            "width": 280,
            "height": 396,
            "content": "## ⚡CONDITIONAL ROUTING\n\n**Decision Point**: Is email valid?\n\n**Conditions**:\n- valid = true\n\n**TRUE**: Send welcome email\n**FALSE**: Handle invalid email"
          },
          "typeVersion": 1
        },
        {
          "id": "6f87b084-7f15-496c-b992-8685d1fde0bb",
          "name": "Generate Welcome Email HTML",
          "type": "n8n-nodes-base.code",
          "position": [
            368,
            80
          ],
          "parameters": {
            "jsCode": "// Generate Welcome Email HTML - Direct Webhook Reference\n// This gets data directly from the webhook node, bypassing any data loss issues\n\nconst items = $input.all();\nconst outputItems = [];\n\nfor (const item of items) {\n  // Get data DIRECTLY from the webhook node (first node in workflow)\n  const webhookData = $('Webhook - Newsletter Signup').first().json.body;\n  \n  // Extract user details\n  const name = webhookData.name;\n  const email = webhookData.email;\n  const source = webhookData.source || 'website';\n  \n  // Get first name for personalization\n  const firstName = name.split(' ')[0];\n  \n  // Build the HTML email\n  const htmlContent = `\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  <style>\n    body { \n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n      line-height: 1.6; \n      color: #333; \n      margin: 0; \n      padding: 0;\n      background-color: #f4f4f4;\n    }\n    .container { \n      max-width: 600px; \n      margin: 20px auto; \n      background: #ffffff;\n      border-radius: 12px;\n      overflow: hidden;\n      box-shadow: 0 4px 6px rgba(0,0,0,0.1);\n    }\n    .header { \n      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); \n      color: white; \n      padding: 40px 30px;\n      text-align: center;\n    }\n    .header h1 {\n      margin: 0;\n      font-size: 28px;\n      font-weight: 600;\n    }\n    .content { \n      padding: 40px 30px;\n      background: #ffffff;\n    }\n    .content h2 {\n      color: #333;\n      font-size: 24px;\n      margin-top: 0;\n      margin-bottom: 20px;\n    }\n    .content p {\n      margin: 15px 0;\n      color: #555;\n    }\n    ul { \n      padding-left: 0;\n      list-style: none;\n    }\n    li { \n      margin: 12px 0;\n      padding-left: 30px;\n      position: relative;\n      color: #555;\n    }\n    li:before {\n      content: \"✓\";\n      position: absolute;\n      left: 0;\n      color: #667eea;\n      font-weight: bold;\n      font-size: 18px;\n    }\n    .button-container {\n      text-align: center;\n      margin: 30px 0;\n    }\n    .button { \n      display: inline-block; \n      padding: 14px 35px; \n      background: #667eea; \n      color: white !important; \n      text-decoration: none; \n      border-radius: 6px;\n      font-weight: 600;\n      font-size: 16px;\n      transition: background 0.3s ease;\n    }\n    .button:hover {\n      background: #5568d3;\n    }\n    .divider {\n      height: 1px;\n      background: #e0e0e0;\n      margin: 30px 0;\n    }\n    .footer { \n      text-align: center; \n      padding: 30px; \n      color: #999; \n      font-size: 13px;\n      background: #f9f9f9;\n      border-top: 1px solid #e0e0e0;\n    }\n    .footer a {\n      color: #667eea;\n      text-decoration: none;\n    }\n    .footer a:hover {\n      text-decoration: underline;\n    }\n    @media only screen and (max-width: 600px) {\n      .container {\n        margin: 10px;\n        border-radius: 8px;\n      }\n      .header {\n        padding: 30px 20px;\n      }\n      .header h1 {\n        font-size: 24px;\n      }\n      .content {\n        padding: 30px 20px;\n      }\n      .content h2 {\n        font-size: 20px;\n      }\n    }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">\n      <h1>🎉 Welcome to Our Newsletter!</h1>\n    </div>\n    \n    <div class=\"content\">\n      <h2>Hi ${firstName}! 👋</h2>\n      \n      <p>Thank you for joining our newsletter community! We're absolutely thrilled to have you on board.</p>\n      \n      <p><strong>Here's what you can expect from us:</strong></p>\n      <ul>\n        <li><strong>Weekly Insights:</strong> Valuable tips and industry updates delivered to your inbox</li>\n        <li><strong>Exclusive Offers:</strong> Early access to special deals and promotions</li>\n        <li><strong>Free Resources:</strong> Helpful guides, templates, and tools</li>\n        <li><strong>Community Access:</strong> Connect with like-minded individuals</li>\n      </ul>\n      \n      <div class=\"button-container\">\n        <a href=\"https://yourwebsite.com/confirm?email=${encodeURIComponent(email)}&source=${encodeURIComponent(source)}\" class=\"button\">\n          Confirm Your Subscription\n        </a>\n      </div>\n      \n      <div class=\"divider\"></div>\n      \n      <p>Have questions or feedback? Simply hit reply to this email – we read and respond to every message!</p>\n      \n      <p style=\"margin-top: 30px;\">\n        Best regards,<br>\n        <strong>The Team</strong>\n      </p>\n    </div>\n    \n    <div class=\"footer\">\n      <p>You're receiving this because you subscribed at <strong>yourwebsite.com</strong></p>\n      <p>\n        <a href=\"https://yourwebsite.com/preferences?email=${encodeURIComponent(email)}\">Update Preferences</a> | \n        <a href=\"https://yourwebsite.com/unsubscribe?email=${encodeURIComponent(email)}\">Unsubscribe</a>\n      </p>\n      <p style=\"margin-top: 20px; color: #bbb; font-size: 11px;\">\n        © ${new Date().getFullYear()} Your Company Name. All rights reserved.\n      </p>\n    </div>\n  </div>\n</body>\n</html>\n  `;\n  \n  // Return formatted output\n  outputItems.push({\n    json: {\n      // Original webhook data\n      name: name,\n      email: email,\n      source: source,\n      \n      // Email content\n      htmlEmail: htmlContent,\n      subject: `🎉 Welcome to Our Newsletter, ${firstName}!`,\n      \n      // Additional metadata\n      firstName: firstName,\n      generatedAt: new Date().toISOString()\n    }\n  });\n}\n\nreturn outputItems;"
          },
          "typeVersion": 2
        },
        {
          "id": "744d258d-a4ee-495e-96e1-661f13641b2f",
          "name": "Sticky Note - HTML Generation",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            272,
            -192
          ],
          "parameters": {
            "color": 5,
            "width": 300,
            "height": 432,
            "content": "## 📧 EMAIL GENERATION\n\n**Purpose**: Create personalized HTML email\n\n**Features**:\n- Dynamic first name insertion\n- Branded styling\n- Confirmation link\n- Unsubscribe link\n- Mobile responsive\n"
          },
          "typeVersion": 1
        },
        {
          "id": "dec5e4b1-6105-447f-996a-4c9f5504987b",
          "name": "Send Welcome Email",
          "type": "n8n-nodes-base.gmail",
          "position": [
            704,
            80
          ],
          "webhookId": "",
          "parameters": {
            "sendTo": "={{ $json.email }}",
            "message": "={{ $json.htmlEmail }}",
            "options": {
              "senderName": "Your Brand Team"
            },
            "subject": "={{ $json.subject }}"
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "credential-id",
              "name": "gmailOAuth2 Credential"
            }
          },
          "typeVersion": 2.1
        },
        {
          "id": "524fa2bb-2948-4099-9d2f-9f54f8ae34e3",
          "name": "Sticky Note - Send Email",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            608,
            -112
          ],
          "parameters": {
            "color": 6,
            "width": 280,
            "height": 348,
            "content": "## ✉️ SEND EMAIL\n\n**Configuration**:\n- To: Subscriber email\n- Subject: Personalized\n- Type: HTML\n- From: Your Brand Team"
          },
          "typeVersion": 1
        },
        {
          "id": "2be68c46-ea97-4c34-bd80-4731e09f0733",
          "name": "Prepare Invalid Email Message",
          "type": "n8n-nodes-base.code",
          "position": [
            368,
            464
          ],
          "parameters": {
            "jsCode": "// Prepare Invalid Email Data - Code Node\n// This handles the Verifi Email API response format\n\nconst items = $input.all();\n\nreturn items.map(item => {\n  // Extract the first item from the array (Verifi returns an array)\n  const emailData = Array.isArray(item.json) ? item.json[0] : item.json;\n  \n  // Determine the specific reason for invalidity\n  let invalidReason = '';\n  let technicalReason = '';\n  \n  if (!emailData.details.validMxRecord) {\n    invalidReason = 'Invalid or non-existent email domain';\n    technicalReason = 'No valid MX records found for the domain';\n  } else if (!emailData.details.rfcCompliant) {\n    invalidReason = 'Email format is not compliant with standards';\n    technicalReason = 'RFC non-compliant email format';\n  } else if (emailData.details.disposable) {\n    invalidReason = 'Disposable/temporary email address detected';\n    technicalReason = 'Disposable email service';\n  } else if (!emailData.details.spoofFree) {\n    invalidReason = 'Potential spoofed or suspicious email';\n    technicalReason = 'Email may be spoofed';\n  } else {\n    invalidReason = 'Email verification failed';\n    technicalReason = 'Unknown verification issue';\n  }\n  \n  // Get original subscriber data (name, email, source)\n  // This assumes the original data is still in the item\n  const originalData = item.json.name ? item.json : \n                       (item.json[0] && item.json[0].name ? item.json[0] : {});\n  \n  return {\n    json: {\n      // Original subscriber information\n      name: originalData.name || 'Subscriber',\n      email: emailData.email,\n      source: originalData.source || 'Unknown',\n      \n      // Verification results\n      valid: false,\n      validMxRecord: emailData.details.validMxRecord,\n      rfcCompliant: emailData.details.rfcCompliant,\n      disposable: emailData.details.disposable,\n      spoofFree: emailData.details.spoofFree,\n      \n      // Domain information\n      domain: emailData.email.split('@')[1] || 'N/A',\n      mxProvider: emailData.details.mx.provider || 'N/A',\n      mxRecords: emailData.details.mx.records.join(', ') || 'None',\n      \n      // Reason messages\n      invalidReason: invalidReason,\n      technicalReason: technicalReason,\n      // Timestamp\n      timestamp: new Date().toISOString()\n    }\n  };\n});"
          },
          "typeVersion": 2
        },
        {
          "id": "1d73e003-a440-45a2-98a4-702d13c01cee",
          "name": "Sticky Note - Invalid Handler",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            288,
            448
          ],
          "parameters": {
            "color": 2,
            "width": 252,
            "height": 416,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n## ⚠️ INVALID EMAIL HANDLER\n\n**Actions**:\nLog to invalid emails sheet\n\n**Reason could be**:\n- Typo in email\n- Non-existent domain\n- Disposable email"
          },
          "typeVersion": 1
        },
        {
          "id": "f46e0115-189d-4610-9b6b-87341d2da9cc",
          "name": "Log Invalid Emails",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            720,
            464
          ],
          "parameters": {
            "columns": {
              "value": {
                "name": "={{ $json.name }}",
                "email": "={{ $json.email }}",
                "domain": "={{ $json.domain }}",
                "reason": "={{ $json.invalidReason }}",
                "timestamp": "={{ $json.timestamp }}",
                "technical_reason": "={{ $json.technicalReason }}"
              },
              "schema": [
                {
                  "id": "timestamp",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "timestamp",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "name",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "name",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "email",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "email",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "reason",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "reason",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "technical_reason",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "technical_reason",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "domain",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "domain",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "defineBelow",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_GOOGLE_SHEETS_SHEET_ID",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid/YOUR_GOOGLE_SHEETS_SHEET_ID",
              "cachedResultName": "Invalid_Emails"
            },
            "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": "Newsletter_Tracking"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4
        },
        {
          "id": "498591a2-335e-4f0b-b483-6fccec485c24",
          "name": "Sticky Note - Log Invalid Emails",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            608,
            432
          ],
          "parameters": {
            "color": 3,
            "width": 312,
            "height": 444,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n## 📊 LOG INVALID EMAILS\n\n**Sheet**: Invalid_Emails\n\n**Data Logged**:\n- Timestamp\n- Name\n- Email\n- Reason\n- Technical Reason\n- Verification score\n- Domain info"
          },
          "typeVersion": 1
        },
        {
          "id": "895f6d8e-9384-4282-a0dd-ad75426f5ea5",
          "name": "Format Master Log Entry",
          "type": "n8n-nodes-base.code",
          "position": [
            1088,
            464
          ],
          "parameters": {
            "jsCode": "return $input.all().map(item => {\n  // Check if this is from the valid path or invalid path\n  const isValid = item.json.valid === true;\n  \n  return {\n    json: {\n      timestamp: item.json.timestamp || new Date().toISOString(),\n      name: item.json.name,\n      email: item.json.email,\n      verification_result: isValid ? 'Valid' : 'Invalid',\n      verification_score: 'N/A', // Verifi API doesn't provide score\n      email_sent: isValid ? 'Yes' : 'No',\n      source: item.json.source || 'Unknown',\n      disposable: item.json.disposable || false,\n      domain: item.json.domain || 'N/A',\n      valid_mx_record: item.json.validMxRecord !== undefined ? item.json.validMxRecord : 'N/A',\n      rfc_compliant: item.json.rfcCompliant !== undefined ? item.json.rfcCompliant : 'N/A',\n      invalid_reason: item.json.invalidReason || 'N/A'\n    }\n  };\n});"
          },
          "typeVersion": 2
        },
        {
          "id": "e1879abf-698d-44c9-ba00-5de202926f72",
          "name": "Sticky Note - Format",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1008,
            448
          ],
          "parameters": {
            "color": 4,
            "width": 260,
            "height": 424,
            "content": "\n\n\n\n\n\n\n\n\n\n## 🔄 FORMAT DATA\n\n**Purpose**: Prepare data for master log\n\n**Standardizes**:\n- Timestamp format\n- Email Verifications\n- name\n- Source tracking\n\n**Clean output** for analytics"
          },
          "typeVersion": 1
        },
        {
          "id": "cbf72a80-50ae-4fd4-9149-5cc3599bceb6",
          "name": "Log to Master Sheet",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            1424,
            464
          ],
          "parameters": {
            "columns": {
              "value": {
                "name": "={{ $json.name }}",
                "email": "={{ $json.email }}",
                "domain": "={{ $json.domain }}",
                "source": "={{ $json.source }}",
                "timestamp": "={{ $json.timestamp }}",
                "disposable": "={{ $json.disposable }}",
                "email_sent": "={{ $json.email_sent }}",
                "verification_score": "={{ $json.verification_score }}",
                "verification_result": "={{ $json.verification_result }}"
              },
              "schema": [
                {
                  "id": "timestamp",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "timestamp",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "name",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "name",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "email",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "email",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "verification_result",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "verification_result",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "verification_score",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "verification_score",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "email_sent",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "email_sent",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "source",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "source",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "disposable",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "disposable",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "domain",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "domain",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "defineBelow",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_GOOGLE_SHEETS_SHEET_ID",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid/YOUR_GOOGLE_SHEETS_SHEET_ID",
              "cachedResultName": "Master_Log"
            },
            "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": "Newsletter_Tracking"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4
        },
        {
          "id": "9a2aff71-9890-4acb-9339-a4ed98728239",
          "name": "Sticky Note - Master Log",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1328,
            448
          ],
          "parameters": {
            "color": 5,
            "width": 312,
            "height": 444,
            "content": "\n\n\n\n\n\n\n\n\n\n\n\n## 📈 MASTER LOG\n\n**Sheet**: Master_Log\n\n**All Data**:\n- Complete audit trail\n- Valid & invalid entries\n- Verification scores\n- Email send status\n- Source tracking\n\n**Use for**: Analytics & reporting"
          },
          "typeVersion": 1
        },
        {
          "id": "492eb16c-3ac4-4b07-8309-44e6e4b317c7",
          "name": "Sticky Note - CREDENTIALS SETUP",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1440,
            16
          ],
          "parameters": {
            "color": 4,
            "width": 380,
            "height": 472,
            "content": "## 🔐 CREDENTIALS SETUP REQUIRED\n\n**You need to configure these credentials:**\n\n1. **Google Sheets OAuth2**\n   - Type: Google Sheets OAuth2 API\n\n2. **Gmail OAuth2**\n   - Type: Gmail OAuth2 API\n\n3. **Verifi Email API**\n   - Type: Verifi Email API\n   - Get key from: https://verifi.email\n\n4. **Update Sheet IDs**\n   - Replace YOUR_SHEET_ID in all Google Sheets nodes\n   - Create sheets: Invalid_Submissions, Invalid_Emails, Master_Log\n"
          },
          "typeVersion": 1
        },
        {
          "id": "a39a0a10-82f7-4f37-bbb0-bee8855cc3ee",
          "name": "Sticky Note - Workflow Summary",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1408,
            -384
          ],
          "parameters": {
            "color": 5,
            "width": 340,
            "height": 376,
            "content": "## 📋 WORKFLOW SUMMARY\n\n**Flow Path**:\n1. Webhook receives signup ➜\n2. Validate data completeness ➜\n3. Verify email with Verifi ➜\n4. Route based on validity ➜\n5. Send welcome (valid) OR log error (invalid) ➜\n6. Merge & log everything to master sheet\n\n**Error Handling**:\n- Retry enabled on API nodes\n- Invalid data logged separately\n- All results tracked in master log\n"
          },
          "typeVersion": 1
        },
        {
          "id": "35ae866d-4f51-4751-8703-6a018c72fb2b",
          "name": "Verifi Email",
          "type": "n8n-nodes-verifiemail.verifiEmail",
          "position": [
            -288,
            224
          ],
          "parameters": {
            "email": "={{ $json.body.email }}"
          },
          "credentials": {
            "verifiEmailApi": {
              "id": "credential-id",
              "name": "verifiEmailApi Credential"
            }
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "",
      "connections": {
        "Verifi Email": {
          "main": [
            [
              {
                "node": "Check Email Validity",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Log Invalid Emails": {
          "main": [
            [
              {
                "node": "Format Master Log Entry",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Send Welcome Email": {
          "main": [
            []
          ]
        },
        "Check Email Validity": {
          "main": [
            [
              {
                "node": "Generate Welcome Email HTML",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Prepare Invalid Email Message",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Check Data Completeness": {
          "main": [
            [
              {
                "node": "Verifi Email",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Log Incomplete Submissions",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Format Master Log Entry": {
          "main": [
            [
              {
                "node": "Log to Master Sheet",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Welcome Email HTML": {
          "main": [
            [
              {
                "node": "Send Welcome Email",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Webhook - Newsletter Signup": {
          "main": [
            [
              {
                "node": "Check Data Completeness",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Prepare Invalid Email Message": {
          "main": [
            [
              {
                "node": "Log Invalid Emails",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 24,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 2
        },
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.gmail": {
          "count": 1
        },
        "n8n-nodes-base.webhook": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 13
        },
        "n8n-nodes-base.googleSheets": {
          "count": 3
        },
        "n8n-nodes-verifiemail.verifiEmail": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Jitesh Dugar",
      "username": "jiteshdugar",
      "bio": "AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/jiteshdugar"
      ],
      "avatar": "https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 18,
        "icon": "file:googleSheets.svg",
        "name": "n8n-nodes-base.googleSheets",
        "codex": {
          "data": {
            "alias": [
              "CSV",
              "Sheet",
              "Spreadsheet",
              "GS"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/",
                  "icon": "❤️",
                  "label": "Love at first sight: Ricardo’s n8n journey"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/",
                  "icon": "⏲",
                  "label": "Creating triggers for n8n workflows using polling"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/",
                  "icon": "📈",
                  "label": "Migrating Community Metrics to Orbit using n8n"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/",
                  "icon": "🍔",
                  "label": "How Honest Burgers Use Automation to Save $100k per year"
                },
                {
                  "url": "https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/",
                  "icon": "💻",
                  "label": "How a digital strategist uses n8n for online marketing"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Data & Storage",
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\",\"output\"]",
        "defaults": {
          "name": "Google Sheets"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="
        },
        "displayName": "Google Sheets",
        "typeVersion": 5,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          },
          {
            "id": 4,
            "name": "Productivity"
          }
        ]
      },
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 47,
        "icon": "file:webhook.svg",
        "name": "n8n-nodes-base.webhook",
        "codex": {
          "data": {
            "alias": [
              "HTTP",
              "API",
              "Build",
              "WH"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
                  "icon": "✍️",
                  "label": "Learn how to automatically cross-post your content with n8n"
                },
                {
                  "url": "https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/",
                  "icon": "🛳",
                  "label": "Running n8n on ships: An interview with Maranics"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/",
                  "icon": " 🪢",
                  "label": "What are APIs and how to use them with no code"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/",
                  "icon": "💻",
                  "label": "How a digital strategist uses n8n for online marketing"
                },
                {
                  "url": "https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/",
                  "icon": "📹",
                  "label": "The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/",
                  "label": "How to automate every step of an incident response workflow"
                },
                {
                  "url": "https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/",
                  "icon": "🧰",
                  "label": "Learn to Build Powerful API Endpoints Using Webhooks"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/",
                  "icon": "🦄",
                  "label": "Learn how to use webhooks with Mattermost slash commands"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "Webhook"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"
        },
        "displayName": "Webhook",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 356,
        "icon": "file:gmail.svg",
        "name": "n8n-nodes-base.gmail",
        "codex": {
          "data": {
            "alias": [
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/",
                  "icon": "💪",
                  "label": "Using Automation to Boost Productivity in the Workplace"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Gmail"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"
        },
        "displayName": "Gmail",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 33,
        "name": "Social Media"
      }
    ],
    "image": []
  }
}