This workflow corresponds to n8n.io template #16525 — we link there as the canonical source.
This workflow follows the Agent → Google Sheets 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 →
{
"id": "DbrOUruC36jgbUrh",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Automated LinkedIn Engagement Oppurtunities Finder",
"tags": [],
"nodes": [
{
"id": "e6070c2f-3633-4dd0-8a63-9d5e384e2ea4",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
5264,
1520
],
"parameters": {
"width": 480,
"height": 896,
"content": "## Automated LinkedIn Engagement Oppurtunities Finder\n\n### How it works\n\n1. Fetch LinkedIn data from Apify and Google Sheets.\n2. Process profiles using AI agents to filter opportunities.\n3. Save valid results back to Google Sheets. \n4. Perform additional actor lookups.\n5. Notify the team via Slack notifications.\n\n### Setup steps\n\n- - [ ] Configure Apify API credentials and required actor parameters.\n- - [ ] Set up Google Sheets service account with access to the target documents.\n- - [ ] Add Gemini API credentials for the AI Agent nodes.\n- - [ ] Configure the Slack webhook URL for notifications.\n\n### Customization\n\nAdjust the AI model temperature in the agent nodes to refine the filtering criteria for opportunity matching."
},
"typeVersion": 1
},
{
"id": "953854f0-8b89-4488-ab53-cd31873d6aa2",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
5824,
1520
],
"parameters": {
"color": 7,
"width": 1088,
"height": 464,
"content": "## Initialize and fetch data\n\nInitializes the workflow with ICP parameters and gathers source data."
},
"typeVersion": 1
},
{
"id": "db850744-d317-4877-9a84-8f159b2a8f5c",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
6944,
1616
],
"parameters": {
"color": 7,
"width": 576,
"height": 480,
"content": "## Save posts and evaluate AI\n\nSaves processed posts and uses AI to evaluate opportunities."
},
"typeVersion": 1
},
{
"id": "b7d8a010-8a63-4ce6-9d02-3554dfef0fac",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
7552,
1600
],
"parameters": {
"color": 7,
"width": 416,
"height": 320,
"content": "## Filter and save opportunities\n\nFilters and records the qualified AI-rated opportunities."
},
"typeVersion": 1
},
{
"id": "e9e49ba8-f2d0-4551-8d45-5a61305890b2",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
8000,
1600
],
"parameters": {
"color": 7,
"height": 304,
"content": "## Aggregate AI rated data\n\nAggregates results and prepares for profile lookups."
},
"typeVersion": 1
},
{
"id": "8a0365b2-f8dc-43b5-9a0e-c1d4a72c8b43",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
8272,
1600
],
"parameters": {
"color": 7,
"width": 416,
"height": 304,
"content": "## Check existing profiles limit\n\nFetches existing profiles and limits the data processing."
},
"typeVersion": 1
},
{
"id": "3289de85-c5eb-4c89-bed8-424ee6654855",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
8720,
1600
],
"parameters": {
"color": 7,
"width": 992,
"height": 480,
"content": "## Process actor and notify team\n\nProcesses actor data with AI and saves the outcome."
},
"typeVersion": 1
},
{
"id": "534ef4ed-f878-4ba8-9160-8158fd4ad4bc",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
5840,
2096
],
"parameters": {
"color": 7,
"width": 400,
"height": 304,
"content": "## Send opportunity via Slack\n\nSecondary trigger to send opportunity notifications."
},
"typeVersion": 1
},
{
"id": "0d428af6-b493-4c11-a0c8-9a4832b86486",
"name": "Run Apify Actor",
"type": "@apify/n8n-nodes-apify.apify",
"position": [
6320,
1632
],
"parameters": {
"actorId": {
"__rl": true,
"mode": "list",
"value": "buIWk2uOUzTmcLsuB",
"cachedResultUrl": "https://console.apify.com/actors/buIWk2uOUzTmcLsuB/input",
"cachedResultName": "Linkedin Post Search Scraper (No Cookies) (harvestapi/linkedin-post-search)"
},
"operation": "Run actor and get dataset",
"customBody": "{\n \"maxPosts\": 20,\n \"maxReactions\": 5,\n \"postNestedComments\": false,\n \"postNestedReactions\": false,\n \"postedLimit\": \"24h\",\n \"scrapeComments\": false,\n \"scrapeReactions\": false,\n \"searchQueries\": [\n \"b2b sales\"\n ],\n \"sortBy\": \"relevance\",\n \"profileScraperMode\": \"short\",\n \"startPage\": 1,\n \"reactionsProfileScraperMode\": \"short\",\n \"commentsProfileScraperMode\": \"short\"\n}"
},
"credentials": {
"apifyApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "40f382f3-3cc2-4e4d-bcf7-80bb9309a30e",
"name": "Read LinkedIn Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
6320,
1824
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit?usp=drivesdk",
"cachedResultName": "Linkedin_Outreach_oppurtunities"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "ef9510f5-d40a-48be-8771-971c28245dc9",
"name": "Merge Source Data",
"type": "n8n-nodes-base.merge",
"position": [
6544,
1728
],
"parameters": {
"mode": "combine",
"options": {},
"joinMode": "keepNonMatches",
"outputDataFrom": "input1",
"fieldsToMatchString": "id"
},
"typeVersion": 3.2
},
{
"id": "7c718910-cd02-4855-ac28-bd3e04804e88",
"name": "Opportunity Evaluator Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
7216,
1728
],
"parameters": {
"text": "=Post content: {{ $json.post_content }}\nGive confidence only the percentage for 100. eg. 95/100",
"options": {
"systemMessage": "=You are an expert B2B Social Selling Strategist and Lead Generation Analyst. Your objective is to analyze scraped LinkedIn posts and determine if they present a high-value opportunity for our agency to engage via a comment to attract our Ideal Customer Profile (ICP).\n\n**Our Business Context:**\n{{ $('Set ICP Parameters').item.json.ICP }}\n\n**Evaluation Criteria for a \"True\" Opportunity:**\nFlag the post as `true` ONLY if it meets at least one of these conditions:\n1. Pain Points: The author mentions struggles with lead generation, sales pipelines, outreach volume, CRM data entry, or marketing inefficiencies.\n2. Seeking Solutions: The author asks for recommendations on tools, workflows, or strategies to scale or improve sales/marketing operations.\n3. Relevant Discourse: The post discusses scaling, modernizing B2B sales, or automation where we can drop a high-value, non-promotional expert perspective.\n\n**Exclusion Criteria (Flag as \"False\"):**\n- Generic motivational posts, \"broetry,\" or personal updates.\n- Direct competitors promoting their own AI/automation services.\n- Standard job postings or hiring announcements.\n- Posts just sharing a link without substantive commentary.\n\n**Output Format Requirements:**\nYou must return your analysis STRICTLY as a valid JSON object. Do not wrap the JSON in markdown code blocks. Do not include any conversational text."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "7df002fe-c415-4d2f-a3d8-1eed0d4f32c0",
"name": "Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
7168,
1936
],
"parameters": {
"options": {},
"modelName": "models/gemini-3.1-flash-lite"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "da615ac1-7914-4d2e-9890-311aa16a8545",
"name": "If Opportunity Qualified",
"type": "n8n-nodes-base.if",
"position": [
7600,
1728
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "87b2fac1-b993-446c-8f29-1d9424038029",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ parseInt($json.output.confidence_score) }}",
"rightValue": 80
},
{
"id": "c2c45010-c05e-4aae-8886-bf09783b9496",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.output.is_opportunity }}",
"rightValue": ""
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.3
},
{
"id": "eaae92a7-8f72-46f8-8d61-7c2b8aaa3777",
"name": "Set ICP Parameters",
"type": "n8n-nodes-base.set",
"position": [
6096,
1728
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2a7ef3fe-260d-4b7e-96c1-d823a75a9afd",
"name": "ICP",
"type": "string",
"value": "We are blankarray an AI automation company, I do work for b2b companies and automate thier sales & marketing pipelines."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ea5a4f69-76d1-4e1c-952d-7807d1dab951",
"name": "Parse Opportunity Output",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
7360,
1952
],
"parameters": {
"jsonSchemaExample": "{\n \"is_opportunity\": \"boolean\",\n \"confidence_score\": \"1-100)\",\n \"reasoning\": \"A concise 1-2 sentence explanation of why this post is or isn't a fit.\",\n \"comment_angle\": \"If true, provide a 1-sentence strategic angle on how we should comment (e.g., 'Share how AI agents can automate this specific manual step.'). If false, output null.\"\n}"
},
"typeVersion": 1.3
},
{
"id": "09887e04-ceea-4ee3-9c43-c5a614493697",
"name": "Gemini Chat Model Profile",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
8960,
1936
],
"parameters": {
"options": {},
"modelName": "models/gemini-3.1-flash-lite"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "1e584260-8cfc-4e4b-ba20-844ef7df2515",
"name": "Profile Analyzer Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
8992,
1712
],
"parameters": {
"text": "=### Basic Profile Data\n\n* **First Name:** `{{ $json.firstName }}`\n* **Last Name:** `{{ $json.lastName }}`\n* **LinkedIn Profile:** `{{ $json.linkedinUrl }}`\n* **Location:** `{{ $json.location.parsed.text }}`\n* **Headline:** `{{ $json.headline }}`\n* **About / Summary:** `{{ $json.about }}`\n\n### Current Position (First item in the array)\n\n* **Current Title:** `{{ $json.currentPosition[0].position }}`\n* **Current Company:** `{{ $json.currentPosition[0].companyName }}`\n* **Current Start Date:** `{{ $json.currentPosition[0].startDate.text }}`\n\n### Past Experience (Second item in the experience array)\n\n* **Past Title:** `{{ $json.experience[1].position }}`\n* **Past Company:** `{{ $json.experience[1].companyName }}`\n* **Past Start Date:** `{{ $json.experience[1].startDate.text }}`\n\n### Education (First item in the array)\n\n* **School Name:** `{{ $json.education[0].schoolName }}`\n* **Degree:** `{{ $json.education[0].degree }}`\n* **Field of Study:** `{{ $json.education[0].fieldOfStudy }}`\n\n Skills:\n{{ $json.skills.map(skill => skill.name).join(', ') }}\n\nCERTIFICATES:\n{{ $json.certifications.map(cert => cert.title).join(', ') }}\n",
"options": {
"systemMessage": "=You are an expert B2B Lead Qualification Engine and ICP Matching AI. \n\nYour strict objective is to evaluate a candidate's professional profile against a defined Ideal Customer Profile (ICP) and determine if they are a qualified target.\n\n### IDEAL CUSTOMER PROFILE (ICP) TO MATCH AGAINST:\n{{ $('Set ICP Parameters').first().json.ICP }}\n\n### YOUR INSTRUCTIONS:\n1. Analyze the provided Profile Data (Contact, Summary, Roles, Education, Skills, and Certifications).\n2. Compare the profile attributes directly against the ICP requirements.\n3. Weigh seniority, current/past roles, and stated skills heavily. Look for semantic matches (e.g., \"Cybersecurity Leader\" matches \"CISO\").\n5. Generate a qualification score from 0 to 100 based on alignment.\n\n### REQUIRED OUTPUT FORMAT:\nYou must return your analysis as a valid, raw JSON object. Do not include markdown formatting like \\`\\`\\`json. Output EXACTLY the given structure\n"
},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 3.1
},
{
"id": "0a7de076-280e-42f0-8fa7-c3523811c695",
"name": "Run Profile Scraper Actor",
"type": "@apify/n8n-nodes-apify.apify",
"position": [
8768,
1728
],
"parameters": {
"actorId": {
"__rl": true,
"mode": "id",
"value": "LpVuK3Zozwuipa5bp"
},
"operation": "Run actor and get dataset",
"customBody": "={\n \"profileScraperMode\": \"Profile details no email ($4 per 1k)\",\n \"queries\": [\n \"{{ $json.post_author_profile }}\"\n ]\n}"
},
"credentials": {
"apifyApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e36dd8cd-9032-4210-95d4-59df52744681",
"name": "Parse Profile Output",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
9168,
1952
],
"parameters": {
"jsonSchemaExample": "{\n \"is_match\": true,\n \"qualification_score\": \"0-100\",\n \"executive_summary\": \"A 2-sentence summary of why this candidate is or isn't a fit.\"\n}"
},
"typeVersion": 1.3
},
{
"id": "6635bf93-b062-40f2-8306-cb69c9f789de",
"name": "Update Profile in Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
9344,
1712
],
"parameters": {
"columns": {
"value": {
"About": "={{ $('Run Profile Scraper Actor').item.json.about }}",
"match": "={{ $json.output.is_match }}",
"Degree": "={{ $('Run Profile Scraper Actor').item.json.profileTopEducation[0].degree }}",
"Skills": "={{ $('Run Profile Scraper Actor').item.json.skills }}",
"Headline": "={{ $('Run Profile Scraper Actor').item.json.headline }}",
"Location": "={{ $('Run Profile Scraper Actor').item.json.location.parsed.text }}",
"Last Name": "={{ $('Run Profile Scraper Actor').item.json.lastName }}",
"First Name": "={{ $('Run Profile Scraper Actor').item.json.firstName }}",
"School Name": "={{ $('Run Profile Scraper Actor').item.json.profileTopEducation[0].schoolName }}",
"Current Title": "={{ $('Run Profile Scraper Actor').item.json.currentPosition[0].position }}",
"Certifications": "={{ $('Run Profile Scraper Actor').item.json.certifications }}",
"Field of Study": "={{ $('Run Profile Scraper Actor').item.json.profileTopEducation[0].fieldOfStudy }}",
"Current Company": "={{ $('Run Profile Scraper Actor').item.json.currentPosition[0].companyName }}",
"LinkedIn Profile": "={{ $('Run Profile Scraper Actor').item.json.linkedinUrl }}",
"confidence_score": "={{ $json.output.qualification_score }}",
"executive_summary": "={{ $json.output.executive_summary }}",
"Current Start Date": "={{ $('Run Profile Scraper Actor').item.json.currentPosition[0].startDate.text }}"
},
"schema": [
{
"id": "First Name",
"type": "string",
"display": true,
"required": false,
"displayName": "First Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Last Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn Profile",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "LinkedIn Profile",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "match",
"type": "string",
"display": true,
"required": false,
"displayName": "match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "confidence_score",
"type": "string",
"display": true,
"required": false,
"displayName": "confidence_score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "executive_summary",
"type": "string",
"display": true,
"required": false,
"displayName": "executive_summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Location",
"type": "string",
"display": true,
"required": false,
"displayName": "Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Headline",
"type": "string",
"display": true,
"required": false,
"displayName": "Headline",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "About",
"type": "string",
"display": true,
"required": false,
"displayName": "About",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Current Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Current Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Current Company",
"type": "string",
"display": true,
"required": false,
"displayName": "Current Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Current Start Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Current Start Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Past Title",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Past Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Past Company",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Past Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Past Start Date",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Past Start Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "School Name",
"type": "string",
"display": true,
"required": false,
"displayName": "School Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Degree",
"type": "string",
"display": true,
"required": false,
"displayName": "Degree",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Field of Study",
"type": "string",
"display": true,
"required": false,
"displayName": "Field of Study",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Skills",
"type": "string",
"display": true,
"required": false,
"displayName": "Skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Certifications",
"type": "string",
"display": true,
"required": false,
"displayName": "Certifications",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"LinkedIn Profile"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/187HJg-iPgjnbcPL4rMU094z9U6-6jzy_CsQZ_pw4Bbk/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "187HJg-iPgjnbcPL4rMU094z9U6-6jzy_CsQZ_pw4Bbk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/187HJg-iPgjnbcPL4rMU094z9U6-6jzy_CsQZ_pw4Bbk/edit?usp=drivesdk",
"cachedResultName": "Profile_scraper"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "2468362b-5ce4-4248-9686-33d4cc21b716",
"name": "Save Unique Posts to Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
6992,
1728
],
"parameters": {
"columns": {
"value": {
"id": "={{ $json.id }}",
"post_link": "={{ $json.linkedinUrl }}",
"posted_at": "={{ $json.postedAt.date }}",
"profile_tag": "={{ $json.author.info }}",
"post_content": "={{ $json.content }}",
"post_author_profile": "={{ $json.author.linkedinUrl.split('?')[0] }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "post_link",
"type": "string",
"display": true,
"required": false,
"displayName": "post_link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "post_content",
"type": "string",
"display": true,
"required": false,
"displayName": "post_content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "post_author_profile",
"type": "string",
"display": true,
"required": false,
"displayName": "post_author_profile",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "profile_tag",
"type": "string",
"display": true,
"required": false,
"displayName": "profile_tag",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "posted_at",
"type": "string",
"display": true,
"required": false,
"displayName": "posted_at",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit?usp=drivesdk",
"cachedResultName": "Linkedin_Outreach_oppurtunities"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "7a24f1c1-83b2-4218-8cdd-1e52d8a08f07",
"name": "Update Evaluated Opportunity",
"type": "n8n-nodes-base.googleSheets",
"position": [
7824,
1712
],
"parameters": {
"columns": {
"value": {
"id": "={{ $('Merge Source Data').item.json.id }}",
"reasoning": "={{ $json.output.reasoning }}",
"comment_angle": "={{ $json.output.comment_angle }}",
"confidence_score": "={{ parseInt($json.output.confidence_score) }}",
"comment_oppurtunity": "true"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "post_link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "post_link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "post_content",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "post_content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "post_author_profile",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "post_author_profile",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "profile_tag",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "profile_tag",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "posted_at",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "posted_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "comment_oppurtunity",
"type": "string",
"display": true,
"required": false,
"displayName": "comment_oppurtunity",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "confidence_score",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "confidence_score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reasoning",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "reasoning",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "comment_angle",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "comment_angle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit?usp=drivesdk",
"cachedResultName": "Linkedin_Outreach_oppurtunities"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "532c7d28-68a2-4518-8484-bce359ddcb0e",
"name": "Read Shortlisted Profiles Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
8320,
1728
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/187HJg-iPgjnbcPL4rMU094z9U6-6jzy_CsQZ_pw4Bbk/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "187HJg-iPgjnbcPL4rMU094z9U6-6jzy_CsQZ_pw4Bbk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/187HJg-iPgjnbcPL4rMU094z9U6-6jzy_CsQZ_pw4Bbk/edit?usp=drivesdk",
"cachedResultName": "Profile_scraper"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "ebc6e7eb-1c6b-477c-a137-7ed0416f982c",
"name": "Filter Existing Profiles",
"type": "n8n-nodes-base.code",
"position": [
8544,
1728
],
"parameters": {
"jsCode": "// Get all items from the Limit node\nconst limitItems = $('Save Unique Posts to Sheets').all();\n\n// Get all items coming into this Code node\nconst inputItems = $input.all();\n\n// Normalize helper - lowercase, trim, strip trailing slash for safer comparison\nfunction normalize(url) {\n if (!url) return '';\n return url.toString().trim().toLowerCase().replace(/\\/+$/, '');\n}\n\n// Build a Set of all LinkedIn Profile URLs from the input\nconst inputProfileSet = new Set(\n inputItems\n .map(item => normalize(item.json['LinkedIn Profile']))\n .filter(url => url !== '')\n);\n\n// Filter Limit items: keep only those whose post_author_profile\n// does NOT match any LinkedIn Profile in the input\nconst uniqueItems = limitItems.filter(item => {\n const profileUrl = normalize(item.json.post_author_profile);\n return profileUrl !== '' && !inputProfileSet.has(profileUrl);\n});\n\n// Return the unique items (deduped by profile url, keeping first occurrence)\nconst seen = new Set();\nconst result = [];\n\nfor (const item of uniqueItems) {\n const profileUrl = normalize(item.json.post_author_profile);\n if (!seen.has(profileUrl)) {\n seen.add(profileUrl);\n result.push({\n json: {\n post_author_profile: item.json.post_author_profile\n }\n });\n }\n}\n\nreturn result;"
},
"typeVersion": 2
},
{
"id": "9ce8a55a-a696-4d30-b708-b4f830688423",
"name": "Send Slack Notification",
"type": "n8n-nodes-base.slack",
"position": [
9568,
1712
],
"parameters": {
"text": "=Shortlisted a Linkedin profile for Connection Request: {{ $('Filter Existing Profiles').item.json.post_author_profile }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0B8VH1M5PX",
"cachedResultName": "general"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.5
},
{
"id": "ac022e81-930c-4da8-8560-0a52c161a7ba",
"name": "Limit to 2 Items",
"type": "n8n-nodes-base.limit",
"position": [
6768,
1728
],
"parameters": {
"maxItems": 2
},
"typeVersion": 1
},
{
"id": "a1333b2f-ab9b-4f86-a9a2-43be0fa63199",
"name": "Aggregate Processed Items",
"type": "n8n-nodes-base.aggregate",
"position": [
8048,
1728
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "1e9d236e-c575-46e8-80e7-bdda060a76f0",
"name": "When Row Added in Sheets",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
5888,
2224
],
"parameters": {
"event": "rowUpdate",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110fWQXqWcQnve7AOidnQiA0crnvmSP65VgLSDoLcQmY/edit?usp=drivesdk",
"cachedResultName": "Linkedin_Outreach_oppurtunities"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "83f58029-96b5-4a59-8a7c-687629502cef",
"name": "Send Comment Alert to Slack",
"type": "n8n-nodes-base.slack",
"position": [
6096,
2224
],
"parameters": {
"text": "=We have found you a comment oppurtunity from linkedin in your niche.\nPost Link:{{ $json.post_link }}\nReasoning:{{ $json.reasoning }}\nComment Angle: {{ $json.comment_angle }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0B8VH1M5PX",
"cachedResultName": "general"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.5
},
{
"id": "35ad8b7b-b277-4928-aac0-9b178d5e6e75",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
5872,
1728
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.3
}
],
"active": true,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "0f818969-023e-40e7-9077-38be7e37e68e",
"nodeGroups": [],
"connections": {
"Run Apify Actor": {
"main": [
[
{
"node": "Merge Source Data",
"type": "main",
"index": 0
}
]
]
},
"Limit to 2 Items": {
"main": [
[
{
"node": "Save Unique Posts to Sheets",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Set ICP Parameters",
"type": "main",
"index": 0
}
]
]
},
"Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Opportunity Evaluator Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Merge Source Data": {
"main": [
[
{
"node": "Limit to 2 Items",
"type": "main",
"index": 0
}
]
]
},
"Set ICP Parameters": {
"main": [
[
{
"node": "Run Apify Actor",
"type": "main",
"index": 0
},
{
"node": "Read LinkedIn Sheet",
"type": "main",
"index": 0
}
]
]
},
"Read LinkedIn Sheet": {
"main": [
[
{
"node": "Merge Source Data",
"type": "main",
"index": 1
}
]
]
},
"Parse Profile Output": {
"ai_outputParser": [
[
{
"node": "Profile Analyzer Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Profile Analyzer Agent": {
"main": [
[
{
"node": "Update Profile in Sheets",
"type": "main",
"index": 0
}
]
]
},
"Filter Existing Profiles": {
"main": [
[
{
"node": "Run Profile Scraper Actor",
"type": "main",
"index": 0
}
]
]
},
"If Opportunity Qualified": {
"main": [
[
{
"node": "Update Evaluated Opportunity",
"type": "main",
"index": 0
}
],
[]
]
},
"Parse Opportunity Output": {
"ai_outputParser": [
[
{
"node": "Opportunity Evaluator Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Update Profile in Sheets": {
"main": [
[
{
"node": "Send Slack Notification",
"type": "main",
"index": 0
}
]
]
},
"When Row Added in Sheets": {
"main": [
[
{
"node": "Send Comment Alert to Slack",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Processed Items": {
"main": [
[
{
"node": "Read Shortlisted Profiles Sheet",
"type": "main",
"index": 0
}
]
]
},
"Gemini Chat Model Profile": {
"ai_languageModel": [
[
{
"node": "Profile Analyzer Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Run Profile Scraper Actor": {
"main": [
[
{
"node": "Profile Analyzer Agent",
"type": "main",
"index": 0
}
]
]
},
"Opportunity Evaluator Agent": {
"main": [
[
{
"node": "If Opportunity Qualified",
"type": "main",
"index": 0
}
]
]
},
"Save Unique Posts to Sheets": {
"main": [
[
{
"node": "Opportunity Evaluator Agent",
"type": "main",
"index": 0
}
]
]
},
"Update Evaluated Opportunity": {
"main": [
[
{
"node": "Aggregate Processed Items",
"type": "main",
"index": 0
}
]
]
},
"Read Shortlisted Profiles Sheet": {
"main": [
[
{
"node": "Filter Existing 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.
apifyApigoogleApigooglePalmApigoogleSheetsTriggerOAuth2ApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Youtube Video: https://youtu.be/ehsagyRmri4
Source: https://n8n.io/workflows/16525/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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.
CV → Match → Screen → Decide, all automated
Streamline your recruitment process with AI-powered resume analysis that goes beyond keyword matching.
🪄 Prompt To Video (MagicHour API) with Music & YouTube
This workflow is ideal for venture capitalists, sales teams, or market researchers who need to automatically track and compile lists of recently funded companies.