{
  "name": "ListPlus Chrome extension → leads",
  "nodes": [
    {
      "parameters": {
        "content": "## LinkedIn leads from the ListPlus Chrome extension\n\n**Setup**\n1. Activate this workflow and copy the Webhook node's **Production URL**.\n2. In the extension, open the settings (arrow button in the footer) → own endpoint. Paste the URL as **Endpoint address**, click **Send test**, then **Save**.\n3. The test send carries `\"test\": true`; the Filter node drops it, so you see an execution that stops there. That is expected.\n4. Protect the endpoint: in the Webhook node set **Authentication** to *Header Auth* and create a credential with the same header name and value you entered under **Authentication header (optional)** in the extension.\n5. Open the HubSpot node and pick (or create) your HubSpot credential, or replace the node with your CRM.\n6. Replace the No-Op node with your own enrichment (a waterfall of HTTP Request nodes, a Clay table's webhook, …). Everything that arrives there has no email yet.\n\n**Payload** (one POST per hand-over): `body.event = \"listplus.entries\"`, `body.entries[]` with `kind` (person / company / page), `name`, `url`, `linkedinUrl`, `headline`, `company`, `location`, `note`, `savedAt`, `savedBy`; when the lead was enriched on the card also `email`, `jobTitle`, `domain`, `industry`, `companySize`, `employees`, `seniority`. Empty fields are left out. A web-page entry (speaker list, imprint) has `url` but no `linkedinUrl`.",
        "height": 620,
        "width": 520
      },
      "id": "a1f0c6b2-6c3e-4d1a-9b0e-1b2c3d4e5f60",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-120, -420]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "listplus-leads",
        "responseMode": "onReceived",
        "options": {}
      },
      "id": "b2e1d7c3-7d4f-4e2b-8c1f-2c3d4e5f6a71",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [-120, 260],
      "webhookId": "c3f2e8d4-8e5a-4f3c-9d2a-3d4e5f6a7b82"
    },
    {
      "parameters": {
        "fieldToSplitOut": "body.entries",
        "options": {}
      },
      "id": "d4a3f9e5-9f6b-4a4d-8e3b-4e5f6a7b8c93",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [120, 260]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "e5b4a0f6-0a7c-4b5e-9f4c-5f6a7b8c9da4",
              "leftValue": "={{ $('Webhook').item.json.body.test === true }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              }
            },
            {
              "id": "f6c5b1a7-1b8d-4c6f-8a5d-6a7b8c9dae05",
              "leftValue": "={{ $json.kind }}",
              "rightValue": "page",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "07d6c2b8-2c9e-4d7a-9b6e-7b8c9daebf16",
      "name": "Skip test sends and pages",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2,
      "position": [360, 260]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "18e7d3c9-3daf-4e8b-8c7f-8c9daebfc027",
              "name": "name",
              "value": "={{ $json.name || '' }}",
              "type": "string"
            },
            {
              "id": "29f8e4da-4eb0-4f9c-9d8a-9daebfc0d138",
              "name": "firstName",
              "value": "={{ ($json.name || '').trim().split(/\\s+/).slice(0, -1).join(' ') }}",
              "type": "string"
            },
            {
              "id": "3a09f5eb-5fc1-4a0d-8e9b-aebfc0d1e249",
              "name": "lastName",
              "value": "={{ ($json.name || '').trim().split(/\\s+/).pop() || '' }}",
              "type": "string"
            },
            {
              "id": "4b1a06fc-6ad2-4b1e-9f0c-bfc0d1e2f35a",
              "name": "linkedinUrl",
              "value": "={{ $json.linkedinUrl || '' }}",
              "type": "string"
            },
            {
              "id": "5c2b170d-7be3-4c2f-8a1d-c0d1e2f3046b",
              "name": "email",
              "value": "={{ $json.email || '' }}",
              "type": "string"
            },
            {
              "id": "6d3c281e-8cf4-4d3a-9b2e-d1e2f304157c",
              "name": "jobTitle",
              "value": "={{ $json.jobTitle || $json.headline || '' }}",
              "type": "string"
            },
            {
              "id": "7e4d392f-9d05-4e4b-8c3f-e2f30415268d",
              "name": "company",
              "value": "={{ $json.company || '' }}",
              "type": "string"
            },
            {
              "id": "8f5e4a30-0e16-4f5c-9d4a-f3041526379e",
              "name": "domain",
              "value": "={{ $json.domain || ($json.email ? $json.email.split('@')[1] : '') }}",
              "type": "string"
            },
            {
              "id": "906f5b41-1f27-4a6d-8e5b-04152637480f",
              "name": "note",
              "value": "={{ $json.note || '' }}",
              "type": "string"
            },
            {
              "id": "a1706c52-2038-4b7e-9f6c-15263748591a",
              "name": "kind",
              "value": "={{ $json.kind }}",
              "type": "string"
            },
            {
              "id": "b2817d63-3149-4c8f-8a7d-2637485a6a2b",
              "name": "savedAt",
              "value": "={{ $json.savedAt || '' }}",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": false,
        "options": {}
      },
      "id": "c3928e74-425a-4d9a-9b8e-3748596b7b3c",
      "name": "Map lead fields",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [600, 260]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "d4a39f85-536b-4eab-8c9f-48596a7c8c4d",
              "leftValue": "={{ $json.email }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "e5b4a096-647c-4fbc-9d0a-596a7b8d9d5e",
      "name": "Has email?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [840, 260]
    },
    {
      "parameters": {
        "authentication": "appToken",
        "resource": "contact",
        "operation": "upsert",
        "email": "={{ $json.email }}",
        "additionalFields": {
          "firstName": "={{ $json.firstName }}",
          "lastName": "={{ $json.lastName }}",
          "jobTitle": "={{ $json.jobTitle }}",
          "companyName": "={{ $json.company }}"
        },
        "options": {}
      },
      "id": "f6c5b1a7-758d-4acd-8e1b-6a7b8c9eae6f",
      "name": "HubSpot: create or update contact",
      "type": "n8n-nodes-base.hubspot",
      "typeVersion": 2,
      "position": [1100, 140]
    },
    {
      "parameters": {},
      "id": "07d6c2b8-869e-4bde-9f2c-7b8c9dafbf70",
      "name": "Your enrichment step (e.g. waterfall)",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [1100, 400]
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Skip test sends and pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Skip test sends and pages": {
      "main": [
        [
          {
            "node": "Map lead fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map lead fields": {
      "main": [
        [
          {
            "node": "Has email?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has email?": {
      "main": [
        [
          {
            "node": "HubSpot: create or update contact",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Your enrichment step (e.g. waterfall)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "active": false,
  "pinData": {},
  "tags": []
}
