AutomationFlowsData & Sheets › Automate Client Lifecycle: Lead Intake to Onboarding with Airtable, Notion &…

Automate Client Lifecycle: Lead Intake to Onboarding with Airtable, Notion &…

Original n8n title: Automate Client Lifecycle: Lead Intake to Onboarding with Airtable, Notion & Google Calendar

ByDhruv Mali @dhruvmali on n8n.io

This workflow automates the entire lifecycle of a service-based client, combining four distinct business flows into a single view: Intake Leads: Receives a webhook from your form builder, validates the data, optionally enriches the email using Clearbit, and creates records in…

Webhook trigger★★★★★ complexity37 nodesAirtableNotionGoogle CalendarSlackHTTP RequestGmail
Data & Sheets Trigger: Webhook Nodes: 37 Complexity: ★★★★★ Added:

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

This workflow follows the Airtable → Gmail recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "id": "b7f942fa-c386-496b-8e4e-0cde64fc6e21",
      "name": "Webhook Trigger",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -352,
        672
      ],
      "parameters": {
        "path": "booking",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 1
    },
    {
      "id": "e579b87f-9343-4cdb-9118-69ba16dc2cf4",
      "name": "Validate Booking Data",
      "type": "n8n-nodes-base.if",
      "position": [
        -176,
        672
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.email}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.calendlyEventId}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.scheduledAt}}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0fe3314f-b4ac-46d1-9773-c4ff78989b35",
      "name": "Update Airtable Lead Record",
      "type": "n8n-nodes-base.airtable",
      "maxTries": 3,
      "position": [
        16,
        576
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "table": "tblLeads",
        "columns": {
          "value": {
            "Status": "Booked",
            "Timezone": "={{$json.timezone}}",
            "Booking Date": "={{$json.scheduledAt}}",
            "Last Updated": "={{$now.toISO()}}",
            "Calendly Event ID": "={{$json.calendlyEventId}}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "update"
      },
      "retryOnFail": true,
      "typeVersion": 2,
      "continueOnFail": true,
      "waitBetweenTries": 1000
    },
    {
      "id": "d82ed76b-6c44-47b5-a42f-08d407c657d7",
      "name": "Update Notion Page",
      "type": "n8n-nodes-base.notion",
      "maxTries": 3,
      "position": [
        208,
        576
      ],
      "parameters": {
        "operation": "update"
      },
      "retryOnFail": true,
      "typeVersion": 2,
      "continueOnFail": true,
      "waitBetweenTries": 1000
    },
    {
      "id": "23e035b5-6187-442b-b861-b1a37ca33968",
      "name": "Create Google Calendar Event",
      "type": "n8n-nodes-base.googleCalendar",
      "maxTries": 3,
      "position": [
        400,
        576
      ],
      "parameters": {
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "resource": "calendar",
        "operation": "createEvent"
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 1000
    },
    {
      "id": "e2dc2241-dabe-4877-97bd-39f8a2177d50",
      "name": "Schedule Daily Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1680,
        80
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "799b7d31-9706-4876-83ed-dc1f12460e75",
      "name": "Get Upcoming Calls (24h)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1904,
        80
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "table": "tblLeads",
        "operation": "getAllRecords"
      },
      "typeVersion": 2
    },
    {
      "id": "b5eeea64-a4e5-4d8e-a598-9a0099f53b89",
      "name": "Mark Reminder Sent",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2352,
        80
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "table": "tblLeads",
        "columns": {
          "value": {
            "Reminder Sent": true,
            "Reminder Sent At": "={{$now.toISO()}}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "update"
      },
      "typeVersion": 2
    },
    {
      "id": "8c154308-aaf5-4873-8955-4983b1905b89",
      "name": "Notify Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        752,
        576
      ],
      "parameters": {
        "text": "=\ud83d\udcc5 **New Call Scheduled!**\n\n*Client:* {{$json.name}}\n*Email:* {{$json.email}}\n*Date:* {{DateTime.fromISO($json.scheduledAt).toFormat('EEEE, MMMM d, yyyy')}}\n*Time:* {{DateTime.fromISO($json.scheduledAt).toFormat('h:mm a ZZZZ')}}\n*Timezone:* {{$json.timezone}}\n\n<{{$('Create Google Calendar Event').item.json.htmlLink}}|View in Calendar>",
        "otherOptions": {}
      },
      "typeVersion": 2.1
    },
    {
      "id": "168d2edc-e58c-4d8c-ae24-725e992b9a89",
      "name": "Respond Error",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        16,
        768
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ { \"success\": false, \"error\": \"Invalid booking data\" } }}"
      },
      "typeVersion": 1
    },
    {
      "id": "34de95b5-a14d-4cd9-9021-0abe9fdb55a9",
      "name": "Validate Data",
      "type": "n8n-nodes-base.if",
      "position": [
        -96,
        112
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.email}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.name}}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f2eda407-f187-4318-ac96-c6617de7575b",
      "name": "Enrich with Clearbit (Optional)",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Optional: Enrich lead data with Clearbit. Requires Clearbit API key.",
      "position": [
        128,
        16
      ],
      "parameters": {
        "url": "https://api.clearbit.com/v2/people/find",
        "options": {
          "timeout": 5000
        },
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "email",
              "value": "={{$json.email}}"
            }
          ]
        }
      },
      "typeVersion": 3,
      "continueOnFail": true
    },
    {
      "id": "9334be5f-22b6-4dc0-92cc-e77875ca9b9c",
      "name": "Create Airtable Record",
      "type": "n8n-nodes-base.airtable",
      "maxTries": 3,
      "position": [
        352,
        16
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "table": "tblLeads",
        "operation": "append"
      },
      "retryOnFail": true,
      "typeVersion": 2,
      "waitBetweenTries": 1000
    },
    {
      "id": "73e6e988-7be0-4193-ac66-c65d189f23fc",
      "name": "Create Notion Project Page",
      "type": "n8n-nodes-base.notion",
      "maxTries": 3,
      "position": [
        576,
        16
      ],
      "parameters": {
        "title": "={{$json.name}} - {{$json.company || 'Lead'}}",
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "notion-database-id"
        },
        "blockUi": {
          "blockValues": [
            {
              "richText": true
            },
            {
              "type": "heading_2",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            }
          ]
        },
        "options": {}
      },
      "retryOnFail": true,
      "typeVersion": 2,
      "waitBetweenTries": 1000
    },
    {
      "id": "d615acd3-73b8-4104-aa0c-2a15c9e7b7d6",
      "name": "Send Slack Notification",
      "type": "n8n-nodes-base.slack",
      "maxTries": 3,
      "position": [
        800,
        16
      ],
      "parameters": {
        "text": "=\ud83c\udfaf **New Lead Received!**\n\n*Name:* {{$json.name}}\n*Email:* {{$json.email}}\n*Company:* {{$json.company || 'Not provided'}}\n*Budget Range:* {{$json.budgetRange || 'Not specified'}}\n*Source:* {{$json.source}}\n\n*Description:*\n{{$json.description || 'No description'}}\n\n<{{$('Create Notion Project Page').item.json.url}}|View in Notion>",
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "retryOnFail": true,
      "typeVersion": 2.1,
      "waitBetweenTries": 2000
    },
    {
      "id": "bc7c297d-beec-4076-bf15-a907a25bb5e7",
      "name": "Log Error to Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        352,
        208
      ],
      "parameters": {
        "text": "=\u26a0\ufe0f **Lead Intake Workflow Error**\n\n*Error:* {{$json.error?.message || 'Unknown error'}}\n*Lead Email:* {{$('Webhook Trigger1').item.json.email}}\n*Timestamp:* {{$now.toISO()}}",
        "otherOptions": {}
      },
      "typeVersion": 2.1,
      "continueOnFail": true
    },
    {
      "id": "e58d40ec-71af-4166-9317-48d4a139bb98",
      "name": "Webhook Trigger1",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -320,
        112
      ],
      "parameters": {
        "path": "lead-intake",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 1
    },
    {
      "id": "f18a2666-9f69-43c7-9604-434efda28345",
      "name": "Respond Success1",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1248,
        16
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ { \"success\": true, \"message\": \"Lead processed successfully\" } }}"
      },
      "typeVersion": 1
    },
    {
      "id": "73908ad8-0225-4a5a-846c-50d614d9d321",
      "name": "Respond Error1",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        128,
        208
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ { \"success\": false, \"error\": \"Invalid lead data\" } }}"
      },
      "typeVersion": 1
    },
    {
      "id": "8717397b-add7-4d1c-86df-52ad68ccb0f8",
      "name": "Validate Payment Data",
      "type": "n8n-nodes-base.if",
      "position": [
        1312,
        768
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.leadEmail}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.amount}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.stripePaymentIntent}}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "986e0f43-6a4e-4b9c-9fa7-429b372a331e",
      "name": "Mark Lead as Paid in Airtable",
      "type": "n8n-nodes-base.airtable",
      "maxTries": 3,
      "position": [
        1520,
        640
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "table": "tblLeads",
        "columns": {
          "value": {
            "Status": "Paid",
            "Payment Date": "={{$now.toISO()}}",
            "Payment Amount": "={{$json.amount / 100}}",
            "Payment Status": "Completed",
            "Priority Client": true,
            "Stripe Payment Intent": "={{$json.stripePaymentIntent}}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "update"
      },
      "retryOnFail": true,
      "typeVersion": 2,
      "waitBetweenTries": 1000
    },
    {
      "id": "d0af2821-7a24-4e76-8cb0-d1919251b915",
      "name": "Create Onboarding Checklist in Notion",
      "type": "n8n-nodes-base.notion",
      "maxTries": 3,
      "position": [
        1712,
        640
      ],
      "parameters": {
        "title": "=Onboarding - {{$('Mark Lead as Paid in Airtable').item.json.fields.Name}}",
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "notion-onboarding-database-id"
        },
        "blockUi": {
          "blockValues": [
            {
              "type": "heading_1",
              "richText": true
            },
            {
              "richText": true
            },
            {
              "type": "heading_2",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "to_do",
              "richText": true
            },
            {
              "type": "heading_2",
              "richText": true
            },
            {
              "richText": true
            }
          ]
        },
        "options": {}
      },
      "retryOnFail": true,
      "typeVersion": 2,
      "waitBetweenTries": 1000
    },
    {
      "id": "d89eb2d7-28c0-4f3d-a2d1-67558f1813ef",
      "name": "Send WhatsApp Welcome (Optional)",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Optional: Requires Twilio WhatsApp Business API setup and phone number in lead data",
      "position": [
        2128,
        512
      ],
      "parameters": {
        "url": "https://api.twilio.com/2010-04-01/Accounts/{{$env.TWILIO_ACCOUNT_SID}}/Messages.json",
        "options": {},
        "sendBody": true,
        "authentication": "headerAuth",
        "bodyParameters": {
          "parameters": [
            {
              "name": "To",
              "value": "=whatsapp:{{$('Mark Lead as Paid in Airtable').item.json.fields.Phone}}"
            },
            {
              "name": "From",
              "value": "=whatsapp:{{$env.TWILIO_WHATSAPP_NUMBER}}"
            },
            {
              "name": "Body",
              "value": "=Hi {{$('Mark Lead as Paid in Airtable').item.json.fields.Name.split(' ')[0]}}! \ud83c\udf89\n\nYour payment has been confirmed. Welcome to your automation journey!\n\nI've sent you a detailed email with next steps. Check your inbox for \"Welcome! Your automation journey starts now\"\n\nI'll reach out within 24 hours to schedule our kickoff call.\n\nExcited to work with you!\n\n- Dhruv"
            }
          ]
        }
      },
      "typeVersion": 4.1,
      "continueOnFail": true
    },
    {
      "id": "d2bd3f37-720e-4327-bba5-6fa6c181bec6",
      "name": "Notify Slack - Payment",
      "type": "n8n-nodes-base.slack",
      "position": [
        2336,
        640
      ],
      "parameters": {
        "text": "=\ud83d\udcb0 **Payment Received!**\n\n*Client:* {{$('Mark Lead as Paid in Airtable').item.json.fields.Name}}\n*Email:* {{$json.leadEmail}}\n*Amount:* ${{$json.amount / 100}} USD\n*Payment ID:* {{$json.stripePaymentIntent}}\n\n\u2705 Onboarding checklist created\n\u2705 Welcome email sent\n{{$('Send WhatsApp Welcome (Optional)').item.json.success ? '\u2705 WhatsApp message sent' : ''}}\n\n<{{$('Create Onboarding Checklist in Notion').item.json.url}}|View Onboarding Checklist>",
        "otherOptions": {}
      },
      "typeVersion": 2.1
    },
    {
      "id": "88285d08-6f50-4717-81ab-0afaa38a8854",
      "name": "Update Financial Tracking",
      "type": "n8n-nodes-base.airtable",
      "notes": "Optional: Track payments in separate financial table",
      "position": [
        2112,
        784
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "table": "tblFinancials",
        "operation": "append"
      },
      "typeVersion": 2,
      "continueOnFail": true
    },
    {
      "id": "abcf0d32-7238-427d-a3a7-587b92aefd30",
      "name": "Webhook Trigger2",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1104,
        768
      ],
      "parameters": {
        "path": "payment-success",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 1
    },
    {
      "id": "da8b5dcf-b4c1-4bf1-a734-87e81ebcb6cd",
      "name": "Respond Success2",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2544,
        640
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ { \"success\": true, \"message\": \"Payment processed successfully\" } }}"
      },
      "typeVersion": 1
    },
    {
      "id": "fa6d34e9-c062-480b-a3a0-d1b73392ee9d",
      "name": "Respond Error2",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1520,
        848
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ { \"success\": false, \"error\": \"Invalid payment data\" } }}"
      },
      "typeVersion": 1
    },
    {
      "id": "d82471a0-b77d-4760-a9fe-c6b9959bfe5e",
      "name": "Send Pre-Call Survey Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        592,
        576
      ],
      "parameters": {
        "sendTo": "={{$json.email}}",
        "message": "=Hi {{$json.name}},\n\nThanks for scheduling a time with us! To make the most of our call on {{DateTime.fromISO($json.scheduledAt).toFormat('EEEE, MMMM d')}}, could you please answer 3 quick questions?\n\n[ Link to your Survey/Typeform ]\n\nLooking forward to speaking soon,\nDhruv",
        "options": {},
        "subject": "Your call is confirmed! Quick pre-call survey",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6286bb4f-b91f-4584-a555-10b0e0aa3b6b",
      "name": "Send 24h Reminder",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2128,
        80
      ],
      "parameters": {
        "sendTo": "={{$json.email}}",
        "message": "=Hi {{$json.Name}},\n\nJust a quick reminder that we have a call scheduled for tomorrow.\n\nTime: {{DateTime.fromISO($json['Booking Date']).toFormat('h:mm a')}} ({{$json.Timezone}})\n\nIf you need to reschedule, please let me know asap.\n\nTalk soon,\nDhruv",
        "options": {},
        "subject": "Reminder: Your call is tomorrow!",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c9ae4090-65fb-4aaf-bbf1-3fa85d1c8b54",
      "name": "Send Auto-Reply Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1024,
        16
      ],
      "parameters": {
        "sendTo": "={{$json.email}}",
        "message": "=Hi {{$json.name}},\n\nThanks for your interest in working with us! I've received your details regarding {{$json.company || 'your project'}}.\n\nI'd love to chat about how we can help. Please pick a time that works for you here:\n[ Link to your Calendly/Booking Page ]\n\nBest,\nDhruv",
        "options": {},
        "subject": "Thanks for reaching out! Let's schedule a call",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "67c7a441-e403-4152-9033-5fc292aa02da",
      "name": "Send Welcome Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1920,
        640
      ],
      "parameters": {
        "sendTo": "={{$json.email}}",
        "message": "=Hi {{$json.leadEmail}},\n\nWe have received your payment of ${{$json.amount / 100}}. Thank you for trusting us!\n\nWe have automatically created your onboarding checklist. Please access your client portal here:\n{{$('Create Onboarding Checklist in Notion').item.json.url}}\n\nLet's get started!\nDhruv",
        "options": {},
        "subject": "\ud83c\udf89 Welcome! Your automation journey starts now",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "655cf8c4-9aea-4ecb-b937-1cded256d057",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        464
      ],
      "parameters": {
        "color": 5,
        "width": 1376,
        "height": 448,
        "content": "## 2. Booking Automation\nListens for calendar events (e.g., Calendly). It validates the data, updates the Airtable lead status to \"Booked,\" creates a Google Calendar event, and emails a pre-call survey to the client."
      },
      "typeVersion": 1
    },
    {
      "id": "86898741-daa5-4dd1-bef0-53856caf1a9e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1584,
        -32
      ],
      "parameters": {
        "color": 5,
        "width": 1008,
        "height": 336,
        "content": "## 3. Daily Reminders (Cron Job)\nRuns automatically every day at 9:00 AM. It checks Airtable for calls scheduled in the next 24 hours and sends a reminder email to prevent no-shows."
      },
      "typeVersion": 1
    },
    {
      "id": "5ed63b23-652a-4797-9405-57e1c91f0307",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        -112
      ],
      "parameters": {
        "color": 5,
        "width": 1888,
        "height": 464,
        "content": "## 1. Lead Capture & Enrichment\nCatches new leads from your website form. It enriches data via Clearbit (optional), creates the initial project page in Notion, and notifies the team via Slack."
      },
      "typeVersion": 1
    },
    {
      "id": "bf534c40-df88-414d-b1c9-3b4253cc448c",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        400
      ],
      "parameters": {
        "color": 5,
        "width": 1712,
        "height": 608,
        "content": "## 4. Payment & Onboarding\nTriggered by a successful Stripe payment. It reconciles the finance table, generates a personalized Notion Onboarding Checklist, and sends the client a welcome email and WhatsApp message."
      },
      "typeVersion": 1
    },
    {
      "id": "3075981c-6963-4878-b78f-8caba419fc68",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1200,
        32
      ],
      "parameters": {
        "width": 592,
        "height": 576,
        "content": "# \ud83d\ude80 Automate Lead Intake, Bookings & Onboarding\n\nThis workflow handles the complete agency client lifecycle without manual intervention.\n\n## How it works\n1. **Lead Intake:** Captures web form data, creates records in Airtable & Notion, and sends an auto-reply.\n2. **Booking:** Syncs Calendly events, updates status, and emails a pre-call survey.\n3. **Daily Ops:** Runs every morning to check for upcoming calls and sends 24h reminders.\n4. **Onboarding:** Triggered by payment. It marks the lead as 'Paid', generates a Notion onboarding checklist, and sends a Welcome Kit (Email + WhatsApp).\n\n## Setup Steps\n* **Credentials:** Connect Airtable, Notion, Gmail, Slack, and Stripe.\n* **Airtable:** Create a base with `tblLeads` and `tblFinancials`.\n* **Notion:** Create a Projects DB and Onboarding DB. Copy IDs into the Notion nodes.\n* **Webhooks:** Replace the 3 webhook URLs in your external tools (Form, Calendar, Payment Processor)."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Notify Slack": {
      "main": [
        []
      ]
    },
    "Validate Data": {
      "main": [
        [
          {
            "node": "Enrich with Clearbit (Optional)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond Error1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Respond Error1": {
      "main": [
        [
          {
            "node": "Log Error to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Validate Booking Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger1": {
      "main": [
        [
          {
            "node": "Validate Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger2": {
      "main": [
        [
          {
            "node": "Validate Payment Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send 24h Reminder": {
      "main": [
        [
          {
            "node": "Mark Reminder Sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Welcome Email": {
      "main": [
        [
          {
            "node": "Send WhatsApp Welcome (Optional)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Notify Slack - Payment",
            "type": "main",
            "index": 0
          },
          {
            "node": "Update Financial Tracking",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Notion Page": {
      "main": [
        [
          {
            "node": "Create Google Calendar Event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Daily Check": {
      "main": [
        [
          {
            "node": "Get Upcoming Calls (24h)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Auto-Reply Email": {
      "main": [
        [
          {
            "node": "Respond Success1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Booking Data": {
      "main": [
        [
          {
            "node": "Update Airtable Lead Record",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Payment Data": {
      "main": [
        [
          {
            "node": "Mark Lead as Paid in Airtable",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond Error2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Airtable Record": {
      "main": [
        [
          {
            "node": "Create Notion Project Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Slack - Payment": {
      "main": [
        [
          {
            "node": "Respond Success2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Slack Notification": {
      "main": [
        [
          {
            "node": "Send Auto-Reply Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Upcoming Calls (24h)": {
      "main": [
        [
          {
            "node": "Send 24h Reminder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Financial Tracking": {
      "main": [
        [
          {
            "node": "Notify Slack - Payment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Notion Project Page": {
      "main": [
        [
          {
            "node": "Send Slack Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Pre-Call Survey Email": {
      "main": [
        [
          {
            "node": "Notify Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Airtable Lead Record": {
      "main": [
        [
          {
            "node": "Update Notion Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Google Calendar Event": {
      "main": [
        [
          {
            "node": "Send Pre-Call Survey Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Lead as Paid in Airtable": {
      "main": [
        [
          {
            "node": "Create Onboarding Checklist in Notion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enrich with Clearbit (Optional)": {
      "main": [
        [
          {
            "node": "Create Airtable Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send WhatsApp Welcome (Optional)": {
      "main": [
        [
          {
            "node": "Notify Slack - Payment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Onboarding Checklist in Notion": {
      "main": [
        [
          {
            "node": "Send Welcome Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This workflow automates the entire lifecycle of a service-based client, combining four distinct business flows into a single view: Intake Leads: Receives a webhook from your form builder, validates the data, optionally enriches the email using Clearbit, and creates records in…

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

More Data & Sheets workflows → · Browse all categories →

Related workflows

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

Data & Sheets

A warm, reliable onboarding system for small businesses and studios. Captures a form submission via webhook, creates a Client record in Notion, sends a concierge-style welcome email (with scheduler +

Notion, Email Send, Telegram +4
Data & Sheets

&gt; Transform your content strategy with automated competitor intelligence

HTTP Request, Airtable, Notion +2
Data & Sheets

This template is ideal for small businesses, agencies, and solo professionals who want to automate appointment scheduling and caller follow-up through a voice-based AI receptionist. If you’re using to

Item Lists, Google Calendar, Airtable
Data & Sheets

This premium n8n workflow harnesses the power of DataForSEO's API combined with Airtable's relational database capabilities to transform your keyword research process, providing deeper insights for co

HTTP Request, Airtable
Data & Sheets

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Airtable, HTTP Request, Google Drive +1