
Automate Real Estate Open House Follow-ups with SignSnapHome, HubSpot, and Twilio
Description
Categories
š¤ AI & Machine Learning
Nodes Used
n8n-nodes-base.ifn8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.coden8n-nodes-base.waitn8n-nodes-base.waitn8n-nodes-base.waitn8n-nodes-base.twilion8n-nodes-base.hubspotn8n-nodes-base.hubspot
PriceFree
Views6
Last Updated2/27/2026
workflow.json
{
"meta": {
"instanceId": "105694f414213a0eca348284005921253960bd1b0223294a4970522d0da53055"
},
"nodes": [
{
"id": "306d7ce6-9e54-49a0-8fbd-5ace7fab8d18",
"name": "Webhook: SignSnap Home",
"type": "n8n-nodes-base.webhook",
"position": [
-944,
-144
],
"webhookId": "89c63504-3651-4865-a2f3-b187cf22e255",
"parameters": {
"path": "signsnap-drip-crm",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "b84af1e1-e49f-4fa9-8ec2-1d3b6b9cbd81",
"name": "Parse SignSnap Data",
"type": "n8n-nodes-base.code",
"position": [
-736,
-144
],
"parameters": {
"jsCode": "const items = $input.all();\nconst guestData = items[0].json.body;\nconst email = guestData.email || null;\nconst firstName = guestData.first_name || '';\nconst lastName = guestData.last_name || '';\nconst phone = guestData.phone_number || null;\nconst propertyAddress = guestData.openHouseTitle || '';\nconst visitDate = guestData.submissionTimestamp || new Date().toISOString();\nconst hasAgent = guestData.are_you_currently_working_with_an_agent || 'Not specified';\nconst rating = guestData.what_did_you_rate_the_house || null;\nconst buyerAgreement = guestData.do_you_have_a_signed_buyer_agreement || null;\nlet leadScore = 50;\nif (hasAgent === 'No' || hasAgent === 'no') leadScore += 30;\nif (rating && parseInt(rating) >= 4) leadScore += 20;\nif (rating && parseInt(rating) <= 2) leadScore -= 20;\nif (buyerAgreement === 'No' || buyerAgreement === 'no') leadScore += 10;\nleadScore = Math.max(0, Math.min(100, leadScore));\nlet leadStatus = 'OPEN';\nif (leadScore >= 70) leadStatus = 'HOT';\nelse if (leadScore >= 50) leadStatus = 'WARM';\nelse if (leadScore < 40) leadStatus = 'COLD';\nconst qualifiesForFollowUp = (hasAgent.toLowerCase() === 'no' || (hasAgent.toLowerCase() === 'yes' && buyerAgreement && buyerAgreement.toLowerCase() === 'no'));\nconst notes = `Property: ${propertyAddress}\\nVisit: ${visitDate}\\nHas Agent: ${hasAgent}\\nLead Score: ${leadScore}\\nStatus: ${leadStatus}`;\nreturn [{json: {email, firstname: firstName, lastname: lastName, phone, propertyAddress: propertyAddress, visitDate, hasAgent, rating, buyerAgreement, leadScore, leadStatus, qualifiesForFollowUp, notes, lifecyclestage: 'lead', _raw: guestData}}];"
},
"typeVersion": 2
},
{
"id": "f8b4dbf0-111e-4324-bcdc-a168e15d79c3",
"name": "Has Email?",
"type": "n8n-nodes-base.if",
"position": [
-512,
-144
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1",
"operator": {
"type": "string",
"operation": "notEmpty"
},
"leftValue": "={{ $json.email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "37eea75a-1562-40b9-b5e8-b9f86b9dd804",
"name": "Send Thank You Email",
"type": "n8n-nodes-base.emailSend",
"position": [
-304,
-400
],
"webhookId": "726c63db-812e-43ff-9a85-a7055fe50ace",
"parameters": {
"html": "=Hi {{ $json.firstname }}!\n\nThank you for visiting {{ $json.propertyAddress }} today.\n\nBest regards,\nYour Real Estate Team",
"options": {},
"subject": "=Thank You for Visiting {{ $json.propertyAddress }}!",
"toEmail": "={{ $json.email }}",
"fromEmail": "[email protected]"
},
"typeVersion": 2.1
},
{
"id": "af2b0a12-b231-4e74-b988-51b3a909ab6d",
"name": "Log to Master Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
-304,
-144
],
"parameters": {
"columns": {
"value": {
"Email": "={{ $json.email }}",
"Phone": "={{ $json.phone }}",
"Property": "={{ $json.propertyAddress }}",
"Last Name": "={{ $json.lastname }}",
"Timestamp": "={{ $json.visitDate }}",
"First Name": "={{ $json.firstname }}",
"Lead Score": "={{ $json.leadScore }}",
"Lead Status": "={{ $json.leadStatus }}",
"Qualifies for Follow-up": "={{ $json.qualifiesForFollowUp ? 'YES' : 'NO' }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "First Name",
"type": "string",
"display": true,
"required": false,
"displayName": "First Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Last Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Property",
"type": "string",
"display": true,
"required": false,
"displayName": "Property",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Lead Score",
"type": "string",
"display": true,
"required": false,
"displayName": "Lead Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Lead Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Lead Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Has Agent",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Has Agent",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Buyer Agreement",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Buyer Agreement",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Qualifies for Follow-up",
"type": "string",
"display": true,
"required": false,
"displayName": "Qualifies for Follow-up",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Source",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 490817884,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg/edit#gid=490817884",
"cachedResultName": "SignSnap Log Test"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg/edit?usp=drivesdk",
"cachedResultName": "Agent Google Maps Scrape n8n"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "Rcg87wOoQqOfBbHi",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "0c10f03a-1bd4-42aa-b2cb-db1442bf603f",
"name": "Create/Update HubSpot Contact",
"type": "n8n-nodes-base.hubspot",
"position": [
-64,
-336
],
"parameters": {
"email": "={{ $('Parse SignSnap Data').item.json.email }}",
"options": {},
"authentication": "appToken",
"additionalFields": {
"lastName": "={{ $json['Last Name'] }}",
"firstName": "={{ $json['First Name'] }}",
"phoneNumber": "={{ $('Parse SignSnap Data').item.json.phone }}",
"membershipNote": "={{ $('Parse SignSnap Data').item.json.notes }}"
}
},
"credentials": {
"hubspotAppToken": {
"id": "XUCfDvhuGiD9t0za",
"name": "HubSpot account"
}
},
"typeVersion": 2.2
},
{
"id": "b7e1cdb0-507d-4ddd-8fb5-58f2b3fec618",
"name": "Sync to Follow Up Boss",
"type": "n8n-nodes-base.httpRequest",
"position": [
-64,
-144
],
"parameters": {
"url": "https://api.followupboss.com/v1/people",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "email",
"value": "={{ $json.email }}"
},
{
"name": "firstName",
"value": "={{ $json.firstname }}"
},
{
"name": "lastName",
"value": "={{ $json.lastname }}"
},
{
"name": "phones[0].value",
"value": "={{ $json.phone }}"
},
{
"name": "phones[0].type",
"value": "mobile"
},
{
"name": "source",
"value": "=SignSnap Home {{ json.propertyAddress }}"
},
{
"name": "notes",
"value": "={{ $json.notes }}"
}
]
},
"genericAuthType": "httpBasicAuth"
},
"typeVersion": 4.2
},
{
"id": "26b97759-43bd-4046-a118-8ea7df44471f",
"name": "Sync to Monday.com",
"type": "n8n-nodes-base.mondayCom",
"position": [
-64,
32
],
"parameters": {
"name": "={{ $json.firstname }} {{ $json.lastname }} - {{ $json.propertyAddress }}",
"boardId": "YOUR_MONDAY_BOARD_ID",
"groupId": "topics",
"resource": "boardItem",
"additionalFields": {}
},
"typeVersion": 1
},
{
"id": "c06c92c0-ddf0-490a-b846-b8ba32ba51fe",
"name": "Qualifies for Follow-up?",
"type": "n8n-nodes-base.if",
"position": [
160,
-144
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1",
"operator": {
"type": "boolean",
"operation": "true"
},
"leftValue": "={{ $('Parse SignSnap Data').item.json.qualifiesForFollowUp }}",
"rightValue": true
}
]
}
},
"typeVersion": 2.2
},
{
"id": "819cec37-f9d3-4362-81d9-9e7153483b2a",
"name": "Wait 2 Days",
"type": "n8n-nodes-base.wait",
"position": [
384,
-144
],
"webhookId": "d0b0689b-eac5-44db-90b6-d0195c78b84c",
"parameters": {
"amount": 2
},
"typeVersion": 1.1,
"alwaysOutputData": true
},
{
"id": "7df4434d-196d-465f-8f84-2c790e9fbe23",
"name": "Send SMS Follow-up (Day 2)",
"type": "n8n-nodes-base.twilio",
"position": [
592,
-144
],
"parameters": {
"to": "={{ $('Parse SignSnap Data').item.json.phone }}",
"from": "YOUR_TWILIO_PHONE_NUMBER",
"message": "=Hi {{ $('Parse SignSnap Data').item.json.firstname }}! Great meeting you at {{ $('Parse SignSnap Data').item.json.propertyAddress }}. Any questions? Reply to this text!\n\nReply STOP to unsubscribe",
"options": {}
},
"typeVersion": 1
},
{
"id": "3369be2a-2dd5-489c-9b75-90827583c441",
"name": "Log SMS Activity",
"type": "n8n-nodes-base.googleSheets",
"position": [
816,
-144
],
"parameters": {
"columns": {
"value": {
"Notes": "={{ $('Parse SignSnap Data').item.json.notes }}",
"Message": "Day 2 SMS",
"Property": "={{ $('Parse SignSnap Data').item.json.propertyAddress }}",
"Timestamp": "={{ $now.toISO() }}",
"Contact Name": "={{ $('Parse SignSnap Data').item.json.firstname }} {{ $('Parse SignSnap Data').item.json.lastname }}",
"Activity Type": "SMS",
"Contact Email": "={{ $('Parse SignSnap Data').item.json.email }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contact Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Contact Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contact Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Contact Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Activity Type",
"type": "string",
"display": true,
"required": false,
"displayName": "Activity Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Message",
"type": "string",
"display": true,
"required": false,
"displayName": "Message",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Property",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Property",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Success",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Success",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 288628652,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg/edit#gid=288628652",
"cachedResultName": "SMS SignSnap Log Test"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg/edit?usp=drivesdk",
"cachedResultName": "Agent Google Maps Scrape n8n"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "Rcg87wOoQqOfBbHi",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "d4e56171-d817-479c-802e-dd6c9131fff3",
"name": "Wait 3 More Days",
"type": "n8n-nodes-base.wait",
"position": [
1040,
-144
],
"webhookId": "5f4dbdfe-4e5d-4eeb-8597-8fc7b8d1c574",
"parameters": {
"unit": "days",
"amount": 3
},
"typeVersion": 1.1
},
{
"id": "3540a701-4bdb-4e0f-ba3f-9e793294c47e",
"name": "Send Market Update Email (Day 5)",
"type": "n8n-nodes-base.emailSend",
"position": [
1264,
-144
],
"webhookId": "8ee59399-1d42-4990-afb6-32f77ea0ea2e",
"parameters": {
"html": "=Hi {{ $('Parse SignSnap Data').item.json.firstname }},\n\nYOUR_MESSAGE_HERE.\n\nBest regards\nYOUR_NAME_HERE",
"options": {},
"subject": "=Market Update",
"toEmail": "={{ $json.email }}",
"fromEmail": "[email protected]"
},
"typeVersion": 2.1
},
{
"id": "0d1452f4-6e0c-4e1b-b99b-847fc966afc0",
"name": "Log Email Activity",
"type": "n8n-nodes-base.googleSheets",
"position": [
1472,
-144
],
"parameters": {
"columns": {
"value": {
"Notes": "={{ $('Parse SignSnap Data').item.json.notes }}",
"Message": "Day 5 Email",
"Property": "={{ $('Parse SignSnap Data').item.json.propertyAddress }}",
"Timestamp": "={{ $now.toISO() }}",
"Contact Name": "={{ $('Parse SignSnap Data').item.json.firstname }} {{ $('Parse SignSnap Data').item.json.lastname }}",
"Activity Type": "Email",
"Contact Email": "={{ $json.email }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contact Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Contact Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contact Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Contact Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Activity Type",
"type": "string",
"display": true,
"required": false,
"displayName": "Activity Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Message",
"type": "string",
"display": true,
"required": false,
"displayName": "Message",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Property",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Property",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Success",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Success",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 288628652,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg/edit#gid=288628652",
"cachedResultName": "SMS SignSnap Log Test"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg/edit?usp=drivesdk",
"cachedResultName": "Agent Google Maps Scrape n8n"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "Rcg87wOoQqOfBbHi",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "cd4c3e51-cdb3-4869-9357-89fd3113130d",
"name": "Wait 2 Final Days",
"type": "n8n-nodes-base.wait",
"position": [
1696,
-144
],
"webhookId": "b62e73a2-fb7e-477d-a553-ff5c140c8924",
"parameters": {
"unit": "days",
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "4bb2f67f-a640-4daf-850e-0c6ac7c206a1",
"name": "Create Follow-up Task (Day 7)",
"type": "n8n-nodes-base.hubspot",
"position": [
1920,
-144
],
"parameters": {
"resource": "task",
"authentication": "appToken"
},
"credentials": {
"hubspotAppToken": {
"id": "XUCfDvhuGiD9t0za",
"name": "HubSpot account"
}
},
"typeVersion": 2.2
},
{
"id": "5ca2bf5a-57a8-4972-9300-10b95c5d4a86",
"name": "Log Missing Email",
"type": "n8n-nodes-base.set",
"position": [
-304,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "error_reason",
"type": "string",
"value": "No email"
},
{
"id": "2",
"name": "guest_name",
"type": "string",
"value": "={{ $json.firstname }} {{ $json.lastname }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "23890819-d826-4c9a-9391-3755eada8049",
"name": "Log to Error Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
-64,
320
],
"parameters": {
"columns": {
"value": {
"Timestamp": "={{ $now.toISO() }}",
"Guest Name": "={{ $json.guest_name }}",
"Error Reason": "={{ $json.error_reason }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"mode": "list",
"value": "Errors"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1xWqUC4fGVpjB7c2rYnosAn1mKShs3SKizgA-M8P9tZg/edit?usp=drivesdk",
"cachedResultName": "Agent Google Maps Scrape n8n"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "Rcg87wOoQqOfBbHi",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "5710d148-ccb0-4324-9f41-3de8a547a8f7",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1504,
-928
],
"parameters": {
"color": 5,
"width": 352,
"height": 736,
"content": "## š SETUP INSTRUCTIONS\n\n**Enhanced Multi-CRM + Auto Follow-up Workflow**\n\n### Quick Setup:\n1. **Configure Credentials:**\n - HubSpot OAuth2 or API Token\n - Follow Up Boss API Key\n - Monday.com API Token\n - Twilio Account (SID + Auth Token)\n - SMTP for emails\n - Google Sheets OAuth2\n\n2. **Create Google Sheet with 3 tabs:**\n - \"Lead Master Log\"\n - \"Follow-up Activity\"\n - \"Errors\"\n\n3. **Update placeholders in nodes:**\n - YOUR_GOOGLE_SHEET_ID_HERE\n - [email protected]\n - YOUR_TWILIO_PHONE_NUMBER\n - YOUR_MONDAY_BOARD_ID\n\n4. Activate workflow\n5. Copy webhook URL\n6. Paste into SignSnapHome.com ā Settings ā Integrations\n\nā
Done! Leads auto-sync to 3 CRMs with 7-day follow-up!"
},
"typeVersion": 1
},
{
"id": "13fe6aaa-dc6a-4495-ae62-504d3515857f",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1072,
-640
],
"parameters": {
"width": 224,
"height": 384,
"content": "## šÆ WEBHOOK TRIGGER\n\n**Receives POST data from SignSnap Home**\n\nURL Format:\n`https://your-n8n.com/webhook/signsnap-drip-crm`\n\nAdd this URL to SignSnapHome.com automation settings.\n\nā” Triggers on every open house sign-in!"
},
"typeVersion": 1
},
{
"id": "3158bc54-e489-4466-af5b-ce0bc9bb0670",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-784,
-768
],
"parameters": {
"height": 496,
"content": "## āļø DATA PROCESSING\n\n**Extracts & enriches all data:**\n\nā
Contact info\nā
Property & visit details\nā
Lead score (0-100)\nā
Lead status (HOT/WARM/COLD)\nā
Follow-up qualification\n\n**Lead Scoring:**\n- Base: 50 points\n- No agent: +30\n- Rating 4-5: +20\n- Rating 1-2: -20\n- No buyer agreement: +10\n\n**Follow-up Logic:**\nQualifies if NO agent OR (has agent BUT no agreement)"
},
"typeVersion": 1
},
{
"id": "5a6fd21b-1bc1-45b4-ade3-af26679eb627",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-528,
-1456
],
"parameters": {
"color": 4,
"height": 368,
"content": "## šÆ HUBSPOT\n\nIf contact exists:\nā Updates information\nā Adds new visit to timeline\nā Updates lead score\n\nIf contact is new:\nā Creates new contact\nā Sets all properties\nā Marks as 'Lead'\n\n⨠Prevents duplicates!\n\nš§ **Setup:**\nConfigure OAuth2 or API Token in credentials"
},
"typeVersion": 1
},
{
"id": "f6a03f6a-df91-4fc8-8b99-17fd12715a04",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
-1456
],
"parameters": {
"color": 4,
"height": 608,
"content": "## š FOLLOW UP BOSS\n\n**API Setup:**\n1. Login to Follow Up Boss\n2. Settings ā API\n3. Generate API Key\n4. Copy key\n\n**n8n Credential:**\n1. Click credential in this node\n2. Create \"HTTP Basic Auth\"\n3. Username: Your API Key\n4. Password: Leave blank\n\n**Optional Custom Fields:**\nAdd in FUB Settings first:\n- property_visited\n- lead_score\n- visit_date\n\nThen add to body parameters.\n\nš https://docs.followupboss.com"
},
"typeVersion": 1
},
{
"id": "c1454018-03d8-463f-870a-27595fda1d8e",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
-1456
],
"parameters": {
"color": 4,
"height": 688,
"content": "## š MONDAY.COM\n\n**Board Setup:**\n1. Create board: \"Open House Leads\"\n2. Add columns:\n - Name (text)\n - Email (email)\n - Phone (phone)\n - Property (text)\n - Lead Status (status)\n - Lead Score (numbers)\n - Visit Date (date)\n\n**Get Board ID:**\n1. Open board URL\n2. Look for: monday.com/boards/1234567890\n3. Copy the number (1234567890)\n4. Paste into this node\n\n**Get API Token:**\n1. Avatar ā Admin ā API\n2. Generate token\n3. Save in n8n credentials\n\nš https://developer.monday.com"
},
"typeVersion": 1
},
{
"id": "2cad509e-ec9a-4972-b090-894fa95a410a",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-736
],
"parameters": {
"color": 5,
"width": 336,
"height": 496,
"content": "## šÆ SMART QUALIFICATION\n\n**Who gets full follow-up sequence?**\n\nā
**QUALIFIED LEADS:**\n- Visitor said \"No\" to having agent\n- Visitor has agent BUT no buyer agreement\n\nā **BASIC ONLY:**\n- Has agent + signed buyer agreement\n- (Gets email + CRM sync, no SMS/sequence)\n\n**Why this matters:**\n- Respects existing relationships\n- Focuses energy on available buyers\n- Compliance with agent ethics\n- Higher conversion on qualified leads\n\n**TRUE Path:** Full 7-day sequence\n**FALSE Path:** Workflow ends (already in CRMs)"
},
"typeVersion": 1
},
{
"id": "ea992704-fe3a-4830-9cca-e0d716f19bc9",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
-576
],
"parameters": {
"color": 4,
"height": 128,
"content": "## See Above for Individual setups\nDelete/ disconnect the nodes you dont use\n"
},
"typeVersion": 1
},
{
"id": "c97076de-ae72-418e-bbaa-fb5b6d723c8f",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
-768
],
"parameters": {
"width": 352,
"height": 528,
"content": "## š± TWILIO SMS (DAY 2)\n\n**Requirements:**\n- Twilio account\n- SMS-enabled phone number\n- Account SID + Auth Token\n\n**Setup:**\n1. Console ā Get SID & Token\n2. Buy phone number (+15551234567)\n3. Configure n8n credential\n4. Update phone number in node\n\n**TCPA Compliance:**\nā
Consent via open house sign-in\nā
\"Reply STOP\" included\nā
Activity logged automatically\nā
Business relationship established\n\n**Cost:** ~$0.0079 per SMS\n\n**Message Logic:**\nDifferent text if no agent vs has agent\n\nš https://www.twilio.com/docs/sms"
},
"typeVersion": 1
},
{
"id": "5f585c80-1984-4505-a408-08f697b9ef69",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
272,
48
],
"parameters": {
"color": 5,
"width": 720,
"height": 1008,
"content": "## š GOOGLE SHEETS STRUCTURE + Setup\n\n**Create ONE Google Sheet with 3 tabs:**\n\n### Tab 1: \"Lead Master Log\"\n**Column Headers (Row 1):**\nTimestamp | First Name | Last Name | Email | Phone | Property | Lead Score | Lead Status | Has Agent | Buyer Agreement | Qualifies for Follow-up | Source\nCOPY/PASTE:\nTimestamp\tFirst Name\tLast Name\tEmail\tPhone\tProperty\tLead Score\tLead Status\tHas Agent\tBuyer Agreement\tQualifies for Follow-up\tSource\n\n### Tab 2: \"Follow-up Activity\"\n**Column Headers (Row 1):**\nTimestamp | Contact Email | Contact Name | Activity Type | Message | Property | Success | Notes\n\nCOPY/PASTE:\nTimestamp\tContact Email\tContact Name\tActivity Type\tMessage\tProperty\tSuccess\tNotes\n\n### Tab 3: \"Errors\"\n**Column Headers (Row 1):**\nTimestamp | Guest Name | Property | Phone | Error Reason\n\nCOPY/PASTE:\n\nTimestamp\tGuest Name\tProperty\tPhone\tError Reason\n\n\n**TWO WAYS TO CONNECT:**\n\n### Option 1: Manual Selection (EASIER)\n1. Configure Google Sheets OAuth2 credential in n8n\n2. In each Google Sheets node, click \"Document\" dropdown\n3. Select your sheet from the list\n4. Click \"Sheet\" dropdown and select tab name\n5. Done! No IDs needed.\n\n### Option 2: Direct ID Method\n1. Open your Google Sheet\n2. Copy URL: `docs.google.com/spreadsheets/d/`**`SHEET_ID_HERE`**`/edit`\n3. Copy the ID between `/d/` and `/edit`\n4. Paste into \"Document ID\" field in nodes\n5. Type tab names manually\n\nš” **Recommended:** Use Option 1 (Manual Selection) - it's easier and less error-prone!"
},
"typeVersion": 1
},
{
"id": "f28a2b08-52e1-43ab-bc68-c86f6e54ef15",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
1040,
-1040
],
"parameters": {
"color": 4,
"width": 448,
"height": 784,
"content": "## ā±ļø 7-DAY FOLLOW-UP SEQUENCE\n\n**Only for qualified leads:**\nā
No agent OR has agent but no buyer agreement\n\n**Timeline:**\n\nš
**Day 0** (Immediate):\n- āļø Thank you email\n- š Logged to all 3 CRMs\n- š Master log updated\n\nš
**Day 2** (48 hours):\n- š± SMS follow-up\n- š Activity logged\n- Different message if no agent\n\nš
**Day 5** (3 more days):\n- āļø Market update email\n- š Activity logged\n- Includes consultation offer\n\nš
**Day 7** (2 final days):\n- š Task created in HubSpot\n- šÆ Assigned to agent\n- š Activity logged\n- Priority based on lead score\n\n**Total Touchpoints:** 4\n**Manual Work:** Zero\n**Conversion Rate:** š\n\n**Non-qualified leads get:**\n- Thank you email only\n- CRM sync\n- No automated follow-up"
},
"typeVersion": 1
},
{
"id": "9138414d-76a4-4d31-9c18-d91ba2f67404",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1024,
96
],
"parameters": {
"color": 3,
"width": 368,
"height": 928,
"content": "## š§ TROUBLESHOOTING\n\n**Common Issues:**\n\nš“ **\"Invalid email\"**\nā Check email format in SignSnap\nā Enable validation in form\n\nš“ **\"Authentication failed\"**\nā Reconnect credentials\nā Check token expiration\nā Verify API permissions\n\nš“ **\"Follow Up Boss 401 error\"**\nā Verify API key in credential\nā API key goes in Username field\nā Leave Password blank\n\nš“ **\"Monday.com board not found\"**\nā Verify Board ID is correct\nā Check API token permissions\nā Ensure board exists\n\nš“ **\"Twilio SMS failed\"**\nā Verify phone number format: +15551234567\nā Check Twilio account balance\nā Verify phone number is SMS-capable\n\nš“ **\"Google Sheets permission denied\"**\nā Share sheet with service account\nā Or use OAuth2 credential\nā Verify Sheet ID is correct\n\nš“ **\"Wait node not resuming\"**\nā Ensure workflow is ACTIVE\nā Check n8n queue is running\n\n**Testing Tips:**\nā Test each CRM individually\nā Check execution logs\nā Verify all credentials\nā Test with sample data\n\n**Need help?**\nā n8n community forum\nā CRM API documentation"
},
"typeVersion": 1
},
{
"id": "10db297e-9808-48bf-a230-eba11e372253",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
-64
],
"parameters": {
"color": 5,
"width": 400,
"height": 880,
"content": "## š” PRO TIPS & CUSTOMIZATION\n\n**Easy Customizations:**\n\n**1. Add More CRMs**\n- Salesforce: Use HTTP Request node\n- Pipedrive: Native node available\n- Zoho CRM: Native node available\n\n**2. Customize Email Content**\n- Edit email nodes directly\n- Add property photos\n- Include market stats\n- Add agent bio/headshot\n\n**3. Adjust Timing**\n- Change Wait node durations\n- Day 2 SMS ā Day 1?\n- Test what works best\n\n**4. Lead Scoring Adjustments**\n- Modify scoring in Parse node\n- Add new criteria\n- Change threshold values\n\n**5. Add More Touchpoints**\n- Day 10: Final check-in\n- Day 30: Monthly market update\n- Clone Wait ā Email ā Log pattern\n\n**6. Error Handling**\n- Add Slack notifications\n- Email alerts for failures\n- Retry logic for API errors\n\n**7. Reporting Dashboard**\n- Connect Google Sheets to Data Studio\n- Create conversion funnel reports\n- Track touchpoint effectiveness"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Has Email?": {
"main": [
[
{
"node": "Log to Master Sheet",
"type": "main",
"index": 0
},
{
"node": "Send Thank You Email",
"type": "main",
"index": 0
}
],
[
{
"node": "Log Missing Email",
"type": "main",
"index": 0
}
]
]
},
"Wait 2 Days": {
"main": [
[
{
"node": "Send SMS Follow-up (Day 2)",
"type": "main",
"index": 0
}
]
]
},
"Log SMS Activity": {
"main": [
[
{
"node": "Wait 3 More Days",
"type": "main",
"index": 0
}
]
]
},
"Wait 3 More Days": {
"main": [
[
{
"node": "Send Market Update Email (Day 5)",
"type": "main",
"index": 0
}
]
]
},
"Log Missing Email": {
"main": [
[
{
"node": "Log to Error Sheet",
"type": "main",
"index": 0
}
]
]
},
"Wait 2 Final Days": {
"main": [
[
{
"node": "Create Follow-up Task (Day 7)",
"type": "main",
"index": 0
}
]
]
},
"Log Email Activity": {
"main": [
[
{
"node": "Wait 2 Final Days",
"type": "main",
"index": 0
}
]
]
},
"Sync to Monday.com": {
"main": [
[
{
"node": "Qualifies for Follow-up?",
"type": "main",
"index": 0
}
]
]
},
"Log to Master Sheet": {
"main": [
[
{
"node": "Create/Update HubSpot Contact",
"type": "main",
"index": 0
},
{
"node": "Sync to Follow Up Boss",
"type": "main",
"index": 0
},
{
"node": "Sync to Monday.com",
"type": "main",
"index": 0
}
]
]
},
"Parse SignSnap Data": {
"main": [
[
{
"node": "Has Email?",
"type": "main",
"index": 0
}
]
]
},
"Sync to Follow Up Boss": {
"main": [
[
{
"node": "Qualifies for Follow-up?",
"type": "main",
"index": 0
}
]
]
},
"Webhook: SignSnap Home": {
"main": [
[
{
"node": "Parse SignSnap Data",
"type": "main",
"index": 0
}
]
]
},
"Qualifies for Follow-up?": {
"main": [
[
{
"node": "Wait 2 Days",
"type": "main",
"index": 0
}
],
[]
]
},
"Send SMS Follow-up (Day 2)": {
"main": [
[
{
"node": "Log SMS Activity",
"type": "main",
"index": 0
}
]
]
},
"Create/Update HubSpot Contact": {
"main": [
[
{
"node": "Qualifies for Follow-up?",
"type": "main",
"index": 0
}
]
]
},
"Send Market Update Email (Day 5)": {
"main": [
[
{
"node": "Log Email Activity",
"type": "main",
"index": 0
}
]
]
}
}
}