{
  "id": "qFFPoauu8ecC8Yuq",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Enrich new CRM Leads with LinkedIn Data via Bright Data",
  "tags": [],
  "nodes": [
    {
      "id": "d1495a05-d870-46d7-a767-8372e353b9ff",
      "name": "Scrape LinkedIn Profile",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        -496,
        1280
      ],
      "parameters": {
        "urls": "=[{\"url\": \"{{ $json.fields[\"LinkedIn URL\"] }}\"}]",
        "resource": "webScrapper",
        "dataset_id": {
          "__rl": true,
          "mode": "list",
          "value": "gd_l1viktl72bvl7bjuj0",
          "cachedResultName": "LinkedIn people profiles"
        },
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "ca3c95e3-9a88-47ff-a011-81b899ca8f05",
      "name": "Extract Structured Data",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -176,
        1520
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "GPT-5-MINI"
        },
        "options": {
          "textFormat": {
            "textOptions": {
              "type": "json_object"
            }
          }
        },
        "responses": {
          "values": [
            {
              "role": "system",
              "content": "You are a LinkedIn profile data extractor. Extract structured data from the LinkedIn profile JSON provided and return ONLY a valid JSON object matching this exact schema. No prose, no commentary, no markdown fences.\n\nSchema:\n{\n  \"current_title\": \"string or null\",\n  \"current_company\": \"string or null\",\n  \"seniority_level\": \"IC | Manager | Director | VP | C-level | Founder | Unknown\",\n  \"years_experience_estimate\": \"number or null\",\n  \"industry\": \"string or null\",\n  \"location_city\": \"string or null\",\n  \"location_country\": \"string or null\",\n  \"tech_stack\": [\"array of technologies, tools, programming languages, or domain skills\"],\n  \"top_certifications\": [\"array of max 3 most relevant certifications\"],\n  \"one_line_summary\": \"string, 1 sentence professional summary\"\n}\n\nRules:\n- Infer seniority from title, experience, and position\n- Infer tech_stack from experience, activity posts, and about sections\n- Use country codes from country_code field or infer from city\n- If a field cannot be determined, return null or empty array\n- Return valid JSON only, no code blocks"
            },
            {
              "content": "=LinkedIn profile data:\n\n{{ JSON.stringify($json) }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2.1
    },
    {
      "id": "99e5dbfb-d992-4b72-893f-c0f90d20f2a8",
      "name": "Update Airtable Record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        304,
        1696
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_BASE_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Lead Enrichment"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_TABLE_ID",
          "cachedResultUrl": "",
          "cachedResultName": "Leads"
        },
        "columns": {
          "value": {
            "id": "={{ $('Airtable Trigger1').item.json.id }}",
            "Status": "Enriched",
            "Industry": "={{ $json.output[0].content[0].text.industry }}",
            "Job Title": "={{ $json.output[0].content[0].text.current_title }}",
            "AI Summary": "={{ $json.output[0].content[0].text.one_line_summary }}",
            "Tech Stack": "={{ $json.output[0].content[0].text.tech_stack.join(\", \") }}",
            "Enriched At": "={{ $now.toISO() }}",
            "Location City": "={{ $json.output[0].content[0].text.location_city }}",
            "Current Company": "={{ $json.output[0].content[0].text.current_company }}",
            "Seniority Level": "={{ $json.output[0].content[0].text.seniority_level }}",
            "Location Country": "={{ $json.output[0].content[0].text.location_country }}",
            "Years Experience": "={{ Math.round($json.output[0].content[0].text.years_experience_estimate) }}",
            "Top Certifications": "={{ $json.output[0].content[0].text.top_certifications.join(\", \") }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "LinkedIn URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Manual",
                  "value": "Manual"
                },
                {
                  "name": "Import",
                  "value": "Import"
                },
                {
                  "name": "Webform",
                  "value": "Webform"
                },
                {
                  "name": "API",
                  "value": "API"
                },
                {
                  "name": "Other",
                  "value": "Other"
                },
                {
                  "name": "LinkedIn",
                  "value": "LinkedIn"
                },
                {
                  "name": "Referral",
                  "value": "Referral"
                },
                {
                  "name": "Website",
                  "value": "Website"
                },
                {
                  "name": "Event",
                  "value": "Event"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "To enrich",
                  "value": "To enrich"
                },
                {
                  "name": "Enriching",
                  "value": "Enriching"
                },
                {
                  "name": "Enriched",
                  "value": "Enriched"
                },
                {
                  "name": "Failed",
                  "value": "Failed"
                },
                {
                  "name": "Skipped",
                  "value": "Skipped"
                },
                {
                  "name": "Contacted",
                  "value": "Contacted"
                },
                {
                  "name": "New",
                  "value": "New"
                },
                {
                  "name": "Qualified",
                  "value": "Qualified"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Job Title",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Job Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Current Company",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Current Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Seniority Level",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "IC",
                  "value": "IC"
                },
                {
                  "name": "Manager",
                  "value": "Manager"
                },
                {
                  "name": "Director",
                  "value": "Director"
                },
                {
                  "name": "VP",
                  "value": "VP"
                },
                {
                  "name": "C-level",
                  "value": "C-level"
                },
                {
                  "name": "Founder",
                  "value": "Founder"
                },
                {
                  "name": "Unknown",
                  "value": "Unknown"
                },
                {
                  "name": "Mid-level",
                  "value": "Mid-level"
                },
                {
                  "name": "Senior",
                  "value": "Senior"
                },
                {
                  "name": "Entry-level",
                  "value": "Entry-level"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Seniority Level",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Years Experience",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Years Experience",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Industry",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Industry",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location City",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Location City",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location Country",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Location Country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tech Stack",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Tech Stack",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Top Certifications",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Top Certifications",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "AI Summary",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "AI Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Enriched At",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Enriched At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Enrichment Error",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Enrichment Error",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "typeVersion": 2.2
    },
    {
      "id": "b3d02c84-889b-43b3-a9ff-a59b412bf7ee",
      "name": "Notify Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        672,
        1808
      ],
      "parameters": {
        "text": "=:sparkles: *New enriched lead in Airtable*\n\n*{{ $('Airtable Trigger1').item.json.fields.Name }}*\n{{ $('Extract Structured Data').item.json.output[0].content[0].text.current_title }} at {{ $('Extract Structured Data').item.json.output[0].content[0].text.current_company }}\n\n*Seniority:* {{ $('Extract Structured Data').item.json.output[0].content[0].text.seniority_level }}\n*Location:* {{ $('Extract Structured Data').item.json.output[0].content[0].text.location_country }}\n*Industry:* {{ $('Extract Structured Data').item.json.output[0].content[0].text.industry }}\n*Tech stack:* {{ $('Extract Structured Data').item.json.output[0].content[0].text.tech_stack }}\n\n> {{ $('Extract Structured Data').item.json.output[0].content[0].text.one_line_summary }}\n\n<{{ $('Airtable Trigger1').item.json.fields[\"LinkedIn URL\"] }}|View LinkedIn profile>",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_SLACK_CHANNEL_ID",
          "cachedResultName": "leads"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.4
    },
    {
      "id": "d4e1ab5f-7479-4417-8317-8679cd24b6f5",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1504,
        272
      ],
      "parameters": {
        "color": 7,
        "width": 460,
        "height": 820,
        "content": "## \ud83e\udd16 AI Lead Enrichment with LinkedIn, BrightData, OpenAI & Slack\n\nAutomatically enrich every new LinkedIn lead with AI-structured data and notify your team in Slack.\n\n### What it does\n1. **Detects** new leads in your CRM\n2. **Scrapes** the LinkedIn profile via BrightData\n3. **Extracts** structured data (title, company, seniority, tech stack\u2026) with GPT-5-mini\n4. **Updates** the CRM record with enriched fields\n5. **Notifies** your team in Slack with a beautiful summary\n\n### \ud83d\udd04 CRM-agnostic\nThis template uses **Airtable** as a reference, but you can easily swap it for:\n- HubSpot, Salesforce, Pipedrive, Attio, Close\n- Notion, Google Sheets, Monday.com, ClickUp\n- Any database (Postgres, MySQL, MongoDB, Supabase\u2026)\n\nJust replace the **Airtable Trigger** and **Update Airtable Record** nodes with the equivalent for your stack. The rest of the flow stays identical.\n\n### Prerequisites\n- A CRM or database with a \"Leads\" collection containing a `LinkedIn URL` field\n- A [BrightData](https://brightdata.com) account with the *LinkedIn people profiles* dataset enabled\n- An [OpenAI](https://platform.openai.com) API key (GPT-5-mini or any model)\n- A [Slack](https://slack.com) workspace with a channel for notifications\n\n### Setup\n1. Connect your **CRM**, **BrightData**, **OpenAI** and **Slack** credentials\n2. If using a different CRM: replace the trigger and update nodes\n3. Select your Slack **channel** in the notification node\n4. Activate the workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "f1b6c3a7-c497-4b8c-bebe-6c7e24cc7a39",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -976,
        880
      ],
      "parameters": {
        "color": 4,
        "width": 300,
        "height": 212,
        "content": "## 1\ufe0f\u20e3 New Lead Trigger\nPolls **Airtable** every minute for new records via the `Created Time` field.\n\n\ud83d\udd04 **Swap for any CRM:** replace this node with a HubSpot, Salesforce, Notion, Pipedrive, Google Sheets\u2026 trigger. Just make sure the output contains a **LinkedIn URL** field."
      },
      "typeVersion": 1
    },
    {
      "id": "bdcfc13b-028f-4d4d-9719-861de2d48c2c",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        1040
      ],
      "parameters": {
        "color": 3,
        "width": 284,
        "height": 228,
        "content": "## 2\ufe0f\u20e3 Scrape LinkedIn\nCalls **BrightData**'s *LinkedIn people profiles* dataset with the lead's LinkedIn URL.\n\nReturns the full public profile as JSON:\n- experience, education, skills\n- about, activity, certifications\n- location & company info"
      },
      "typeVersion": 1
    },
    {
      "id": "1c91a8cf-dc3c-4c83-95ea-66f8ee057139",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -208,
        1168
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 324,
        "content": "## 3\ufe0f\u20e3 AI Structured Extraction\nUses **GPT-5-mini** to turn the raw profile JSON into a clean, structured schema:\n- title, company, seniority\n- years of experience\n- industry, location\n- tech stack & certifications\n- 1-line professional summary\n\nReturns strict JSON (no prose, no markdown). Feel free to swap for any LLM (Claude, Gemini, Mistral\u2026)."
      },
      "typeVersion": 1
    },
    {
      "id": "06c40226-b39b-43e4-aef8-655635522b12",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        208,
        1392
      ],
      "parameters": {
        "color": 6,
        "width": 300,
        "height": 284,
        "content": "## 4\ufe0f\u20e3 Update CRM Record\nWrites the enriched data back to **Airtable**:\n- sets **Status** = `Enriched`\n- fills all enrichment fields\n- stamps **Enriched At** with the current ISO date\n\n\ud83d\udd04 **Swap for any CRM:** replace with the HubSpot, Salesforce, Notion, Pipedrive\u2026 update node. The mapping stays the same."
      },
      "typeVersion": 1
    },
    {
      "id": "9c301acc-cee2-4166-803e-62513457d503",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        1520
      ],
      "parameters": {
        "color": 2,
        "width": 300,
        "height": 284,
        "content": "## 5\ufe0f\u20e3 Team Notification\nPosts a nicely formatted message in **Slack** with:\n- Name, title, company\n- Seniority, location, industry, tech stack\n- 1-line AI summary\n- Link to the LinkedIn profile\n\n\ud83d\udd04 **Swap for any channel:** Discord, Microsoft Teams, Telegram, email, SMS\u2026"
      },
      "typeVersion": 1
    },
    {
      "id": "8dc419e0-5a6f-468f-abde-e756bd9b820c",
      "name": "Airtable Trigger1",
      "type": "n8n-nodes-base.airtableTrigger",
      "position": [
        -864,
        1104
      ],
      "parameters": {
        "baseId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_AIRTABLE_BASE_ID"
        },
        "tableId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_AIRTABLE_TABLE_ID"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerField": "Created Time",
        "authentication": "airtableTokenApi",
        "additionalFields": {}
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "c46f864d-f315-456b-a9c2-c9cb30c3b769",
  "connections": {
    "Airtable Trigger1": {
      "main": [
        [
          {
            "node": "Scrape LinkedIn Profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Airtable Record": {
      "main": [
        [
          {
            "node": "Notify Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Structured Data": {
      "main": [
        [
          {
            "node": "Update Airtable Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape LinkedIn Profile": {
      "main": [
        [
          {
            "node": "Extract Structured Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}