AutomationFlowsAI & RAG › Linkedin Lead Personalization with Google Drive, Apify & AI

Linkedin Lead Personalization with Google Drive, Apify & AI

ByMariela Slavenova @marielabg on n8n.io

This template enriches a lead list by analyzing each contact’s LinkedIn activity and auto-generating a single personalized opening line for cold outreach. Drop a spreadsheet into a Google Drive folder → the workflow parses rows, fetches LinkedIn content (recent post or profile),…

Event trigger★★★★☆ complexityAI-powered25 nodesAnthropic ChatTelegramHTTP RequestAgentGoogle Drive TriggerGoogle DriveOpenAISpreadsheet File
AI & RAG Trigger: Event Nodes: 25 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Google Drive recipe pattern — see all workflows that pair these two integrations.

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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "7452bd6f-2ff8-45bf-a617-6471f97b94ab",
      "name": "Anthropic Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        1360,
        1008
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-20250514",
          "cachedResultName": "Claude Sonnet 4"
        },
        "options": {
          "temperature": 0.7
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "827ba763-e599-4f7b-aed0-6e55961dd76f",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        784
      ],
      "parameters": {
        "color": 3,
        "width": 420,
        "height": 340,
        "content": "## Personalization based on LinkedIn Profile \n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4688d3a9-8f3d-4433-9a81-6aa74ee4468f",
      "name": "End of Loops",
      "type": "n8n-nodes-base.code",
      "position": [
        48,
        128
      ],
      "parameters": {
        "jsCode": "// Get items from previous nodes\nconst items = $input.all();\n\n// Create a message for Telegram\nlet message = \"\ud83d\udcca *Lead Enrichment Results:*\\n\\n\";\n\n// Add Google Sheet information using the provided syntax\nconst sheetName = $('Google Drive Trigger1').first().json.name;\nconst sheetUrl = $('Google Drive Trigger1').first().json.webViewLink;\n\n// Add sheet name and URL to message\nmessage += `*Sheet Name:* ${sheetName}\\n`;\nmessage += `*URL:* ${sheetUrl}\\n\\n`;\n\n// Process all items\nitems.forEach((item, index) => {\n  \n  // Check if item has json data\n  if (item.json) {\n    // Add score and status if available\n    if (item.json.score) message += `*Score:* ${item.json.score}\\n`;\n    if (item.json.status) message += `*Status:* ${item.json.status}\\n`;\n  }\n  \n  message += \"\\n\";\n});\n\n// Log for debugging\nconsole.log(\"Message prepared:\", message);\n\n// Return the message to be sent to Telegram\nreturn [{ json: { message } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "cb164d0f-899c-4279-9ba8-d41af5fca8bb",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1888,
        368
      ],
      "parameters": {
        "color": 5,
        "width": 420,
        "height": 360,
        "content": "## Update Google Sheet\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f1a71d1e-cccc-4420-8394-6f8799c463db",
      "name": "Lead Enrichment is ready",
      "type": "n8n-nodes-base.telegram",
      "position": [
        272,
        128
      ],
      "parameters": {
        "text": "={{ $json.message }}",
        "chatId": "[put your Telegram Bot Chat ID here]",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d5cc7599-1aa1-491e-ae20-086c15c752e2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 360,
        "content": "## Send Message to Telegram Bot\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "926d15a6-d8e6-451b-a234-ac709b1e0423",
      "name": "Personalization",
      "type": "n8n-nodes-base.set",
      "position": [
        1968,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a9fff8dc-60fe-4f51-84c1-9b942deeb3a7",
              "name": "personalization",
              "type": "string",
              "value": "={{ $json.output }}"
            },
            {
              "id": "bc443ef4-6be5-4f90-93bc-c4c8ee3502db",
              "name": "sheetId",
              "type": "string",
              "value": "={{ $('Google Drive Trigger1').first().json.id }}"
            },
            {
              "id": "557dc3cb-f021-4d93-94b4-bc3f47760ce8",
              "name": "FileName",
              "type": "string",
              "value": "={{ $('Google Drive Trigger1').first().json.name }}"
            },
            {
              "id": "ce35648a-c08b-4f22-b825-adb077faa8fe",
              "name": "SheetName",
              "type": "string",
              "value": "="
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f605f00d-d973-4919-859d-7475fb81662f",
      "name": "Colect LinkedIn Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1104,
        864
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/dev_fusion~linkedin-profile-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN_HERE your token here]",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"profileUrls\": [\"{{ $('Loop Over Items1').item.json.linkedinUrl }}\"]\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "Bearer [put your token here]"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "1b80dfc6-a55c-4ca9-a19d-7c97ba84f051",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1328,
        368
      ],
      "parameters": {
        "text": "=I need to create a personalized outreach message for a prospect. Please use this recent LinkedIn post from their profile and generate a single personalized sentence I can use in my outreach email.\n\nLinkedIn Post:\n{{ $('Scrape LinkedIn Profile Post').item.json.text }}\n\nContext: I own an AI automation agency focused on building Lead Generation Outreach and Lead Enrichment Systems. I'm reaching out to this person because their work appears relevant to our services.\n\nGenerate a single personalized sentence that references their LinkedIn activity in a natural, non-intrusive way that I can include in my outreach email. ",
        "options": {
          "systemMessage": "You are a LinkedIn Post Analyzer specialized in creating personalized outreach sentences. Your purpose is to examine the most recent LinkedIn posts from a prospect's profile and generate a single, authentic engagement sentence that can be used in cold email outreach.\n\nTASK:\n1. Use the most recent LinkedIn post provided in the user prompt.\n2. From the selected post, craft ONE personalized sentence (25-30 words maximum) that:\n   - References specific content from the post without appearing stalkerish\n   - Creates a genuine connection based on the post's content\n   - Uses conversational language that sounds natural in an email\n   - Avoids generic compliments or obvious flattery\n   - Maintains a professional tone while being personable\n\nIMPORTANT: Your output must ONLY contain the single personalized sentence with no labels or prefixes. Do not include \"Personalized Sentence:\" or any other text before your response. Do not include greetings, introductions, or closings. Focus solely on creating a natural reference to their LinkedIn post that demonstrates genuine interest in their professional perspective.\n\nThe output will be inserted directly into a CRM system with no human review, so it must be ready to use without any additional formatting or labels."
        },
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "2b9bb8f4-0ec5-4712-a181-2eab3c3f50e0",
      "name": "Anthropic Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        1328,
        528
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-20250514",
          "cachedResultName": "Claude Sonnet 4"
        },
        "options": {}
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "5a811cc3-b9f4-47a4-b2ad-a94aa0ffd50a",
      "name": "Scrape LinkedIn Profile Post",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        128,
        528
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/apimaestro~linkedin-profile-posts/run-sync-get-dataset-items?token=YOUR_TOKEN_HERE your token here]",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"limit\": 1,\n  \"username\": \"{{ $json.linkedinUrl }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "Bearer [put your token here]"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ccaa40f8-f471-4f6b-9cae-3a6a4383282a",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -96,
        512
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "db8d44e4-a0ce-4db2-b660-62043fc06101",
      "name": "Google Drive Trigger1",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -1008,
        512
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1-b1yzCQA8RzQmG4vOaGKzYY8iZQxKpvf",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1-b1yzCQA8RzQmG4vOaGKzYY8iZQxKpvf",
          "cachedResultName": "Clean Leads_Enrichment"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0fe1577c-db15-4973-968c-e8c9a5cf244b",
      "name": "Google Drive_DownLoad1",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -800,
        512
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "b20613a4-b475-4a1d-b146-723816431def",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        544,
        528
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are a LinkedIn Post Analyzer that determines if a profile has posts from the current year. Your sole purpose is to examine LinkedIn post data and determine if there are any posts from 2025.\nTASK:\nAnalyze the provided LinkedIn profile post data and determine:\n\nIf the profile has ANY posts\nIf any posts are from the current year (2025)\n\nOUTPUT FORMAT:\nYou must respond with EXACTLY ONE of these values:\n\n\"true\" - If there is at least one post from 2025\n\"false\" - If there are no posts from 2025\n\nDo not include any explanations, reasoning, or additional text - ONLY return \"true\" or \"false\" based on your analysis."
            },
            {
              "content": "=Examine the following LinkedIn profile data and determine if there are any posts from the current year - 2025.\nLinkedIn Profile Data:\n\nPost: {{ $('Scrape LinkedIn Profile Post').item.json.text }}\nDate: {{ $('Scrape LinkedIn Profile Post').item.json.posted_at.date }}\nCurrent Date: {{ $json.currentDate }}\n\nIf the data contains at least one post with a timestamp or date indicating it was posted in 2025, respond with only the word \"true\".\nIf the profile has no posts OR all posts are from years prior to 2025, respond with only the word \"false\".\nYour entire response must be ONLY \"true\" or \"false\" with no additional text."
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "45996741-f4a9-4d08-b48b-eeecce5e9614",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        432
      ],
      "parameters": {
        "width": 420,
        "height": 340,
        "content": "## Determines if the Linked Profile has a recent post \n"
      },
      "typeVersion": 1
    },
    {
      "id": "7d1ce1ea-ef57-45a4-9593-96abc904ff05",
      "name": "Date & Time",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        320,
        528
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "39a45d84-4d23-46fc-9226-37fd236dc807",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        400
      ],
      "parameters": {
        "color": 4,
        "width": 420,
        "height": 360,
        "content": "## Scrape LinkedIn Recent Post"
      },
      "typeVersion": 1
    },
    {
      "id": "41c6ba1b-0147-4d9e-bb80-5e83ab30af4b",
      "name": "If the LN post is in the last 30 days",
      "type": "n8n-nodes-base.if",
      "position": [
        992,
        528
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "345eb764-6267-4f0c-9147-07f827cf605b",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.message.content.result }}",
              "rightValue": "true"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "28798f9a-bd93-49f9-b8f9-54757c807ec6",
      "name": "AI Agent_Personalization_no LN post",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1408,
        864
      ],
      "parameters": {
        "text": "=Create ONE personalized, emotional opening sentence for a cold email to {{ $json.firstName }} {{ $json.lastName }} that will compel them to read further. Focus on our Lead Generation Sales System that saves time.\nOutput only the sentence, nothing else. \n",
        "options": {
          "systemMessage": "=You are a sales development expert crafting personalized cold email opening lines without website data.\n\nYour task is to create ONE compelling opening sentence for a cold email that will grab attention immediately. focus on:\n\n1. Using the name of the lead: {{ $json.firstName }}\n2. Using their headline: {{ $json.headline }}\n3. Using their LInkedIN about section: {{ $json.about }}\n4. Current company: {{ $json.experiences[0].subtitle }}\n5. Addressing a universal pain point related to lead generation that resonates with their likely business challenges\n6. Creating curiosity about our Lead Generation Sales System\n7. Mentioning a specific benefit (saving time, reducing costs, increasing conversion rates)\n8. Making it conversational and emotionally engaging (15-25 words maximum)\n\nOUR PRODUCT: We offer a Lead Generation Sales System that automates prospect qualification, outreach sequences and lead enrichment after booking. Key benefits include:\n- 60% reduction in time spent on manual prospecting\n- 40% lower customer acquisition costs\n- 3x higher quality leads through AI-powered targeting\n- Elimination of repetitive sales tasks\n\nTONE GUIDELINES:\n- Confident but not aggressive\n- Curious rather than presumptive\n- Focused on their potential gains, not their current problems\n- Conversational, as if from one professional to another\n\nEXAMPLES OF EXCELLENT OPENERS:\n- \"What if your sales team at [Company] could focus exclusively on closing while an automated system handles all prospecting, [First Name]?\"\n- \"The companies outperforming their competitors this quarter have one thing in common, [First Name]: they've eliminated manual lead generation entirely.\"\n- \"Imagine cutting your customer acquisition costs by 40% while simultaneously improving lead quality, [First Name] - that's what our system recently did for a company similar to [Company].\"\n- \"While researching innovative companies in the [derived industry] space, [Company]'s approach stood out as perfectly positioned to benefit from automated lead generation.\"\n\nRemember: ONE sentence only. Make it compelling enough that they WANT to read the next line of the email. "
        },
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "21ee9d5d-4cf7-4431-8beb-3958fbc8b039",
      "name": "Google Sheet Parse",
      "type": "n8n-nodes-base.spreadsheetFile",
      "position": [
        -608,
        512
      ],
      "parameters": {
        "options": {
          "headerRow": true
        }
      },
      "typeVersion": 1
    },
    {
      "id": "de275fe8-4798-4e48-9de0-f4d75576ea26",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        288
      ],
      "parameters": {
        "color": 4,
        "width": 420,
        "height": 340,
        "content": "## Personalization based on recent LN post\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4710c92f-74d3-49e5-abc7-ab7e5acae2d8",
      "name": "Code1",
      "type": "n8n-nodes-base.code",
      "position": [
        -384,
        512
      ],
      "parameters": {
        "jsCode": "// Process all items from Google Sheet Parse\nconst items = $input.all();\n\n// Map the items to a more usable format\nconst processedItems = items.map(item => {\n  return {\n    json: {\n      firstName: item.json['First Name'],\n      lastName: item.json['Last Name'],\n      company: item.json['Company Name for Emails'],\n      linkedinUrl: item.json['Person Linkedin Url'],\n      email: item.json['Email'],\n      website: item.json['Website'],\n      // Add any other fields you need from the sheet\n    }\n  };\n});\n\nreturn limitedItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "333b7a08-15fa-406f-8474-b222bffcc165",
      "name": "Google Sheets Update with Personalization",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2192,
        480
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $('Code1').item.json.email }}",
            "personalization": "={{ $json.personalization }}"
          },
          "schema": [
            {
              "id": "First Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "First Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Last Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Name for Emails",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company Name for Emails",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Linkedin Url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Linkedin Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Website",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "username",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "username",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "domain",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "personalization",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "personalization",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "=Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.sheetId }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "77f46864-2f96-4d90-a315-e8b7c31bc249",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        784
      ],
      "parameters": {
        "color": 4,
        "width": 300,
        "height": 280,
        "content": "## Scrape LinkedIn Profile\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Code1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "If the LN post is in the last 30 days",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Personalization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Date & Time": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "End of Loops": {
      "main": [
        [
          {
            "node": "Lead Enrichment is ready",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Personalization": {
      "main": [
        [
          {
            "node": "Google Sheets Update with Personalization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [
          {
            "node": "End of Loops",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Scrape LinkedIn Profile Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheet Parse": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Colect LinkedIn Data": {
      "main": [
        [
          {
            "node": "AI Agent_Personalization_no LN post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent_Personalization_no LN post",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Anthropic Chat Model3": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger1": {
      "main": [
        [
          {
            "node": "Google Drive_DownLoad1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive_DownLoad1": {
      "main": [
        [
          {
            "node": "Google Sheet Parse",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape LinkedIn Profile Post": {
      "main": [
        [
          {
            "node": "Date & Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent_Personalization_no LN post": {
      "main": [
        [
          {
            "node": "Personalization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If the LN post is in the last 30 days": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Colect LinkedIn Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Update with Personalization": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "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 template enriches a lead list by analyzing each contact’s LinkedIn activity and auto-generating a single personalized opening line for cold outreach. Drop a spreadsheet into a Google Drive folder → the workflow parses rows, fetches LinkedIn content (recent post or profile),…

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.

@Blotato/N8N Nodes Blotato, Google Sheets, OpenAI Chat +9
AI & RAG

This template is designed for marketers, content creators, and e-commerce brands who want to automate the creation of professional ad videos at scale. It’s ideal for teams looking to generate consiste

Telegram, Telegram Trigger, Google Drive +8
AI & RAG

This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.

OpenAI Chat, Memory Buffer Window, Output Parser Structured +11
AI & RAG

This workflow is designed for marketers, content creators, agencies, and solo founders who want to publish long‑form posts with visuals on autopilot using n8n and AI agents. ​

Tool Http Request, Agent, HTTP Request +27
AI & RAG

Create Video Ia. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 47 nodes.

@Blotato/N8N Nodes Blotato, Google Sheets, OpenAI Chat +8