AutomationFlowsAI & RAG › Lead Scoring & Auto-assignment with Gpt-4 and Gohighlevel + Slack Alerts

Lead Scoring & Auto-assignment with Gpt-4 and Gohighlevel + Slack Alerts

ByȚugui Dragoș @tuguidragos on n8n.io

This workflow automatically scores and categorizes new GoHighLevel contacts using AI (GPT-4), then tags and assigns them to the appropriate team member based on their score. Hot leads also trigger a Slack notification for immediate follow-up. Triggers when a new contact is added…

Webhook trigger★★★★☆ complexityAI-powered23 nodesHTTP RequestOpenAISlack
AI & RAG Trigger: Webhook Nodes: 23 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the HTTP Request → OpenAI recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

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

Download .json
{
  "id": "fGr4EFOk9O11Cs3l",
  "name": "AI Lead Scoring and Auto-Assignment for GoHighLevel Contacts",
  "tags": [],
  "nodes": [
    {
      "id": "ebc88344-2f0b-4be4-bd6b-3e4ecdfafaa0",
      "name": "GHL New Contact Trigger",
      "type": "n8n-nodes-base.webhook",
      "position": [
        624,
        240
      ],
      "parameters": {
        "path": "ghl-new-contact",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "678da6b8-11e1-44ac-86e0-9cfb7ed20c63",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        848,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "ghlApiBaseUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__GoHighLevel API Base URL (e.g., https://rest.gohighlevel.com/v1)__>"
            },
            {
              "id": "id-2",
              "name": "ghlApiKey",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__GoHighLevel API Key__>"
            },
            {
              "id": "id-3",
              "name": "topRepUserId",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Top Sales Rep User ID for Hot Leads__>"
            },
            {
              "id": "id-4",
              "name": "secondaryRepUserId",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Secondary Sales Rep User ID for Warm Leads__>"
            },
            {
              "id": "id-5",
              "name": "nurtureTeamUserId",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Nurture Team User ID for Cold Leads__>"
            },
            {
              "id": "id-6",
              "name": "slackChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Slack Channel ID for Hot Lead Notifications (e.g., #sales)__>"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "7178c526-d24a-4d17-8c52-b2b4c239c4da",
      "name": "GHL Get Contact Details",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1600,
        240
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $('GHL New Contact Trigger').first().json.body.contact_id }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "c97cd3d4-c870-49c5-a08d-fbcdd688bde8",
      "name": "GHL Fetch Engagement Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1824,
        240
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $('GHL New Contact Trigger').first().json.body.contact_id }}/activities",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "37d1a1ac-309b-4ba3-b987-d41517ae0faa",
      "name": "Clean Contact Data",
      "type": "n8n-nodes-base.set",
      "position": [
        2064,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "contactId",
              "type": "string",
              "value": "={{ $('GHL Get Contact Details').first().json.contact?.id || $('GHL Get Contact Details').first().json.id || '' }}"
            },
            {
              "id": "id-2",
              "name": "name",
              "type": "string",
              "value": "={{ $('GHL Get Contact Details').first().json.name || 'Unknown' }}"
            },
            {
              "id": "id-3",
              "name": "email",
              "type": "string",
              "value": "={{ $('GHL Get Contact Details').first().json.email || '' }}"
            },
            {
              "id": "id-4",
              "name": "phone",
              "type": "string",
              "value": "={{ $('GHL Get Contact Details').first().json.phone || '' }}"
            },
            {
              "id": "id-5",
              "name": "source",
              "type": "string",
              "value": "={{ $('GHL Get Contact Details').first().json.source || 'Unknown' }}"
            },
            {
              "id": "id-6",
              "name": "tags",
              "type": "array",
              "value": "={{ $('GHL Get Contact Details').first().json.tags || [] }}"
            },
            {
              "id": "id-7",
              "name": "customFields",
              "type": "object",
              "value": "={{ $('GHL Get Contact Details').first().json.customFields || {} }}"
            },
            {
              "id": "id-8",
              "name": "engagementData",
              "type": "object",
              "value": "={{ $('GHL Fetch Engagement Data').first().json }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "ca04c9e3-ed83-4f3d-8618-094e4e22f3e8",
      "name": "Prepare AI Input",
      "type": "n8n-nodes-base.set",
      "position": [
        2288,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "leadData",
              "type": "object",
              "value": "={{ { \"demographics\": { \"name\": $json.name, \"email\": $json.email, \"phone\": $json.phone, \"source\": $json.source }, \"behavior\": { \"tags\": $json.tags, \"customFields\": $json.customFields, \"engagementData\": $json.engagementData } } }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "51c119d7-418b-438a-a7a2-581b9a6c3dfa",
      "name": "AI Lead Scoring (GPT-4)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        608,
        640
      ],
      "parameters": {
        "modelId": {
          "mode": "id",
          "value": "gpt-4o"
        },
        "options": {
          "instructions": "You are an expert sales lead scoring assistant. Your task is to analyze lead data and score leads from 1 to 100 based on:\n\n1. Buying Intent: Signals that indicate readiness to purchase\n2. Engagement Level: Email opens, clicks, website visits, form submissions\n3. Behavior Signals: Frequency and recency of interactions\n4. Lead Quality: Completeness of contact information, lead source quality\n5. Urgency: Time-sensitive indicators\n\nProvide your response in the following JSON format:\n{\n  \"score\": <number between 1-100>,\n  \"category\": \"<Hot|Warm|Cold>\",\n  \"reasoning\": \"<brief explanation of the score>\",\n  \"confidence\": \"<high|medium|low>\"\n}\n\nScoring Guidelines:\n- Hot Lead (80-100): High engagement, strong buying signals, quality source\n- Warm Lead (40-79): Moderate engagement, some interest signals\n- Cold Lead (1-39): Low engagement, minimal signals, needs nurturing"
        },
        "responses": {
          "values": [
            {
              "content": "={{ JSON.stringify($json.leadData) }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "ca9b2c9b-ac36-4797-b564-b47e31623b4e",
      "name": "Parse Score to Numeric",
      "type": "n8n-nodes-base.code",
      "position": [
        944,
        640
      ],
      "parameters": {
        "jsCode": "const aiResponse = $input.first().json.message;\nlet parsedData;\n\ntry {\n  parsedData = typeof aiResponse === 'string' ? JSON.parse(aiResponse) : aiResponse;\n} catch (e) {\n  const scoreMatch = aiResponse.match(/\"score\"\\s*:\\s*(\\d+)/);\n  const categoryMatch = aiResponse.match(/\"category\"\\s*:\\s*\"([^\"]+)\"/);\n  const confidenceMatch = aiResponse.match(/\"confidence\"\\s*:\\s*\"([^\"]+)\"/);\n  \n  parsedData = {\n    score: scoreMatch ? parseInt(scoreMatch[1]) : 50,\n    category: categoryMatch ? categoryMatch[1] : 'Warm',\n    confidence: confidenceMatch ? confidenceMatch[1] : 'medium',\n    reasoning: 'Parsed from text response'\n  };\n}\n\nconst score = Math.max(1, Math.min(100, parseInt(parsedData.score) || 50));\n\nreturn {\n  json: {\n    score: score,\n    category: parsedData.category || 'Warm',\n    confidence: parsedData.confidence || 'medium',\n    reasoning: parsedData.reasoning || 'No reasoning provided',\n    contactId: $('Clean Contact Data').first().json.contactId,\n    name: $('Clean Contact Data').first().json.name,\n    email: $('Clean Contact Data').first().json.email,\n    source: $('Clean Contact Data').first().json.source\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "4b470389-b753-44a7-a878-94331ab1b466",
      "name": "IF Score >= 80 (Hot)",
      "type": "n8n-nodes-base.if",
      "position": [
        1536,
        816
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.score }}"
            },
            {
              "id": "id-2",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.score }}",
              "rightValue": 80
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "cca339a2-a20b-4f38-aa49-826e777d53da",
      "name": "IF Score >= 40 (Warm)",
      "type": "n8n-nodes-base.if",
      "position": [
        1776,
        960
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.score }}"
            },
            {
              "id": "id-2",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.score }}",
              "rightValue": 40
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f6d6e6ee-751e-4469-b9d0-45bbca1a2338",
      "name": "GHL Tag Hot Lead",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1776,
        640
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $json.contactId }}",
        "method": "PUT",
        "options": {},
        "jsonBody": "{\n  \"tags\": [\"Hot Lead\"]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "7e6b965a-4674-49d6-b647-08f92865bfc2",
      "name": "GHL Tag Warm Lead",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2000,
        864
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $json.contactId }}",
        "method": "PUT",
        "options": {},
        "jsonBody": "{\n  \"tags\": [\"Warm Lead\"]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "100d401f-dd79-4c77-a898-d9c35be2a6dc",
      "name": "GHL Tag Cold Lead",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2000,
        1056
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $json.contactId }}",
        "method": "PUT",
        "options": {},
        "jsonBody": "{\n  \"tags\": [\"Cold Lead\"]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "a729731e-75ca-404b-90c1-65df321d7ebe",
      "name": "GHL Assign Hot to Top Rep",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2000,
        640
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $json.contactId }}/assign",
        "method": "PUT",
        "options": {},
        "jsonBody": "={{ { \"userId\": $('Workflow Configuration').first().json.topRepUserId } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "218ac94c-d90c-4e57-817a-a1c17f1b1fb0",
      "name": "GHL Assign Warm to Secondary Rep",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2256,
        864
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $json.contactId }}/assign",
        "method": "PUT",
        "options": {},
        "jsonBody": "={{ { \"userId\": $('Workflow Configuration').first().json.secondaryRepUserId } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "920d5d20-6010-498c-ba44-c9367b7d38ee",
      "name": "GHL Assign Cold to Nurture Team",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2256,
        1056
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.ghlApiBaseUrl }}/contacts/{{ $json.contactId }}/assign",
        "method": "PUT",
        "options": {},
        "jsonBody": "={{ { \"userId\": $('Workflow Configuration').first().json.nurtureTeamUserId } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Workflow Configuration').first().json.ghlApiKey }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "6a5266a8-d058-4104-b736-ea883cdc425a",
      "name": "Slack Notify Hot Lead",
      "type": "n8n-nodes-base.slack",
      "position": [
        2256,
        640
      ],
      "parameters": {
        "text": "=\ud83d\udd25 *Hot Lead Alert!*\n\n*Name:* {{ $json.name }}\n*Email:* {{ $json.email }}\n*Score:* {{ $json.score }}/100\n*Source:* {{ $json.source }}\n*Confidence:* {{ $json.confidence }}\n\n*Reasoning:* {{ $json.reasoning }}\n\nThis lead has been assigned to the top sales rep. Follow up immediately!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.slackChannel }}"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7c000ee2-d5fc-49e0-bff1-283ec806cc94",
      "name": "Webhook Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2736,
        864
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ { \"success\": true, \"message\": \"Lead scored and tagged successfully\", \"contactId\": $json.contactId || 'N/A', \"score\": $json.score || 0, \"category\": $json.category || 'Unknown' } }}"
      },
      "typeVersion": 1.5
    },
    {
      "id": "dc1ed977-f1fa-4eab-a626-639bf126ca5b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        304
      ],
      "parameters": {
        "width": 1328,
        "height": 416,
        "content": "## How it works\nThis workflow scores every new GoHighLevel contact with AI and routes them to the right sales owner.\n\nA webhook trigger fires when a new contact is created in GHL. The workflow fetches full contact and engagement data, cleans it and prepares a compact JSON payload for AI.\n\nAn AI node analyzes demographics, source and engagement, then returns a numeric score (1\u2013100), segment (Hot/Warm/Cold) and short reasoning. That score is parsed and used in two IF checks: \u226580 = Hot, \u226540 = Warm, otherwise Cold.\n\nDepending on the segment, the contact is tagged in GHL and automatically assigned to the top rep, secondary rep, or nurture team. Hot leads also generate a Slack notification so the team can follow up immediately. The workflow ends by sending a simple webhook response back to GHL.\n\n## Setup steps\n1. Create a GHL webhook trigger and point it to this workflow URL.\n2. Add your GHL API key, base URL and user IDs in **Workflow Configuration**.\n3. Connect Slack and choose the channel for Hot lead alerts.\n4. Adjust the AI prompt and score thresholds if needed (80/40 by default).\n5. Send a test contact from GHL, verify tags/owners/Slack, then enable the webhook."
      },
      "typeVersion": 1
    },
    {
      "id": "cc06656c-32c1-4791-9fe9-0b2761495c08",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        64
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 352,
        "content": "## Trigger & Config\n\nReceives new contacts from GoHighLevel via webhook and loads core config: API key, base URL, owner IDs, and Slack channel."
      },
      "typeVersion": 1
    },
    {
      "id": "cdf4c58c-361f-4db9-8d5b-623327695eed",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1552,
        64
      ],
      "parameters": {
        "color": 7,
        "width": 880,
        "height": 352,
        "content": "## Contact & Engagement Data\n\nPulls full contact details and engagement history from GHL, then cleans and structures the data into a compact JSON payload for AI scoring."
      },
      "typeVersion": 1
    },
    {
      "id": "aaf1107a-c37b-47b2-b268-8b9597354884",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        512
      ],
      "parameters": {
        "color": 7,
        "width": 544,
        "height": 304,
        "content": "## AI Lead Scoring\n\nUses AI to score the lead (1\u2013100) and return segment + reasoning. The parser converts the AI output into numeric fields used for routing."
      },
      "typeVersion": 1
    },
    {
      "id": "9e5550d6-7434-40c2-bdf9-4328227404dd",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1504,
        480
      ],
      "parameters": {
        "color": 7,
        "width": 976,
        "height": 752,
        "content": "## Route & Assign\n\nRoutes leads based on score: Hot, Warm, or Cold. Tags the contact, assigns the right owner in GHL, and sends a Slack alert for Hot leads."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0eee500d-3869-4812-a383-36247fc2535b",
  "connections": {
    "GHL Tag Hot Lead": {
      "main": [
        [
          {
            "node": "GHL Assign Hot to Top Rep",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare AI Input": {
      "main": [
        [
          {
            "node": "AI Lead Scoring (GPT-4)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Tag Cold Lead": {
      "main": [
        [
          {
            "node": "GHL Assign Cold to Nurture Team",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Tag Warm Lead": {
      "main": [
        [
          {
            "node": "GHL Assign Warm to Secondary Rep",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean Contact Data": {
      "main": [
        [
          {
            "node": "Prepare AI Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Score >= 80 (Hot)": {
      "main": [
        [
          {
            "node": "GHL Tag Hot Lead",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "IF Score >= 40 (Warm)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Score >= 40 (Warm)": {
      "main": [
        [
          {
            "node": "GHL Tag Warm Lead",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "GHL Tag Cold Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack Notify Hot Lead": {
      "main": [
        [
          {
            "node": "Webhook Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Score to Numeric": {
      "main": [
        [
          {
            "node": "IF Score >= 80 (Hot)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "GHL Get Contact Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Lead Scoring (GPT-4)": {
      "main": [
        [
          {
            "node": "Parse Score to Numeric",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Get Contact Details": {
      "main": [
        [
          {
            "node": "GHL Fetch Engagement Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL New Contact Trigger": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Assign Hot to Top Rep": {
      "main": [
        [
          {
            "node": "Slack Notify Hot Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Fetch Engagement Data": {
      "main": [
        [
          {
            "node": "Clean Contact Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Assign Cold to Nurture Team": {
      "main": [
        [
          {
            "node": "Webhook Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Assign Warm to Secondary Rep": {
      "main": [
        [
          {
            "node": "Webhook Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

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

Pro

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

About this workflow

This workflow automatically scores and categorizes new GoHighLevel contacts using AI (GPT-4), then tags and assigns them to the appropriate team member based on their score. Hot leads also trigger a Slack notification for immediate follow-up. Triggers when a new contact is added…

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Venafi Presentation - Watch Video

Venafi Tls Protect Cloud, HTTP Request, OpenAI +1
AI & RAG

Automatically detects missed Zoom demos booked via Calendly and triggers AI-powered follow-up sequences.

HTTP Request, OpenAI, Email Send +3
AI & RAG

AI-Powered Fake Review Detection Workflow Using n8n & Airtable. Uses httpRequest, airtable, openAi, slack. Webhook trigger; 27 nodes.

HTTP Request, Airtable, OpenAI +1
AI & RAG

This workflow automates the end-to-end process of scheduling technical or behavioral interviews. It captures interview data via Webhook, creates a Google Calendar event with an integrated Google Meet

Google Calendar, OpenAI, Gmail +2
AI & RAG

Automate your inbound lead qualification pipeline by enriching raw lead data, scoring it with AI, and instantly creating follow-up tasks for your sales team. 🎯🤖 This workflow receives new leads via we

OpenAI, HTTP Request, Asana +3