{
  "id": "70bs78UVmHAeCTYP",
  "name": "RSVP Event Lead Scorer",
  "tags": [],
  "nodes": [
    {
      "id": "89e28647-2af7-4997-abac-5fede309a8a5",
      "name": "Set Workflow Variables",
      "type": "n8n-nodes-base.set",
      "position": [
        -768,
        -16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "hubspotContactUrl",
              "type": "string",
              "value": "https://app.hubspot.com/contacts/<__PLACEHOLDER_VALUE__HubSpot Portal ID__>/contact/"
            },
            {
              "id": "id-2",
              "name": "qualifiedLeadThreshold",
              "type": "number",
              "value": 70
            },
            {
              "id": "id-3",
              "name": "slackSalesChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Slack Sales Channel ID (e.g., C1234567890)__>"
            },
            {
              "id": "id-4",
              "name": "slackMarketingChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Slack Marketing Channel ID (e.g., C0987654321)__>"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "bdb1deba-40bd-474a-ac1c-cd5b86f507cd",
      "name": "If Email Is Valid",
      "type": "n8n-nodes-base.if",
      "position": [
        -416,
        -16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $('Set Workflow Variables').item.json.email }}"
            },
            {
              "id": "id-2",
              "operator": {
                "type": "string",
                "operation": "regex"
              },
              "leftValue": "={{ $('Set Workflow Variables').item.json.email }}",
              "rightValue": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "61fb65be-cf1f-4ea3-a65b-e92d0c383eb5",
      "name": "Log Invalid Submissions to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -416,
        144
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $json.email }}",
            "company": "={{ $json.company }}",
            "country": "={{ $json.country }}",
            "jobTitle": "={{ $json.jobTitle }}",
            "lastName": "={{ $json.lastName }}",
            "firstName": "={{ $json.firstName }}",
            "timestamp": "={{ new Date().toISOString() }}",
            "utmSource": "={{ $json.utmSource }}"
          },
          "schema": [
            {
              "id": "firstName",
              "required": false,
              "displayName": "firstName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "lastName",
              "required": false,
              "displayName": "lastName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "required": false,
              "displayName": "email",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "jobTitle",
              "required": false,
              "displayName": "jobTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "country",
              "required": false,
              "displayName": "country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "utmSource",
              "required": false,
              "displayName": "utmSource",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "timestamp",
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "email"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Invalid Submissions"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "<__PLACEHOLDER_VALUE__Google Sheet ID for Invalid Submissions__>"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "5981cc68-2e39-45e7-8be7-55962409b84d",
      "name": "Score Lead with GPT-4o-mini",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -96,
        -16
      ],
      "parameters": {
        "modelId": {
          "mode": "id",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "content": "=Lead Data:\n- Name: {{ $json.firstName }} {{ $json.lastName }}\n- Email: {{ $json.email }}\n- Company: {{ $json.company }}\n- Job Title: {{ $json.jobTitle }}\n- Country: {{ $json.country }}\n- UTM Source: {{ $json.utmSource }}\n\nAnalyze this lead and provide a JSON response with:\n- fitLevel: \"High\", \"Medium\", or \"Low\" (ICP fit for B2B events)\n- leadScore: numeric value from 0-100\n- nextAction: suggested next step (e.g., \"Sales call\", \"Nurture\", \"Invite to webinar\")\n- reason: brief explanation for the score\n\nReturn ONLY valid JSON, no markdown formatting."
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "0a198e60-5ec6-4cb5-a71e-c2da2015ab8a",
      "name": "Parse AI Response",
      "type": "n8n-nodes-base.set",
      "position": [
        160,
        -16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "aiResponse",
              "type": "object",
              "value": "={{ JSON.parse($json.message.content) }}"
            },
            {
              "id": "id-2",
              "name": "fitLevel",
              "type": "string",
              "value": "={{ JSON.parse($json.message.content).fitLevel }}"
            },
            {
              "id": "id-3",
              "name": "leadScore",
              "type": "number",
              "value": "={{ JSON.parse($json.message.content).leadScore }}"
            },
            {
              "id": "id-4",
              "name": "nextAction",
              "type": "string",
              "value": "={{ JSON.parse($json.message.content).nextAction }}"
            },
            {
              "id": "id-5",
              "name": "reason",
              "type": "string",
              "value": "={{ JSON.parse($json.message.content).reason }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "a66431ee-7bab-4f55-84a9-8a4387cac8b2",
      "name": "If Lead Score \u2265 70",
      "type": "n8n-nodes-base.if",
      "position": [
        416,
        -16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $('Parse AI Response').item.json.leadScore }}",
              "rightValue": "70"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1f911ba6-c1e0-4e52-bd56-b4460f8a1f41",
      "name": "Upsert Contact in HubSpot (Qualified)",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        752,
        -16
      ],
      "parameters": {
        "email": "={{ $json.email }}",
        "options": {},
        "additionalFields": {
          "country": "={{ $json.country }}",
          "jobTitle": "={{ $json.jobTitle }}",
          "lastName": "={{ $json.lastName }}",
          "firstName": "={{ $json.firstName }}",
          "companyName": "={{ $json.company }}",
          "customPropertiesUi": {
            "customPropertiesValues": [
              {
                "value": "={{ $json.fitLevel }}",
                "property": "ai_fit_level"
              },
              {
                "value": "={{ $json.leadScore }}",
                "property": "ai_lead_score"
              },
              {
                "value": "={{ $json.nextAction }}",
                "property": "ai_next_action"
              },
              {
                "value": "={{ $json.reason }}",
                "property": "ai_reason"
              },
              {
                "value": "={{ $json.utmSource }}",
                "property": "utm_source"
              }
            ]
          }
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "c621c81d-2bb5-476c-8faa-9e7966d8658d",
      "name": "Upsert Contact in HubSpot (Nurture)",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        752,
        144
      ],
      "parameters": {
        "email": "={{ $json.email }}",
        "options": {},
        "additionalFields": {
          "country": "={{ $json.country }}",
          "jobTitle": "={{ $json.jobTitle }}",
          "lastName": "={{ $json.lastName }}",
          "firstName": "={{ $json.firstName }}",
          "companyName": "={{ $json.company }}",
          "customPropertiesUi": {
            "customPropertiesValues": [
              {
                "value": "={{ $json.fitLevel }}",
                "property": "ai_fit_level"
              },
              {
                "value": "={{ $json.leadScore }}",
                "property": "ai_lead_score"
              },
              {
                "value": "={{ $json.nextAction }}",
                "property": "ai_next_action"
              },
              {
                "value": "={{ $json.reason }}",
                "property": "ai_reason"
              },
              {
                "value": "={{ $json.utmSource }}",
                "property": "utm_source"
              }
            ]
          }
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d5d82e6b-a2b4-48cd-9157-360bbbb3c7c3",
      "name": "Alert Sales via Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1072,
        -16
      ],
      "parameters": {
        "text": "=\ud83d\udd25 *Qualified Lead Alert*\n\n*Name:* {{ $json.firstName }} {{ $json.lastName }}\n*Company:* {{ $json.company }}\n*Job Title:* {{ $json.jobTitle }}\n*Country:* {{ $json.country }}\n\n*Lead Score:* {{ $json.leadScore }}/100\n*ICP Fit:* {{ $json.fitLevel }}\n*Next Action:* {{ $json.nextAction }}\n*Reason:* {{ $json.reason }}\n\n<{{ $('Set Workflow Variables').first().json.hubspotContactUrl }}{{ $json.id }}|View in HubSpot>",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Set Workflow Variables').first().json.slackSalesChannel }}"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "69baa147-51ce-489a-932f-c1ec9aa0b713",
      "name": "Alert Marketing via Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1072,
        176
      ],
      "parameters": {
        "text": "=\ud83d\udccb *New Nurture Lead*\n\n*Name:* {{ $json.firstName }} {{ $json.lastName }}\n*Company:* {{ $json.company }}\n*Job Title:* {{ $json.jobTitle }}\n\n*Lead Score:* {{ $json.leadScore }}/100\n*Next Action:* {{ $json.nextAction }}\n\n<{{ $('Set Workflow Variables').first().json.hubspotContactUrl }}{{ $json.id }}|View in HubSpot>",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Set Workflow Variables').first().json.slackMarketingChannel }}"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "b4b34fdb-879f-4b32-8efb-9a3e38fb1711",
      "name": "Log to Event RSVP AI Leads Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1392,
        -16
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $json.email }}",
            "reason": "={{ $json.reason }}",
            "company": "={{ $json.company }}",
            "country": "={{ $json.country }}",
            "fitLevel": "={{ $json.fitLevel }}",
            "jobTitle": "={{ $json.jobTitle }}",
            "lastName": "={{ $json.lastName }}",
            "firstName": "={{ $json.firstName }}",
            "leadScore": "={{ $json.leadScore }}",
            "timestamp": "={{ new Date().toISOString() }}",
            "utmSource": "={{ $json.utmSource }}",
            "nextAction": "={{ $json.nextAction }}"
          },
          "schema": [
            {
              "id": "firstName",
              "required": false,
              "displayName": "firstName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "lastName",
              "required": false,
              "displayName": "lastName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "required": false,
              "displayName": "email",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "jobTitle",
              "required": false,
              "displayName": "jobTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "country",
              "required": false,
              "displayName": "country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "utmSource",
              "required": false,
              "displayName": "utmSource",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "leadScore",
              "required": false,
              "displayName": "leadScore",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "fitLevel",
              "required": false,
              "displayName": "fitLevel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "nextAction",
              "required": false,
              "displayName": "nextAction",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reason",
              "required": false,
              "displayName": "reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "timestamp",
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "email"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Event RSVP AI Leads"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "<__PLACEHOLDER_VALUE__Google Sheet ID for Event RSVP AI Leads__>"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "74b4dd68-f260-486e-a4cc-47d029b6b753",
      "name": "Contact: Braia Labs",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        -912
      ],
      "parameters": {
        "width": 540,
        "height": 1200,
        "content": "## Was this helpful? Get in touch! \n\n[![clic](https://vptkuqoipqbebipqjnqw.supabase.co/storage/v1/object/public/Milo%20Bravo/seeAxWUupcOOXY5tntexZ_video.gif)](https://tally.so/r/EkKGgB)\n\nI really hope this automation helped you. Your feedback is incredibly valuable and helps me create better resources for business and the n8n community.\n\n### **Have Feedback, a Question, or a Project Idea?**\n\nI've streamlined the way we connect. It all starts with one simple form that takes less than 10 seconds. After that, you'll chat with my AI assistant who will gather the key details and pass them directly on to me.\n\n####  **[Start the conversation here](https://tally.so/r/EkKGgB)** \n\n*   **Give Feedback:** Share your thoughts on this template\u2014whether you found a typo, encountered an unexpected error, have a suggestion, or just want to say thanks!\n\n*   **n8n Consulting:** Have a complex business challenge or need a custom workflow built from scratch? Let's partner on a powerful automation solution tailored to your specific needs.\n\n*   **Join your team:** We can work together to get you launched with confidence. \n\n---\n\nHappy Automating!\n[Milo Bravo](https://linkedin.com/in/MiloBravo/) | BRaiA Labs | Automation & BI Systems + AI Integration\n"
      },
      "typeVersion": 1
    },
    {
      "id": "033d3a92-6cc2-4067-9bae-3424f5d413fe",
      "name": "Section 2: Validate Email",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        -224
      ],
      "parameters": {
        "color": 3,
        "width": 412,
        "height": 520,
        "content": "## 2. Validate Email\n\nChecks if the email is present and matches a valid format. Invalid submissions are logged to a separate Google Sheets tab for manual review."
      },
      "typeVersion": 1
    },
    {
      "id": "55e5f10c-cf08-4b42-b831-5a49a1507102",
      "name": "Section 3: AI Lead Scoring",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        -224
      ],
      "parameters": {
        "color": 2,
        "width": 440,
        "height": 520,
        "content": "## 3. AI Lead Scoring\n\nGPT-4o-mini analyzes the lead profile and returns a structured JSON response with:\n- **fitLevel:** High / Medium / Low\n- **leadScore:** 0\u2013100\n- **nextAction:** Recommended next step\n- **reason:** Brief explanation"
      },
      "typeVersion": 1
    },
    {
      "id": "b67bea4f-4e00-43f6-a184-d3b4a6e9427b",
      "name": "Section 4: Route by Score",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        -224
      ],
      "parameters": {
        "color": 4,
        "width": 284,
        "height": 520,
        "content": "## 4. Route by Score\n\nSplits the pipeline based on AI lead score:\n- **Score \u2265 70** \u2192 Qualified lead path (top)\n- **Score < 70** \u2192 Nurture lead path (bottom)"
      },
      "typeVersion": 1
    },
    {
      "id": "167f6b24-3acb-4213-bb7f-046026b0bd3e",
      "name": "Section 5: Sync to HubSpot",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        -224
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 520,
        "content": "## 5. Sync to HubSpot\n\nUpserts the contact by email into HubSpot CRM. Stores AI scoring in custom properties:\n- `ai_fit_level`, `ai_lead_score`\n- `ai_next_action`, `ai_reason`\n- `utm_source`"
      },
      "typeVersion": 1
    },
    {
      "id": "bc05753d-3192-49b1-938f-f6fa18f3aca5",
      "name": "Section 6: Slack Notifications",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        -224
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 520,
        "content": "## 6. Slack Notifications\n\nSends real-time alerts with lead details, score, and a direct HubSpot link:\n- **Qualified leads** \u2192 #sales channel\n- **Nurture leads** \u2192 #marketing channel"
      },
      "typeVersion": 1
    },
    {
      "id": "7d3c2f84-aa11-445c-a6e9-b2a9ce5153b6",
      "name": "Section 7: Log to Google Sheets",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        -224
      ],
      "parameters": {
        "color": 4,
        "width": 300,
        "height": 520,
        "content": "## 7. Log to Google Sheets\n\nAll processed leads are logged to the Event RSVP AI Leads sheet with full input fields, AI scoring results, and timestamp for reporting and analysis."
      },
      "typeVersion": 1
    },
    {
      "id": "9697a476-3e6b-4b5f-b8cf-e00b2e994f41",
      "name": "Intro: RSVP Event Lead Scorer",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1632,
        -736
      ],
      "parameters": {
        "width": 560,
        "height": 1040,
        "content": "## RSVP Event Lead Scorer\n\n### **What it does:**\nReceives event RSVP submissions via webhook, uses AI to score each lead's ICP fit, routes qualified leads to HubSpot + Slack sales alerts, and logs everything to Google Sheets.\n\n### **Why it matters:**\nAutomates the entire lead qualification pipeline so your sales team only sees high-value leads, while nurture contacts get routed to marketing \u2014 all in real time.\n\n### **How it works:**\n- **Step 1**: Webhook receives RSVP data (name, email, company, job title, country)\n- **Step 2**: Validates email format; invalid submissions logged to a separate sheet\n- **Step 3**: GPT-4o-mini scores ICP fit (0\u2013100), returns fit level, next action, and reasoning\n- **Step 4**: Score \u2265 70 \u2192 upserts qualified contact in HubSpot + alerts #sales in Slack\n- **Step 5**: Score < 70 \u2192 upserts nurture contact in HubSpot + alerts #marketing in Slack\n- Step 6: All processed leads logged to Google Sheets with AI scoring results\n\n### **Setup steps:**\n1. Set **HubSpot Portal URL**, **qualified threshold**, and **Slack channel IDs** in the **Set Workflow Variables** node\n2. Set the **Google Sheets IDs** for Invalid Submissions and Event RSVP AI Leads sheets\n3. Connect **Google Sheets OAuth2** credential\n4. Connect **OpenAI API** credential (GPT-4o-mini)\n5. Connect **HubSpot** credential\n6. Connect **Slack OAuth2** credential\n7. Create custom HubSpot properties: `ai_fit_level`, `ai_lead_score`, `ai_next_action`, `ai_reason`, `utm_source`\n8. Test: POST sample RSVP JSON to the webhook URL \u2192 verify full pipeline"
      },
      "typeVersion": 1
    },
    {
      "id": "4ba4f54c-ff84-42e0-9ed7-6073bc3eef27",
      "name": "Receive Event RSVP Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -928,
        -16
      ],
      "parameters": {
        "path": "event-rsvp",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "std-section-trigger-1771275977820",
      "name": "Section 1: Trigger & Configuration",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1024,
        -224
      ],
      "parameters": {
        "color": 6,
        "width": 420,
        "height": 520,
        "content": "## 1. Trigger & Configuration\n\nWebhook receives event RSVP POST requests. The Set node configures workflow-level variables: HubSpot portal URL, qualified lead threshold, and Slack channel IDs."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "03aee0d6-fff4-459f-94c8-8d6831242e6c",
  "connections": {
    "If Email Is Valid": {
      "main": [
        [
          {
            "node": "Score Lead with GPT-4o-mini",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Invalid Submissions to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Response": {
      "main": [
        [
          {
            "node": "If Lead Score \u2265 70",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If Lead Score \u2265 70": {
      "main": [
        [
          {
            "node": "Upsert Contact in HubSpot (Qualified)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Upsert Contact in HubSpot (Nurture)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Alert Sales via Slack": {
      "main": [
        [
          {
            "node": "Log to Event RSVP AI Leads Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Workflow Variables": {
      "main": [
        [
          {
            "node": "If Email Is Valid",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Alert Marketing via Slack": {
      "main": [
        [
          {
            "node": "Log to Event RSVP AI Leads Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive Event RSVP Webhook": {
      "main": [
        [
          {
            "node": "Set Workflow Variables",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Score Lead with GPT-4o-mini": {
      "main": [
        [
          {
            "node": "Parse AI Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upsert Contact in HubSpot (Nurture)": {
      "main": [
        [
          {
            "node": "Alert Marketing via Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upsert Contact in HubSpot (Qualified)": {
      "main": [
        [
          {
            "node": "Alert Sales via Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}