{
  "name": "60 Second Speed to Lead",
  "nodes": [
    {
      "parameters": {
        "content": "## 60 second speed to lead\n\nNew form leads get an SMS straight away, an email two minutes later and a follow-up cadence until they book.\n\n**Setup**\n1. Point your website form at the **New Lead** webhook URL (fields: name, email, phone, budget, plus any utm_ fields).\n2. Connect Twilio, Gmail and Google Sheets. Sheet tab **Leads** with: email, name, phone, source, utm_source, utm_campaign, budget, booked, created_at.\n3. Set your booking link and the hot-lead budget threshold in **Prepare Lead**.\n4. In Calendly (Webhooks) or Cal.com, send bookings to the **Booking Made** URL. That stops the cadence.\n5. Paste a Slack incoming webhook into **Alert Sales** (or delete it).",
        "height": 440,
        "width": 440
      },
      "id": "40be7fc9-fb1d-47fe-a593-90d0670cebdd",
      "name": "Note 0",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -460,
        -240
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "new-lead",
        "options": {}
      },
      "id": "9e97f763-c479-474f-948b-ea4b77d5ff26",
      "name": "New Lead",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ],
      "webhookId": "1b8691bd-fdbb-4ba1-a030-39c169306e6e"
    },
    {
      "parameters": {
        "jsCode": "// Normalise an Australian or international number to E.164 (+61...). Change DEFAULT_CC for your country.\nconst DEFAULT_CC = '61';\nfunction e164(raw) {\n  let d = String(raw || '').replace(/[^\\d+]/g, '');\n  if (d.startsWith('+')) return d;\n  if (d.startsWith('00')) return '+' + d.slice(2);\n  if (d.startsWith('0')) return '+' + DEFAULT_CC + d.slice(1);\n  return d ? '+' + d : '';\n}\nconst BOOKING_URL = 'YOUR_BOOKING_LINK';      // e.g. https://calendly.com/you/intro\nconst HOT_BUDGET = 5000;                          // budgets at or above this alert sales\nconst b = $json.body || $json;\nconst name = String(b.name || `${b.first_name || ''} ${b.last_name || ''}`).trim();\nconst email = String(b.email || '').trim().toLowerCase();\nconst link = `${BOOKING_URL}?name=${encodeURIComponent(name)}&email=${encodeURIComponent(email)}`;\nreturn [{ json: {\n  name, firstName: name.split(' ')[0] || 'there', email, phone: e164(b.phone),\n  budget: Number(String(b.budget || 0).replace(/[^\\d.]/g, '')) || 0,\n  source: b.source || 'website', utm_source: b.utm_source || '', utm_campaign: b.utm_campaign || '',\n  bookingLink: link, hot: (Number(String(b.budget || 0).replace(/[^\\d.]/g, '')) || 0) >= HOT_BUDGET,\n} }];",
        "mode": "runOnceForEachItem"
      },
      "id": "e5116fa3-76df-48ba-8c74-a69ec409c8d2",
      "name": "Prepare Lead",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Leads"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "email": "={{ $json.email }}",
            "name": "={{ $json.name }}",
            "phone": "={{ $json.phone }}",
            "source": "={{ $json.source }}",
            "utm_source": "={{ $json.utm_source }}",
            "utm_campaign": "={{ $json.utm_campaign }}",
            "budget": "={{ $json.budget }}",
            "booked": "no",
            "created_at": "={{ $now.toISO() }}"
          },
          "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": "phone",
              "displayName": "phone",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "source",
              "displayName": "source",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "utm_source",
              "displayName": "utm_source",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "utm_campaign",
              "displayName": "utm_campaign",
              "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": "booked",
              "displayName": "booked",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "displayName": "created_at",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "id": "589fc2ae-1459-423c-aea1-9f9d0cc9a28f",
      "name": "Save Lead",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "4f410ded-c2ab-4b01-86fc-4433ef880751",
              "leftValue": "={{ $('Prepare Lead').item.json.hot }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "rightValue": ""
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "cc93303a-1c18-4a5a-b77d-260b719e50b1",
      "name": "Hot Lead?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        660,
        -180
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "YOUR_SLACK_WEBHOOK_URL",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ text: `🔥 Hot lead: ${$('Prepare Lead').item.json.name} (${$('Prepare Lead').item.json.phone}), budget $${$('Prepare Lead').item.json.budget}. Call now: tel:${$('Prepare Lead').item.json.phone}` }) }}",
        "options": {}
      },
      "id": "ac24229e-6b48-4c5f-bdf8-d416375baf88",
      "name": "Alert Sales",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        880,
        -200
      ]
    },
    {
      "parameters": {
        "from": "YOUR_TWILIO_NUMBER",
        "to": "={{ $('Prepare Lead').item.json.phone }}",
        "message": "=Hi {{ $('Prepare Lead').item.json.firstName }}, thanks for getting in touch with YOUR BUSINESS NAME! Grab a time that suits you here: {{ $('Prepare Lead').item.json.bookingLink }}  Reply STOP to opt out.",
        "options": {}
      },
      "id": "cec55bfe-7d43-4b2d-9c60-273c225ba1dd",
      "name": "Instant SMS",
      "type": "n8n-nodes-base.twilio",
      "typeVersion": 1,
      "position": [
        660,
        0
      ]
    },
    {
      "parameters": {
        "amount": 2,
        "unit": "minutes"
      },
      "id": "9b168a2f-c750-4902-a6f0-a5297cf81b55",
      "name": "Wait 2 Minutes",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        880,
        0
      ]
    },
    {
      "parameters": {
        "sendTo": "={{ $('Prepare Lead').item.json.email }}",
        "subject": "=Thanks {{ $('Prepare Lead').item.json.firstName }}, here's the next step",
        "emailType": "text",
        "message": "=Hi {{ $('Prepare Lead').item.json.firstName }},\n\nThanks for reaching out. The quickest way to get answers is a short call. Pick a time here:\n{{ $('Prepare Lead').item.json.bookingLink }}\n\nTalk soon,\nYOUR NAME",
        "options": {
          "appendAttribution": false
        }
      },
      "id": "4478576c-8e2d-4f41-b700-27cc982676d3",
      "name": "Welcome Email",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        1100,
        0
      ]
    },
    {
      "parameters": {
        "amount": 1,
        "unit": "hours"
      },
      "id": "38f6ab7f-b500-4746-b5a7-98daee1bf047",
      "name": "Wait 1 Hour",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1320,
        0
      ]
    },
    {
      "parameters": {
        "operation": "read",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Leads"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "email",
              "lookupValue": "={{ $('Prepare Lead').item.json.email }}"
            }
          ]
        },
        "options": {}
      },
      "id": "03438ce2-cd44-4ca9-9cfe-edcf0de98158",
      "name": "Check Booked (1 Hour)",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1540,
        0
      ],
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "059f79e1-4b7b-4d37-8f13-e0a92803e4e6",
              "leftValue": "={{ $json.booked }}",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "rightValue": "yes"
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "723f5984-c450-4ab5-8704-20e70565145f",
      "name": "Not Booked Yet (1 Hour)?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1760,
        0
      ]
    },
    {
      "parameters": {
        "from": "YOUR_TWILIO_NUMBER",
        "to": "={{ $('Prepare Lead').item.json.phone }}",
        "message": "=Just checking you saw this, {{ $('Prepare Lead').item.json.firstName }}. Book a quick call here: {{ $('Prepare Lead').item.json.bookingLink }} Reply STOP to opt out.",
        "options": {}
      },
      "id": "4e639a87-b7ad-45a4-a594-e1f7af34d27d",
      "name": "Follow Up SMS (1 Hour)",
      "type": "n8n-nodes-base.twilio",
      "typeVersion": 1,
      "position": [
        1980,
        0
      ]
    },
    {
      "parameters": {
        "amount": 1,
        "unit": "days"
      },
      "id": "5ead83b0-a0ef-4bbf-b355-1a07f3cb54d0",
      "name": "Wait 1 Day",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2200,
        0
      ]
    },
    {
      "parameters": {
        "operation": "read",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Leads"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "email",
              "lookupValue": "={{ $('Prepare Lead').item.json.email }}"
            }
          ]
        },
        "options": {}
      },
      "id": "686f2486-fe82-4fd4-a3d8-b23267f87c21",
      "name": "Check Booked (1 Day)",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        2420,
        0
      ],
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "f0dd6efe-9a7b-490b-b25c-a884804c1216",
              "leftValue": "={{ $json.booked }}",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "rightValue": "yes"
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "9d62725a-300a-4b8c-9431-9123f0972515",
      "name": "Not Booked Yet (1 Day)?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        2640,
        0
      ]
    },
    {
      "parameters": {
        "from": "YOUR_TWILIO_NUMBER",
        "to": "={{ $('Prepare Lead').item.json.phone }}",
        "message": "=Hi {{ $('Prepare Lead').item.json.firstName }}, still keen to help. Here's the link to lock in a time: {{ $('Prepare Lead').item.json.bookingLink }} Reply STOP to opt out.",
        "options": {}
      },
      "id": "33158dca-cc26-4fe1-ac4c-60c604480cbf",
      "name": "Follow Up SMS (1 Day)",
      "type": "n8n-nodes-base.twilio",
      "typeVersion": 1,
      "position": [
        2860,
        0
      ]
    },
    {
      "parameters": {
        "amount": 2,
        "unit": "days"
      },
      "id": "c967cc4b-a5fb-449f-bb38-fa395b098e33",
      "name": "Wait 3 Days",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        3080,
        0
      ]
    },
    {
      "parameters": {
        "operation": "read",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Leads"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "email",
              "lookupValue": "={{ $('Prepare Lead').item.json.email }}"
            }
          ]
        },
        "options": {}
      },
      "id": "975d6d49-9888-4f8c-9ed5-de4ac1aa8d03",
      "name": "Check Booked (3 Days)",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        3300,
        0
      ],
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "6d5ea774-ddca-4ead-a70d-d4dd0d0e3695",
              "leftValue": "={{ $json.booked }}",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "rightValue": "yes"
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "454cdece-61b7-4d31-92f7-f4599ab38595",
      "name": "Not Booked Yet (3 Days)?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        3520,
        0
      ]
    },
    {
      "parameters": {
        "from": "YOUR_TWILIO_NUMBER",
        "to": "={{ $('Prepare Lead').item.json.phone }}",
        "message": "=Last nudge from me, {{ $('Prepare Lead').item.json.firstName }}. If now's not the right time, no stress. Book here whenever you're ready: {{ $('Prepare Lead').item.json.bookingLink }} Reply STOP to opt out.",
        "options": {}
      },
      "id": "ac982eaf-f9cd-4a8b-8b3d-fede5489173d",
      "name": "Follow Up SMS (3 Days)",
      "type": "n8n-nodes-base.twilio",
      "typeVersion": 1,
      "position": [
        3740,
        0
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "lead-booked",
        "options": {}
      },
      "id": "0a364c66-38f3-487e-8414-f916a8aea0ba",
      "name": "Booking Made",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        380
      ],
      "webhookId": "02b2fe65-e271-442c-a049-1df0dca9fe39"
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Leads"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "email": "={{ ($json.body.payload?.email || $json.body.email || '').toLowerCase() }}",
            "booked": "yes"
          },
          "matchingColumns": [
            "email"
          ],
          "schema": [
            {
              "id": "email",
              "displayName": "email",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "booked",
              "displayName": "booked",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "id": "2c53ce62-64c5-4001-a85f-6fcfa444a898",
      "name": "Mark Booked",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        220,
        380
      ]
    }
  ],
  "connections": {
    "Welcome Email": {
      "main": [
        [
          {
            "node": "Wait 1 Hour",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 1 Hour": {
      "main": [
        [
          {
            "node": "Check Booked (1 Hour)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Booked (1 Hour)": {
      "main": [
        [
          {
            "node": "Not Booked Yet (1 Hour)?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Not Booked Yet (1 Hour)?": {
      "main": [
        [
          {
            "node": "Follow Up SMS (1 Hour)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Follow Up SMS (1 Hour)": {
      "main": [
        [
          {
            "node": "Wait 1 Day",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 1 Day": {
      "main": [
        [
          {
            "node": "Check Booked (1 Day)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Booked (1 Day)": {
      "main": [
        [
          {
            "node": "Not Booked Yet (1 Day)?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Not Booked Yet (1 Day)?": {
      "main": [
        [
          {
            "node": "Follow Up SMS (1 Day)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Follow Up SMS (1 Day)": {
      "main": [
        [
          {
            "node": "Wait 3 Days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 3 Days": {
      "main": [
        [
          {
            "node": "Check Booked (3 Days)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Booked (3 Days)": {
      "main": [
        [
          {
            "node": "Not Booked Yet (3 Days)?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Not Booked Yet (3 Days)?": {
      "main": [
        [
          {
            "node": "Follow Up SMS (3 Days)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New Lead": {
      "main": [
        [
          {
            "node": "Prepare Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Lead": {
      "main": [
        [
          {
            "node": "Save Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Lead": {
      "main": [
        [
          {
            "node": "Instant SMS",
            "type": "main",
            "index": 0
          },
          {
            "node": "Hot Lead?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Instant SMS": {
      "main": [
        [
          {
            "node": "Wait 2 Minutes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 2 Minutes": {
      "main": [
        [
          {
            "node": "Welcome Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Hot Lead?": {
      "main": [
        [
          {
            "node": "Alert Sales",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Booking Made": {
      "main": [
        [
          {
            "node": "Mark Booked",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "active": false
}