N
n8n Store
Workflow Market
Typeform → Vero Lead Intake with Email Validation & Welcome Email

Typeform → Vero Lead Intake with Email Validation & Welcome Email

by shinjiwatanabe0 views

Description

Categories

⚙️ Automation

Nodes Used

n8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.coden8n-nodes-base.veron8n-nodes-base.gmailn8n-nodes-base.slackn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNote
PriceGratis
Views0
Last Updated11/28/2025
workflow.json
{
  "id": "uNv72uzhSr4n9JCF",
  "meta": {
    "instanceId": "7aaad48c714db2d503d009516f7b1f7c2a87eb30bffff4a635c76d7ede586a84"
  },
  "name": "Typeform → Vero Lead Intake with Email Validation & Welcome Email",
  "tags": [],
  "nodes": [
    {
      "id": "3af5dfc3-3b83-416b-8ae1-a671aa37c5c4",
      "name": "Typeform Trigger",
      "type": "n8n-nodes-base.typeformTrigger",
      "position": [
        -208,
        64
      ],
      "webhookId": "1e94813c-cc5c-4f5b-b77f-cb7da6c74b4c",
      "parameters": {
        "formId": "rcM5Z5Le",
        "onlyAnswers": false,
        "simplifyAnswers": false
      },
      "typeVersion": 1.1
    },
    {
      "id": "26ed47bd-d50f-48e6-8a66-db6274446c6b",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        16,
        64
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "qualificationScore",
              "type": "number",
              "value": 40
            },
            {
              "id": "id-2",
              "name": "welcomeEmailSubject",
              "type": "string",
              "value": "Welcome to Our Platform!"
            },
            {
              "id": "id-3",
              "name": "slackChannel",
              "type": "string",
              "value": "#leads"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "d9aaefad-caf0-4e65-b15e-a6a6e0786d23",
      "name": "Validate Email Format",
      "type": "n8n-nodes-base.code",
      "position": [
        240,
        64
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst email = $input.item.json.email || '';\nconst isValidEmail = emailRegex.test(email);\n\nreturn {\n  ...($input.item.json),\n  isValidEmail,\n  validationStatus: isValidEmail ? 'valid' : 'invalid'\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "94a1f753-e95a-4bd8-84ab-5fab2cd6bdf1",
      "name": "Map Contact Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        464,
        64
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "email",
              "type": "string",
              "value": ""
            },
            {
              "id": "id-2",
              "name": "firstName",
              "type": "string",
              "value": "={{ $json.first_name || $json.firstName || '' }}"
            },
            {
              "id": "id-3",
              "name": "company",
              "type": "string",
              "value": "={{ $json.company || '' }}"
            },
            {
              "id": "id-4",
              "name": "plan",
              "type": "string",
              "value": "={{ $json.plan || 'Free' }}"
            },
            {
              "id": "id-5",
              "name": "score",
              "type": "number",
              "value": "={{ $json.score || 50 }}"
            },
            {
              "id": "id-6",
              "name": "source",
              "type": "string",
              "value": "Typeform"
            },
            {
              "id": "id-7",
              "name": "consent",
              "type": "boolean",
              "value": "={{ $json.consent || true }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "789db198-72cd-4bee-9791-3cf4bda24271",
      "name": "IF Qualified Lead",
      "type": "n8n-nodes-base.if",
      "position": [
        912,
        64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $('Map Contact Fields').item.json.score }}",
              "rightValue": "={{ $('Workflow Configuration').first().json.qualificationScore }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "7af1c5e5-04fa-4e29-9178-64b19b2f934c",
      "name": "Send Welcome Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1136,
        64
      ],
      "webhookId": "892d5122-4898-4f3f-a388-ca6e41b3d886",
      "parameters": {
        "sendTo": "={{ $('Typeform Trigger').item.json.form_response.answers[0].email }}",
        "message": "=Hi {{ $('Typeform Trigger').item.json.form_response.answers[1].text }},<br><br>Welcome to our platform! We're excited to have you on board.<br><br>Your plan:{{ $('Map Contact Fields').item.json.plan }} <br><br>Best regards,<br>The Team",
        "options": {},
        "subject": "={{ $('Workflow Configuration').first().json.welcomeEmailSubject }}"
      },
      "typeVersion": 2.1
    },
    {
      "id": "062bc613-d06e-4b4e-8e71-144bb8bf9f47",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1360,
        64
      ],
      "parameters": {
        "columns": {
          "value": {
            "plan": "={{ $('Map Contact Fields').item.json.plan }}",
            "email": "={{ $('Typeform Trigger').item.json.form_response.answers[0].email }}",
            "score": "={{ $('Map Contact Fields').item.json.score }}",
            "action": "welcome_sent",
            "status": "={{ $('Validate Email Format').item.json.validationStatus }}",
            "company": "={{ $('Typeform Trigger').item.json.form_response.answers[2].text }}",
            "firstName": "={{ $('Typeform Trigger').item.json.form_response.answers[1].text }}",
            "timestamp": "={{ $now.toISO() }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "firstName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "firstName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "plan",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "plan",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "action",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "vero"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "1fZf14pfCSRZV4wQKt0DAvixcDdqLHSonK2BjE8SCNCA"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "46eec741-e4e2-4c8f-92d0-bd5538a3c6b1",
      "name": "Notify Slack Channel",
      "type": "n8n-nodes-base.slack",
      "position": [
        1584,
        64
      ],
      "webhookId": "cc931b90-9188-499f-8fb1-305886889478",
      "parameters": {
        "text": "=🎉 New qualified lead!\n\n*Email:* {{ $json.email }}\n*Name:* {{ $json.firstName }}\n*Company:* {{ $json.company }}\n*Plan:* {{ $json.plan }}\n*Score:* {{ $json.score }}\n*Action:* Welcome email sent",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "=#general"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.3
    },
    {
      "id": "99c3e1f7-9dfa-4c49-8c4d-2237cca97c08",
      "name": "Vero Upsert Profile",
      "type": "n8n-nodes-base.vero",
      "position": [
        688,
        64
      ],
      "parameters": {
        "id": "={{ $json.email }}",
        "additionalFields": {
          "email": "={{ $json.form_response.answers[0].email }}"
        },
        "dataAttributesUi": {
          "dataAttributesValues": [
            {
              "key": "firstName",
              "value": "={{ $json.form_response.answers[1].text }}"
            },
            {
              "key": "company",
              "value": "={{ $json.form_response.answers[2].text }}"
            },
            {
              "key": "plan",
              "value": "={{ $json.plan }}"
            },
            {
              "key": "score",
              "value": "={{ $json.score }}"
            },
            {
              "key": "source",
              "value": "={{ $json.source }}"
            },
            {
              "key": "consent",
              "value": "={{ $json.consent }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bf465232-ca6f-44db-a9bd-8dcf29ded892",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        -144
      ],
      "parameters": {
        "width": 288,
        "height": 176,
        "content": "## Typeform Trigger\nListens for new Typeform responses from the specified form. When a submission arrives, it passes the raw answers (email, first name, company, score, consent, etc.) to the workflow as JSON for downstream processing."
      },
      "typeVersion": 1
    },
    {
      "id": "313d8612-da32-44f6-bb7e-a043bfa0a375",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        224
      ],
      "parameters": {
        "width": 304,
        "height": 176,
        "content": "## Workflow Configuration\nCentralizes user-editable variables (e.g., qualificationScore, slackChannel, email subject, sheet name). Keeps all key constants in one place so users can adapt the template without digging into every node."
      },
      "typeVersion": 1
    },
    {
      "id": "95d23b42-efe2-4d9f-87a4-5859250e89f4",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        160,
        -160
      ],
      "parameters": {
        "width": 272,
        "height": 192,
        "content": "## Validate Email Format\nRuns a lightweight regex check against the submitted email address. Adds flags like isValidEmail and a validationStatus message so the workflow can branch or log clear reasons when the email format is invalid."
      },
      "typeVersion": 1
    },
    {
      "id": "bccb0e67-bcc1-4422-8bbe-d0f0ad538dd4",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        224
      ],
      "parameters": {
        "width": 256,
        "height": 176,
        "content": "## Map Contact Fields\nNormalizes Typeform fields into a clean contact payload (e.g., email, firstName, company, plan, score, consent, source). Ensures consistent property names for the CRM and logging layers."
      },
      "typeVersion": 1
    },
    {
      "id": "63b5ad8f-6fe5-4a29-b0bc-a44de36f847e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        -160
      ],
      "parameters": {
        "width": 272,
        "height": 192,
        "content": "## Vero Upsert Profile\nCreates or updates a Vero customer profile using the contact payload (email as the primary identifier). Syncs attributes such as first name, company, plan, score, source tag, and consent for future segmentation and messaging."
      },
      "typeVersion": 1
    },
    {
      "id": "a8a3616d-5a28-42de-9c22-bf213542afd0",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        832,
        224
      ],
      "parameters": {
        "width": 288,
        "height": 192,
        "content": "## IF Qualified Lead\nCompares the lead’s score to qualificationScore. Routes “qualified” leads into the welcome email + notifications path, while “not qualified” can be handled with alternate logging or silent discard (depending on how you configure the template)."
      },
      "typeVersion": 1
    },
    {
      "id": "ed9c6afa-cb2a-404e-9812-56a49cddc709",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        -160
      ],
      "parameters": {
        "width": 272,
        "height": 192,
        "content": "## Send Welcome Email\nSends a personalized welcome message to qualified leads. Uses variables from earlier nodes to populate the subject and body (e.g., first name, selected plan), establishing a rapid first-touch after form submission."
      },
      "typeVersion": 1
    },
    {
      "id": "47205c03-0b41-4b37-9e77-ee0392148e40",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        224
      ],
      "parameters": {
        "width": 272,
        "height": 192,
        "content": "## Log to Google Sheets\nAppends a new row capturing the event details (timestamp, email, name, company, score, validation status, action taken). Builds an auditable activity trail that’s easy to filter, chart, or share with stakeholders."
      },
      "typeVersion": 1
    },
    {
      "id": "6759b1bc-a853-445b-82f7-69071e6535c2",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1504,
        -144
      ],
      "parameters": {
        "width": 272,
        "height": 176,
        "content": "## Notify Slack Channel\nPosts a concise summary of the qualified lead to the configured Slack channel. Gives your team instant visibility (who, company, score, action taken) without opening Vero, Gmail, or Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "f8e115a2-18f7-4836-907a-197ca986e3b2",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        144
      ],
      "parameters": {
        "color": 5,
        "width": 336,
        "height": 240,
        "content": "## Workflow Overview\nThis workflow captures new leads from a Typeform submission, validates the email address, enriches and normalizes the fields, and then upserts the contact into Vero. Based on a configurable qualification score threshold, qualified leads automatically receive a personalized welcome email, are logged to a Google Sheet for reporting, and trigger a Slack notification for your team."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "28981280-bc73-4702-ac7a-6f8bc140a2c8",
  "connections": {
    "Typeform Trigger": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Qualified Lead": {
      "main": [
        [
          {
            "node": "Send Welcome Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map Contact Fields": {
      "main": [
        [
          {
            "node": "Vero Upsert Profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Welcome Email": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Vero Upsert Profile": {
      "main": [
        [
          {
            "node": "IF Qualified Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log to Google Sheets": {
      "main": [
        [
          {
            "node": "Notify Slack Channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Email Format": {
      "main": [
        [
          {
            "node": "Map Contact Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Validate Email Format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

相关工作流