{
  "id": "io8TtPZaVjpZaVrf",
  "meta": {
    "templateId": "3476"
  },
  "name": "Person ICP Scoring with Linkedin",
  "tags": [],
  "nodes": [
    {
      "id": "09f71a7c-1219-426d-8563-fa05654cab44",
      "name": "Calculate ICP PersonScoring",
      "type": "n8n-nodes-base.airtop",
      "maxTries": 2,
      "position": [
        820,
        240
      ],
      "parameters": {
        "url": "={{ $json.Linkedi_URL }}",
        "prompt": "Please extract the following information from the LinkedIn profile page:\n\n1. **Full Name**: Extract the full name of the individual.\n2. **Current or Most Recent Job Title**: Identify the job title next to the logo of the current or last employer.\n3a. **Current or Most Recent Employer**: Extract the name of the first company in the employment experience block. \n3b. Linkedin Company URL of the Current or Most Recent Employer: Extract the link of the first company in the employment experience block\n4. **Location**: Extract the location of the individual.\n5. **Number of Connections**: Extract the number of connections the individual has.\n6. **Number of Followers**: Extract the number of followers the individual has.\n7. **About Section Text**: Extract the text from the 'About' section.\n8. **Interest Level in AI**: Determine the person's interest level in AI (e.g., beginner, intermediate, advanced, expert).\n9. **Seniority Level**: Determine the seniority level of the person (e.g., junior, mid-level, senior, executive).\n10. **Technical Depth**: Determine the technical depth of the person (e.g., basic, intermediate, advanced, expert).\n11. **ICP Score**: Calculate the ICP Score based on the following criteria:\n    - AI Interest: beginner-5 pts, intermediate-10 pts, advanced-25 pts, expert-35 pts\n    - Technical Depth: basic-5 pts, intermediate-15 pts, advanced-25 pts, expert-35 pts\n    - Seniority Level: junior-5 pts, mid-level-15 pts, senior-25 pts, executive-30 pts\n    - Sum the points to get the ICP Score.\n\nEnsure that the extracted information is accurate and formatted according to the specified output schema.\n\nFor example, if the LinkedIn profile is of a senior software engineer with a strong interest in AI, return the following output:\n{\n  \"full_name\": \"Jane Doe\",\n  \"current_or_last_employer\": \"Tech Innovations Inc.\",\n  \"current_or_last_title\": \"Senior Software Engineer\",\n  \"location\": \"San Francisco, CA\",\n  \"number_of_connections\": 500,\n  \"number_of_followers\": 300,\n  \"about_section_text\": \"Experienced software engineer with a passion for developing innovative programs that expedite the efficiency and effectiveness of organizational success.\",\n  \"ai_interest_level\": \"advanced\",\n  \"seniority_level\": \"senior\",\n  \"technical_depth\": \"advanced\",\n  \"icp_score\": 85\n}\n",
        "resource": "extraction",
        "operation": "query",
        "profileName": "={{ $json.Airtop_profile }}",
        "sessionMode": "new",
        "additionalFields": {
          "outputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"full_name\": {\n      \"type\": \"string\",\n      \"description\": \"The full name of the individual.\"\n    },\n    \"current_or_last_title\": {\n      \"type\": \"string\",\n      \"description\": \"The job title next to the logo of the current or last employer.\"\n    },\n    \"current_or_last_employer\": {\n      \"type\": \"string\",\n      \"description\": \"The name of the first company in the employment experience block.\"\n    },\n    \"linkedin_company_url\": {\n      \"type\": \"string\",\n      \"description\": \"The LinkedIn URL of the first company in the employment experience block.\"\n    },\n    \"location\": {\n      \"type\": \"string\",\n      \"description\": \"The location of the individual.\"\n    },\n    \"number_of_connections\": {\n      \"type\": \"integer\",\n      \"description\": \"The number of connections the individual has.\"\n    },\n    \"number_of_followers\": {\n      \"type\": \"integer\",\n      \"description\": \"The number of followers the individual has.\"\n    },\n    \"about_section_text\": {\n      \"type\": \"string\",\n      \"description\": \"The text from the 'About' section.\"\n    },\n    \"ai_interest_level\": {\n      \"type\": \"string\",\n      \"description\": \"The person's interest level in AI.\"\n    },\n    \"seniority_level\": {\n      \"type\": \"string\",\n      \"description\": \"The seniority level of the person.\"\n    },\n    \"technical_depth\": {\n      \"type\": \"string\",\n      \"description\": \"The technical depth of the person.\"\n    },\n    \"icp_score\": {\n      \"type\": \"integer\",\n      \"description\": \"The ICP Score calculated based on AI interest, technical depth, and seniority level.\"\n    }\n  },\n  \"required\": [\n    \"full_name\",\n    \"current_or_last_title\",\n    \"current_or_last_employer\",\n    \"linkedin_company_url\",\n    \"location\",\n    \"number_of_connections\",\n    \"number_of_followers\",\n    \"about_section_text\",\n    \"ai_interest_level\",\n    \"seniority_level\",\n    \"technical_depth\",\n    \"icp_score\"\n  ],\n  \"additionalProperties\": false,\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n}\n"
        }
      },
      "credentials": {
        "airtopApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1
    },
    {
      "id": "20c325b8-3376-429f-9330-e1c817347be6",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        360,
        140
      ],
      "parameters": {
        "options": {},
        "formTitle": "ICP Scoring",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Linkedin Person Profile URL",
              "requiredField": true
            },
            {
              "fieldLabel": "Airtop Profile (connected to Linkedin)",
              "requiredField": true
            }
          ]
        },
        "formDescription": "This automation takes person's Linkedin Profile URL and Airtop Profile (authenticated for Linkedin) and returns the person's ICP score\n"
      },
      "typeVersion": 2.2
    },
    {
      "id": "d5fb3515-eea6-490d-ac7c-293353522eed",
      "name": "When Executed by Another Workflow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        360,
        340
      ],
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "Linkedin_URL"
            },
            {
              "name": "Airtop_profile"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "4b25a869-d634-4039-9ae8-945c34627c99",
      "name": "Parameters",
      "type": "n8n-nodes-base.set",
      "position": [
        580,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e612bf63-72bd-4b61-82c9-786a90b58b7b",
              "name": "Linkedi_URL",
              "type": "string",
              "value": "={{ $json[\"Linkedin Person Profile URL\"] || $json.Linkedin_URL }}"
            },
            {
              "id": "567e5e7d-4efd-4d0a-a93c-6c7aed02c305",
              "name": "Airtop_profile",
              "type": "string",
              "value": "={{ $json[\"Airtop Profile (connected to Linkedin)\"] || $json.Airtop_profile }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e7d51b90-6f5c-4b7b-aabd-c58a99e2f36b",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1040,
        240
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{ $json.data.modelResponse }}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "c6812743-0426-40f9-a6b6-3d3c1c47165b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        0
      ],
      "parameters": {
        "width": 440,
        "height": 540,
        "content": "## Input parameters\n* Linkedin Person Profile URL\n* Airtop profile "
      },
      "typeVersion": 1
    },
    {
      "id": "1c30b319-33ed-4ad9-9df9-80066ecb8403",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        780,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 440,
        "height": 540,
        "content": "## Calculate ICP"
      },
      "typeVersion": 1
    },
    {
      "id": "6f57f945-5530-4cca-8bad-b9714825365b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        -280
      ],
      "parameters": {
        "width": 860,
        "height": 1140,
        "content": "README\n# Scoring LinkedIn Profiles Against Your ICP\n## Use Case\nThis automation scores individual LinkedIn profiles against your Ideal Customer Profile (ICP) based on interest in AI, technical depth, and seniority level. It's ideal for prioritizing leads and understanding how well a person fits your ICP criteria.\n\n## What This Automation Does\nGiven a LinkedIn profile and an Airtop profile, it:\n- Extracts relevant data from the person's profile\n- Determines levels of AI interest, seniority, and technical depth\n- Calculates an ICP score based on weighted criteria\n- Returns the full enriched profile with the score\n\n## Input parameters:\n- **LinkedIn Profile URL** (e.g., `https://linkedin.com/in/janedoe`)\n- **Airtop Profile** connected to LinkedIn\n- **ICP scoring method** in the Airtop node prompt\n\n## Output fields in JSON format:\n- Full name, job title, employer, company LinkedIn URL, location, number of connections and followers, about section content and more\n- Calculated ICP Score (out of 95)\n\n## How It Works\n1. **Form Trigger or Workflow Trigger**: Accepts input from either a form or another workflow.\n2. **Parameter Assignment**: Ensures proper variable names for downstream nodes.\n3. **Airtop Enrichment Tool**: Extracts and scores the person based on a detailed prompt.\n4. **Scoring**: Uses this point system:\n   - AI Interest: beginner (5), intermediate (10), advanced (25), expert (35)\n   - Technical Depth: basic (5), intermediate (15), advanced (25), expert (35)\n   - Seniority Level: junior (5), mid-level (15), senior (25), executive (30)\n5. **Output Formatting**: Cleans and returns the result as JSON.\n\n## Setup Requirements\n1. IMPORTANT: Enter your ICP scoring method in the prompt field of the Airtop node \n2. [Airtop Profile](https://portal.airtop.ai/browser-profiles) connected to LinkedIn.\n3. Airtop API credentials configured in n8n.\n4. Optional: a front-end form to collect profile URLs and trigger the automation.\n\n## Next Steps\n- **Embed in CRM**: Trigger this automation on new leads to auto-score them.\n- **Batch Process Leads**: Run it over a list of profile URLs for segmentation.\n- **Customize Scoring**: Adjust point weights based on your sales priorities.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {},
  "versionId": "ce7b4df3-b1c6-4041-ad33-357c0efa9b38",
  "connections": {
    "Parameters": {
      "main": [
        [
          {
            "node": "Calculate ICP PersonScoring",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate ICP PersonScoring": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}