AutomationFlowsSocial Media › Enrich Linkedin Profiles Into Full Contacts with Tomba and Google Sheets

Enrich Linkedin Profiles Into Full Contacts with Tomba and Google Sheets

ByZain Khan @zain on n8n.io

This workflow runs on a schedule to read “Pending” LinkedIn profile URLs from Google Sheets, uses Tomba to find and enrich contact details (email and phone), and writes the results back to the same sheet with updated status and scoring. Runs on a schedule trigger. Reads rows…

Cron / scheduled trigger★★★★☆ complexity9 nodesGoogle SheetsN8N Nodes Tomba
Social Media Trigger: Cron / scheduled Nodes: 9 Complexity: ★★★★☆ Added:

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

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": "GpCK3vp4ZK1smgHY",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Turn LinkedIn Sales Navigator Lists into Full Contact Profiles",
  "tags": [],
  "nodes": [
    {
      "id": "c23d0bfd-df04-4129-bf54-f77f0c5e7a8c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -608,
        -144
      ],
      "parameters": {
        "width": 480,
        "height": 816,
        "content": "## Turn LinkedIn Sales Navigator Lists into Full Contact Profiles\n\n### How it works\n\nThis workflow runs on a schedule to process LinkedIn Sales Navigator profile URLs stored in Google Sheets. It fetches pending profiles, loops through them one at a time, enriches each profile with email/contact data via Tomba, formats the result, and writes the completed contact profile back to the sheet.\n\n### Setup steps\n\n- Configure the Schedule Trigger with the desired run frequency.\n- Connect Google Sheets credentials and select the spreadsheet, sheet, and pending-profile filter/range for the input node.\n- Configure the Tomba credentials/API key and ensure the LinkedIn URL field from the sheet is mapped into the lookup node.\n- Verify the formatting code matches the sheet columns, then configure the update node to write enriched contact fields back to the correct row.\n\n### Customization\n\nAdjust the Google Sheets pending criteria, batch size, Tomba lookup fields, or formatting code to match your lead list structure and desired output columns."
      },
      "typeVersion": 1
    },
    {
      "id": "713fa864-8eb1-4f4c-9fbe-717452a6c6b7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 608,
        "height": 304,
        "content": "## Load pending profiles\n\nStarts on a schedule, reads pending LinkedIn profile rows from Google Sheets, and prepares them for batch processing."
      },
      "typeVersion": 1
    },
    {
      "id": "4e7b91ac-67aa-413c-b3b6-ccaa91072a6b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 656,
        "height": 320,
        "content": "## Enrich and save contacts\n\nFor each profile, looks up contact details from the LinkedIn URL using Tomba, formats the returned data, updates the corresponding Google Sheets row, and then returns control to the loop for the next profile."
      },
      "typeVersion": 1
    },
    {
      "id": "41ebb88b-9628-4e00-922b-fd15de86c945",
      "name": "Every Day Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "5e85a501-24cb-4dde-98a1-3910ed885fa3",
      "name": "Read LinkedIn Profiles from Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        208,
        0
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "Pending",
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pBVkQk-tq2aidFvJTDXohBVpbFfkkcHhnlyGK5ZF0-g/edit#gid=0",
          "cachedResultName": "linkedin profiles"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1pBVkQk-tq2aidFvJTDXohBVpbFfkkcHhnlyGK5ZF0-g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pBVkQk-tq2aidFvJTDXohBVpbFfkkcHhnlyGK5ZF0-g/edit?usp=drivesdk",
          "cachedResultName": "Tomba - LinkedIn Contact Finder"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "311e0eb1-0c84-472e-9561-61b19d1e3694",
      "name": "Batch Process LinkedIn Profiles",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        416,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "40fa9eb3-8522-4a27-82b4-caf905e8a1ba",
      "name": "Retrieve Email from LinkedIn URL",
      "type": "n8n-nodes-tomba.tomba",
      "position": [
        672,
        16
      ],
      "parameters": {
        "url": "={{ $json['LinkedIn URL'] }}",
        "resource": "finder",
        "operation": "linkedinFinder",
        "enrichMobile": true
      },
      "credentials": {
        "tombaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9c3afb56-9c76-4a38-9390-10b015795940",
      "name": "Format LinkedIn Contact Data",
      "type": "n8n-nodes-base.code",
      "position": [
        880,
        16
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const json = item.json;\n\n  // Get all phone numbers if multiple exist\n  const phones = json.phone_data && json.phone_data.length > 0\n    ? json.phone_data.map(p => p.intl_format).join(', ')\n    : \"Not Found\";\n\n  results.push({\n    json: {\n      email: json.email || \"Not Found\",\n      phone: phones,\n      first_name: json.first_name || \"\",\n      last_name: json.last_name || \"\",\n      full_name: json.full_name || \"\",\n      company: json.company || \"\",\n      position: json.position || \"\",\n      linkedin: json.linkedin || \"\",\n      score: json.score || 0,\n      verification_status: json.verification?.status || \"unknown\",\n      status: json.email ? \"Enriched\" : \"Not Found\"\n    }\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 2
    },
    {
      "id": "003c89ca-448b-4b52-b7b9-1979770a9c1c",
      "name": "Update LinkedIn Contacts in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1136,
        16
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.email }}",
            "Phone": "={{ $json.phone }}",
            "Score": "={{ $json.score }}",
            "Status": "Done",
            "row_number": "={{ $('Batch Process LinkedIn Profiles').item.json.row_number }}"
          },
          "schema": [
            {
              "id": "LinkedIn URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "LinkedIn URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Score",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pBVkQk-tq2aidFvJTDXohBVpbFfkkcHhnlyGK5ZF0-g/edit#gid=0",
          "cachedResultName": "linkedin profiles"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1pBVkQk-tq2aidFvJTDXohBVpbFfkkcHhnlyGK5ZF0-g",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pBVkQk-tq2aidFvJTDXohBVpbFfkkcHhnlyGK5ZF0-g/edit?usp=drivesdk",
          "cachedResultName": "Tomba - LinkedIn Contact Finder"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "f26076a0-8ff1-4199-b647-ce0ec4453195",
  "connections": {
    "Every Day Trigger": {
      "main": [
        [
          {
            "node": "Read LinkedIn Profiles from Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format LinkedIn Contact Data": {
      "main": [
        [
          {
            "node": "Update LinkedIn Contacts in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Batch Process LinkedIn Profiles": {
      "main": [
        [],
        [
          {
            "node": "Retrieve Email from LinkedIn URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Email from LinkedIn URL": {
      "main": [
        [
          {
            "node": "Format LinkedIn Contact Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read LinkedIn Profiles from Sheets": {
      "main": [
        [
          {
            "node": "Batch Process LinkedIn Profiles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update LinkedIn Contacts in Sheets": {
      "main": [
        [
          {
            "node": "Batch Process LinkedIn Profiles",
            "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 runs on a schedule to read “Pending” LinkedIn profile URLs from Google Sheets, uses Tomba to find and enrich contact details (email and phone), and writes the results back to the same sheet with updated status and scoring. Runs on a schedule trigger. Reads rows…

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

More Social Media workflows → · Browse all categories →

Related workflows

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

Social Media

Automate your LinkedIn outreach with this n8n workflow powered by Linked API. Sends connection requests, monitors acceptance, delivers your pre-written messages, and follows up automatically – all tra

Google Sheets, N8N Nodes Linked Api
Social Media

This template is ideal for sales teams, recruiters, business development professionals, and relationship managers who need to monitor changes in their network's LinkedIn profiles. Perfect for agencies

Google Sheets, HTTP Request, Slack
Social Media

This workflow runs daily and reads a Google Sheets content calendar to auto-publish scheduled posts to Instagram and Facebook via the Meta Graph API, then posts the same content to LinkedIn and update

Google Sheets, HTTP Request, LinkedIn
Social Media

Save time - Eliminate manual LinkedIn posting and content scheduling tasks Stay consistent - Automated daily posting keeps your LinkedIn profile active and engaging Keep control - Preview every post b

HTTP Request, Telegram, Google Sheets +2
Social Media

Louis LinkedIn Automation OS. Uses googleSheets. Scheduled trigger; 24 nodes.

Google Sheets