Skip to content

In n8n, copy this file and paste it onto the canvas, or use Import from File.

{
  "name": "05 - Form to CRM Follow-up",
  "nodes": [
    {
      "parameters": {
        "formTitle": "Work with me",
        "formDescription": "Tell me about your project and I'll get back to you within 24 hours.",
        "formFields": {
          "values": [
            { "fieldLabel": "Name", "requiredField": true },
            { "fieldLabel": "Email", "fieldType": "email", "requiredField": true },
            { "fieldLabel": "Company" },
            {
              "fieldLabel": "What do you need help with?",
              "fieldType": "dropdown",
              "fieldOptions": { "values": [{ "option": "Automation" }, { "option": "AI agent" }, { "option": "Integration" }, { "option": "Something else" }] },
              "requiredField": true
            },
            {
              "fieldLabel": "Budget",
              "fieldType": "dropdown",
              "fieldOptions": { "values": [{ "option": "Under $1k" }, { "option": "$1k-$5k" }, { "option": "Over $5k" }] },
              "requiredField": true
            },
            { "fieldLabel": "Details", "fieldType": "textarea" }
          ]
        },
        "options": {
          "path": "work-with-me",
          "appendAttribution": false,
          "respondWithOptions": {
            "values": { "formSubmittedText": "Thanks! Check your inbox, I've sent you a confirmation." }
          }
        }
      },
      "id": "m05-form",
      "name": "Contact Form",
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.3,
      "position": [0, 100],
      "webhookId": "course-05-form"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "n1", "name": "name", "value": "={{ $json['Name'].trim() }}", "type": "string" },
            { "id": "n2", "name": "first_name", "value": "={{ $json['Name'].trim().split(' ')[0] }}", "type": "string" },
            { "id": "n3", "name": "email", "value": "={{ $json['Email'].trim().toLowerCase() }}", "type": "string" },
            { "id": "n4", "name": "company", "value": "={{ ($json['Company'] ?? '').trim() }}", "type": "string" },
            { "id": "n5", "name": "need", "value": "={{ $json['What do you need help with?'] }}", "type": "string" },
            { "id": "n6", "name": "budget", "value": "={{ $json['Budget'] }}", "type": "string" },
            { "id": "n7", "name": "details", "value": "={{ $json['Details'] ?? '' }}", "type": "string" },
            { "id": "n8", "name": "priority", "value": "={{ $json['Budget'] === 'Over $5k' ? 'high' : 'normal' }}", "type": "string" },
            { "id": "n9", "name": "status", "value": "new", "type": "string" },
            { "id": "n10", "name": "submitted_at", "value": "={{ $now.toISO() }}", "type": "string" }
          ]
        },
        "options": {}
      },
      "id": "m05-normalize",
      "name": "Normalize Lead",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [220, 100]
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": { "__rl": true, "mode": "url", "value": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit" },
        "sheetName": { "__rl": true, "mode": "name", "value": "CRM" },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "email": "={{ $json.email }}",
            "name": "={{ $json.name }}",
            "company": "={{ $json.company }}",
            "need": "={{ $json.need }}",
            "budget": "={{ $json.budget }}",
            "priority": "={{ $json.priority }}",
            "status": "={{ $json.status }}",
            "details": "={{ $json.details }}",
            "submitted_at": "={{ $json.submitted_at }}"
          },
          "matchingColumns": ["email"],
          "schema": [
            { "id": "email", "displayName": "email", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "name", "displayName": "name", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "company", "displayName": "company", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "need", "displayName": "need", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "budget", "displayName": "budget", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "priority", "displayName": "priority", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "status", "displayName": "status", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "details", "displayName": "details", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true },
            { "id": "submitted_at", "displayName": "submitted_at", "required": false, "defaultMatch": false, "display": true, "type": "string", "canBeUsedToMatch": true }
          ]
        },
        "options": {}
      },
      "id": "m05-crm",
      "name": "Save to CRM",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [440, 100]
    },
    {
      "parameters": {
        "sendTo": "={{ $('Normalize Lead').item.json.email }}",
        "subject": "=Got it, {{ $('Normalize Lead').item.json.first_name }}! Next steps for your {{ $('Normalize Lead').item.json.need.toLowerCase() }} project",
        "emailType": "html",
        "message": "=<p>Hi {{ $('Normalize Lead').item.json.first_name }},</p>\n<p>Thanks for reaching out about <b>{{ $('Normalize Lead').item.json.need.toLowerCase() }}</b>{{ $('Normalize Lead').item.json.company ? ' for ' + $('Normalize Lead').item.json.company : '' }}. I've got your details and will reply personally within 24 hours.</p>\n<p>To make our first call useful, reply to this email with:</p>\n<ul><li>The tools you use today</li><li>The task that takes your team the most time</li></ul>\n<p>Talk soon,<br>Ian</p>",
        "options": { "appendAttribution": false }
      },
      "id": "m05-welcome",
      "name": "Send Welcome Email",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [660, 100]
    },
    {
      "parameters": { "amount": 2, "unit": "days" },
      "id": "m05-wait",
      "name": "Wait 2 Days",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [880, 100],
      "webhookId": "course-05-wait"
    },
    {
      "parameters": {
        "sendTo": "={{ $('Normalize Lead').item.json.email }}",
        "subject": "=Quick follow-up, {{ $('Normalize Lead').item.json.first_name }}",
        "emailType": "html",
        "message": "=<p>Hi {{ $('Normalize Lead').item.json.first_name }},</p>\n<p>Just following up on your {{ $('Normalize Lead').item.json.need.toLowerCase() }} request. Would a 20-minute call this week work? Reply with a time that suits you.</p>\n<p>Ian</p>",
        "options": { "appendAttribution": false }
      },
      "id": "m05-followup",
      "name": "Send Follow-up",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [1100, 100]
    }
  ],
  "connections": {
    "Contact Form": { "main": [[{ "node": "Normalize Lead", "type": "main", "index": 0 }]] },
    "Normalize Lead": { "main": [[{ "node": "Save to CRM", "type": "main", "index": 0 }]] },
    "Save to CRM": { "main": [[{ "node": "Send Welcome Email", "type": "main", "index": 0 }]] },
    "Send Welcome Email": { "main": [[{ "node": "Wait 2 Days", "type": "main", "index": 0 }]] },
    "Wait 2 Days": { "main": [[{ "node": "Send Follow-up", "type": "main", "index": 0 }]] }
  },
  "pinData": {},
  "settings": { "executionOrder": "v1" }
}