{
  "nodes": [
    {
      "id": "306d7ce6-9e54-49a0-8fbd-5ace7fab8d18",
      "name": "Webhook: SignSnap Home",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -944,
        -144
      ],
      "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
      ],
      "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": "user@example.com"
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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
      ],
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "d4e56171-d817-479c-802e-dd6c9131fff3",
      "name": "Wait 3 More Days",
      "type": "n8n-nodes-base.wait",
      "position": [
        1040,
        -144
      ],
      "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
      ],
      "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": "user@example.com"
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "cd4c3e51-cdb3-4869-9357-89fd3113130d",
      "name": "Wait 2 Final Days",
      "type": "n8n-nodes-base.wait",
      "position": [
        1696,
        -144
      ],
      "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": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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": "## \ud83d\udccb 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   - YOUR_EMAIL@DOMAIN.COM\n   - YOUR_TWILIO_PHONE_NUMBER\n   - YOUR_MONDAY_BOARD_ID\n\n4. Activate workflow\n5. Copy webhook URL\n6. Paste into SignSnapHome.com \u2192 Settings \u2192 Integrations\n\n\u2705 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": "## \ud83c\udfaf 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\u26a1 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": "## \u2699\ufe0f DATA PROCESSING\n\n**Extracts & enriches all data:**\n\n\u2705 Contact info\n\u2705 Property & visit details\n\u2705 Lead score (0-100)\n\u2705 Lead status (HOT/WARM/COLD)\n\u2705 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": "## \ud83c\udfaf HUBSPOT\n\nIf contact exists:\n\u2192 Updates information\n\u2192 Adds new visit to timeline\n\u2192 Updates lead score\n\nIf contact is new:\n\u2192 Creates new contact\n\u2192 Sets all properties\n\u2192 Marks as 'Lead'\n\n\u2728 Prevents duplicates!\n\n\ud83d\udd27 **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": "## \ud83d\udd11 FOLLOW UP BOSS\n\n**API Setup:**\n1. Login to Follow Up Boss\n2. Settings \u2192 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\ud83d\udcda 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": "## \ud83d\udccb 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 \u2192 Admin \u2192 API\n2. Generate token\n3. Save in n8n credentials\n\n\ud83d\udcda 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": "## \ud83c\udfaf SMART QUALIFICATION\n\n**Who gets full follow-up sequence?**\n\n\u2705 **QUALIFIED LEADS:**\n- Visitor said \"No\" to having agent\n- Visitor has agent BUT no buyer agreement\n\n\u274c **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": "## \ud83d\udcf1 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 \u2192 Get SID & Token\n2. Buy phone number (+15551234567)\n3. Configure n8n credential\n4. Update phone number in node\n\n**TCPA Compliance:**\n\u2705 Consent via open house sign-in\n\u2705 \"Reply STOP\" included\n\u2705 Activity logged automatically\n\u2705 Business relationship established\n\n**Cost:** ~$0.0079 per SMS\n\n**Message Logic:**\nDifferent text if no agent vs has agent\n\n\ud83d\udcda 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": "## \ud83d\udcca 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\ud83d\udca1 **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": "## \u23f1\ufe0f 7-DAY FOLLOW-UP SEQUENCE\n\n**Only for qualified leads:**\n\u2705 No agent OR has agent but no buyer agreement\n\n**Timeline:**\n\n\ud83d\udcc5 **Day 0** (Immediate):\n- \u2709\ufe0f Thank you email\n- \ud83d\udcca Logged to all 3 CRMs\n- \ud83d\udccb Master log updated\n\n\ud83d\udcc5 **Day 2** (48 hours):\n- \ud83d\udcf1 SMS follow-up\n- \ud83d\udcca Activity logged\n- Different message if no agent\n\n\ud83d\udcc5 **Day 5** (3 more days):\n- \u2709\ufe0f Market update email\n- \ud83d\udcca Activity logged\n- Includes consultation offer\n\n\ud83d\udcc5 **Day 7** (2 final days):\n- \ud83d\udccb Task created in HubSpot\n- \ud83c\udfaf Assigned to agent\n- \ud83d\udcca Activity logged\n- Priority based on lead score\n\n**Total Touchpoints:** 4\n**Manual Work:** Zero\n**Conversion Rate:** \ud83d\udcc8\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": "## \ud83d\udd27 TROUBLESHOOTING\n\n**Common Issues:**\n\n\ud83d\udd34 **\"Invalid email\"**\n\u2192 Check email format in SignSnap\n\u2192 Enable validation in form\n\n\ud83d\udd34 **\"Authentication failed\"**\n\u2192 Reconnect credentials\n\u2192 Check token expiration\n\u2192 Verify API permissions\n\n\ud83d\udd34 **\"Follow Up Boss 401 error\"**\n\u2192 Verify API key in credential\n\u2192 API key goes in Username field\n\u2192 Leave Password blank\n\n\ud83d\udd34 **\"Monday.com board not found\"**\n\u2192 Verify Board ID is correct\n\u2192 Check API token permissions\n\u2192 Ensure board exists\n\n\ud83d\udd34 **\"Twilio SMS failed\"**\n\u2192 Verify phone number format: +15551234567\n\u2192 Check Twilio account balance\n\u2192 Verify phone number is SMS-capable\n\n\ud83d\udd34 **\"Google Sheets permission denied\"**\n\u2192 Share sheet with service account\n\u2192 Or use OAuth2 credential\n\u2192 Verify Sheet ID is correct\n\n\ud83d\udd34 **\"Wait node not resuming\"**\n\u2192 Ensure workflow is ACTIVE\n\u2192 Check n8n queue is running\n\n**Testing Tips:**\n\u2192 Test each CRM individually\n\u2192 Check execution logs\n\u2192 Verify all credentials\n\u2192 Test with sample data\n\n**Need help?**\n\u2192 n8n community forum\n\u2192 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": "## \ud83d\udca1 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 \u2192 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 \u2192 Email \u2192 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
    }
  ],
  "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
          }
        ]
      ]
    }
  }
}