{
  "id": "",
  "name": "AI Lead Scoring with LinkedIn Data via Bright Data",
  "tags": [],
  "nodes": [
    {
      "id": "a1f12087-d1d0-45f7-aebd-3aa8f652bf35",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -608,
        -144
      ],
      "parameters": {
        "width": 480,
        "height": 864,
        "content": "## AI Lead Scoring with LinkedIn Data via Bright Data\n\n### How it works\n\nThis workflow monitors a Google Sheet of leads, retrieves the lead list, and processes each row in a loop. For every lead, it enriches the record with LinkedIn profile and company data using Bright Data, then asks Claude to produce a lead score. The score is parsed and used to update the Google Sheet with either a HOT status for high-scoring leads or DONE for the rest.\n\n### Setup steps\n\n- Connect Google Sheets credentials and configure the trigger and read/update nodes to use the correct spreadsheet, sheet, and lead identifier columns.\n- Connect Bright Data credentials and configure the profile and company scraping nodes to use the LinkedIn URL fields from each lead row.\n- Connect Anthropic credentials and verify the Claude prompt returns a predictable JSON structure containing the lead score.\n- Confirm the wait durations match Bright Data and LinkedIn scraping rate-limit requirements, then test with a small batch of leads.\n\n### Customization\n\nAdjust the scoring prompt, JSON parsing logic, and the hot-lead threshold in the \u201cScore >= 70?\u201d node to match your ideal customer profile and sales process."
      },
      "typeVersion": 1
    },
    {
      "id": "d1bcdb4a-cc04-43d2-a5d3-a774878bebbb",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 608,
        "height": 304,
        "content": "## Load lead batch\n\nStarts when the Google Sheet changes, reads all lead rows, and feeds them one at a time through the batch loop for processing."
      },
      "typeVersion": 1
    },
    {
      "id": "bb3b8bf1-72e2-4948-8d86-f16de2c6a2d0",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 896,
        "height": 304,
        "content": "## Scrape LinkedIn data\n\nEnriches each lead by scraping the person\u2019s LinkedIn profile and company data through Bright Data, with wait steps inserted to respect rate limits."
      },
      "typeVersion": 1
    },
    {
      "id": "bdda8dd3-2f8c-452d-91e3-490b08e51c6b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1616,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 320,
        "content": "## Score lead with AI\n\nSends the enriched LinkedIn profile and company information to Claude for lead scoring, then parses the AI response into structured JSON for downstream decisions."
      },
      "typeVersion": 1
    },
    {
      "id": "400be4ac-82d2-4ba8-995d-50857de0c475",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2288,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 560,
        "content": "## Update lead status\n\nChecks whether the parsed score is at least 70, marks qualified leads as hot, marks the rest as done, and routes both branches back to the lead loop."
      },
      "typeVersion": 1
    },
    {
      "id": "f9cdc771-9921-4db1-b7ed-b9f2f733b520",
      "name": "When Leads Sheet Updated",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Leads Sheet"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8d8ce7bb-09b7-4bab-9b35-d4a647e53b64",
      "name": "Read Leads from Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        208,
        0
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Leads Sheet"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "92281250-e2cd-49e4-930a-c62e2291feb1",
      "name": "Batch Process Leads",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        416,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "68c1bcf6-e1fd-4dca-80e3-e7aab63451dc",
      "name": "Scrape LinkedIn Profiles",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        736,
        16
      ],
      "parameters": {
        "urls": "=[{\"url\":\"{{ $json[\"Linkedin URL\"] }}\"}]",
        "resource": "webScrapper",
        "dataset_id": {
          "__rl": true,
          "mode": "list",
          "value": "gd_l1viktl72bvl7bjuj0",
          "cachedResultName": "LinkedIn people profiles"
        },
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a44f4bfc-6c4c-443a-ba5b-daf96bc19b90",
      "name": "Wait 30 Seconds",
      "type": "n8n-nodes-base.wait",
      "position": [
        976,
        16
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "e71e686e-64bd-4564-a292-32fce5865512",
      "name": "Extract LinkedIn Companies",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        1200,
        16
      ],
      "parameters": {
        "urls": "=[{\"url\":\"{{ $json.experience[0].url }}\"}]",
        "resource": "webScrapper",
        "dataset_id": {
          "__rl": true,
          "mode": "list",
          "value": "gd_l1vikfnt1wgvvqz95w",
          "cachedResultName": "LinkedIn company information"
        },
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2ff812a6-1687-4f4e-bd86-b1a8214905d1",
      "name": "Pause for 30 Seconds",
      "type": "n8n-nodes-base.wait",
      "position": [
        1440,
        16
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "c9764626-33bd-43a5-9baf-af5f1e103a51",
      "name": "AI Analyze Lead Score",
      "type": "@n8n/n8n-nodes-langchain.anthropic",
      "position": [
        1664,
        16
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "claude-opus-4-8",
          "cachedResultName": "claude-opus-4-8"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a B2B lead qualification assistant for [YOUR COMPANY].\n\nWE SELL: [your product, e.g. \"AI automation tools and data enrichment APIs for sales and growth teams\"]\nOUR IDEAL CUSTOMER: [e.g. \"founders, heads of sales, growth, or RevOps at B2B SaaS companies with 10-500 employees who do outbound and care about lead data quality\"]\n\nScore this lead from 0 to 100 based on how well they match OUR ideal customer profile above. A high score means they are likely a buyer or decision-maker for what we sell.\n\nPERSON:\n- Name: {{ $('Scrape LinkedIn Profiles').item.json.name }}\n- Title: {{ $('Scrape LinkedIn Profiles').item.json.current_company.title }}\n- Location: {{ $('Scrape LinkedIn Profiles').item.json.city }}\n- Connections: {{ $('Scrape LinkedIn Profiles').item.json.connections }}\n\nCOMPANY:\n- Company: {{ $('Extract LinkedIn Companies').item.json.name }}\n- Size: {{ $('Extract LinkedIn Companies').item.json.company_size }}\n- Industry: {{ $('Extract LinkedIn Companies').item.json.industries }}\n\nRespond with ONLY valid JSON, no markdown:\n{\"score\": <0-100>, \"reason\": \"<one sentence on fit vs our ICP>\"}"
            }
          ]
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7f807d2a-cbfc-4ff1-b6a7-b9b1f1fe6ddc",
      "name": "Parse Lead Score JSON",
      "type": "n8n-nodes-base.code",
      "position": [
        2112,
        16
      ],
      "parameters": {
        "jsCode": "let raw = $json.content[0].text;\nraw = raw.replace(/```json|```/g, \"\").trim();\nconst parsed = JSON.parse(raw);\nreturn {\n  score: parsed.score,\n  reason: parsed.reason\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "0e181817-315b-4af1-9b65-ec4ed1754ff0",
      "name": "Check If Score \u2265 70",
      "type": "n8n-nodes-base.if",
      "position": [
        2336,
        272
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "3c501d1b-3bc5-48c3-8bb1-ad606983482d",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.score }}",
              "rightValue": 70
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.3
    },
    {
      "id": "6da33c08-58b8-4548-b184-b59aaa3daada",
      "name": "Update Hot Leads in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2624,
        160
      ],
      "parameters": {
        "columns": {
          "value": {
            "Reason": "={{ $('Parse Lead Score JSON').item.json.reason }}",
            "Status": "HOT \ud83d\udd25",
            "Title ": "={{ $('Scrape LinkedIn Profiles').item.json.current_company.title }}",
            "Company": "={{ $('Extract LinkedIn Companies').item.json.name }}",
            "Location": "={{ $('Scrape LinkedIn Profiles').item.json.city }}",
            "Lead Score": "={{ $('Parse Lead Score JSON').item.json.score }}",
            "Company Size": "={{ $('Extract LinkedIn Companies').item.json.company_size }}",
            "Connections ": "={{ $('Scrape LinkedIn Profiles').item.json.connections }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Linkedin URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Linkedin URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Title ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Size",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company Size",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Connections ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Connections ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Lead Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Lead Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Reason",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Leads Sheet"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "299c148a-8648-4b6c-bd79-6dca03706ee5",
      "name": "Mark Lead as Processed in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2624,
        400
      ],
      "parameters": {
        "columns": {
          "value": {
            "Reason": "={{ $('Parse Lead Score JSON').item.json.reason }}",
            "Status": "DONE",
            "Title ": "={{ $('Scrape LinkedIn Profiles').item.json.current_company.title }}",
            "Company": "={{ $('Extract LinkedIn Companies').item.json.name }}",
            "Location": "={{ $('Scrape LinkedIn Profiles').item.json.city }}",
            "Lead Score": "={{ $('Parse Lead Score JSON').item.json.score }}",
            "Company Size": "={{ $('Extract LinkedIn Companies').item.json.company_size }}",
            "Connections ": "={{ $('Scrape LinkedIn Profiles').item.json.connections }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Linkedin URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Linkedin URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Title ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Size",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company Size",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Connections ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Connections ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Lead Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Lead Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Reason",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Leads Sheet"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "",
  "nodeGroups": [],
  "connections": {
    "Wait 30 Seconds": {
      "main": [
        [
          {
            "node": "Extract LinkedIn Companies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Batch Process Leads": {
      "main": [
        [],
        [
          {
            "node": "Scrape LinkedIn Profiles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pause for 30 Seconds": {
      "main": [
        [
          {
            "node": "AI Analyze Lead Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Analyze Lead Score": {
      "main": [
        [
          {
            "node": "Parse Lead Score JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Score \u2265 70": {
      "main": [
        [
          {
            "node": "Update Hot Leads in Sheets",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Mark Lead as Processed in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Lead Score JSON": {
      "main": [
        [
          {
            "node": "Check If Score \u2265 70",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Leads from Sheets": {
      "main": [
        [
          {
            "node": "Batch Process Leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape LinkedIn Profiles": {
      "main": [
        [
          {
            "node": "Wait 30 Seconds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Leads Sheet Updated": {
      "main": [
        [
          {
            "node": "Read Leads from Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract LinkedIn Companies": {
      "main": [
        [
          {
            "node": "Pause for 30 Seconds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Hot Leads in Sheets": {
      "main": [
        [
          {
            "node": "Batch Process Leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Lead as Processed in Sheets": {
      "main": [
        [
          {
            "node": "Batch Process Leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}