{"workflow":{"id":13185,"name":"Scrape LinkedIn comments and score lead intent using ConnectSafely, Azure OpenAI, and Google Sheets","views":141,"recentViews":0,"totalViews":141,"createdAt":"2026-02-03T11:28:06.148Z","description":"## 📊 Description\nAutomate LinkedIn lead discovery by identifying high-intent prospects directly from post comments using ConnectSafely and AI 🤖. This workflow searches LinkedIn posts related to common sales pain points, extracts all comments safely, and evaluates each commenter’s buying intent using AI. The scored leads are automatically stored in Google Sheets for easy follow-up and prioritization 📈. Perfect for sales, growth, and RevOps teams looking to turn conversations into qualified opportunities.\n\n## 🔍 What This Template Does\n🔎 Searches LinkedIn posts via SerpAPI using predefined pain-point keywords\n🔗 Filters and validates relevant LinkedIn post URLs\n🛡️ Fetches all post comments using ConnectSafely (safe, compliant LinkedIn access)\n📄 Flattens comments into individual lead records\n🤖 Uses AI to analyze each comment and score buying intent (0–100)\n📊 Saves enriched lead data into Google Sheets automatically\n\n## ✅ Key Benefits\n✅ Discover warm LinkedIn leads from real conversations\n✅ Uses ConnectSafely for reliable and compliant comment extraction\n✅ AI-powered intent scoring removes manual lead qualification\n✅ Automatically prioritizes high-intent prospects\n✅ Centralized lead tracking in Google Sheets\n✅ Zero manual scraping or copy-pasting\n\n## ⚙️ Features\n- LinkedIn post discovery via SerpAPI\n- Comment scraping powered by ConnectSafely\n- AI intent detection using Azure OpenAI (GPT-4o-mini)\n- Intent labels: No-Intent → High-Intent\n- Google Sheets integration for lead storage\n- Modular, customizable n8n workflow\n\n## 🔐 Requirements\n- SerpAPI account\n- ConnectSafely LinkedIn API credentials\n- Azure OpenAI account (GPT-4o-mini deployment)\n- Google Sheets OAuth credentials\n- n8n instance (self-hosted or cloud)\n\n## 🎯 Target Audience\n- B2B sales teams & SDRs\n- Growth marketers & lead generation agencies\n- RevOps & automation specialists\n- Founders using LinkedIn for outbound prospecting\n","workflow":{"id":"Vt9g1PaZtILHlmma","meta":{"instanceId":"8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177","templateCredsSetupCompleted":true},"name":"LinkedIn Post Scraping & Lead Intent Scorer","tags":[],"nodes":[{"id":"9b77dd56-68b5-418c-a142-a3537374c6c7","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-528,1040],"parameters":{},"typeVersion":1},{"id":"4ad7e46d-e4fd-4646-be54-70a2038a0c1a","name":"Main Overview","type":"n8n-nodes-base.stickyNote","position":[-1104,768],"parameters":{"color":4,"width":480,"height":824,"content":"### How it works\n\nThis workflow scrapes LinkedIn posts that signal lead-generation pain points, extracts every comment on those posts, scores each commenter for buying intent using AI, and saves the ranked leads to a Google Sheet for follow-up.\n\n**Data flow:**\n1. A Google search (via SerpAPI) finds LinkedIn posts matching pain-point keywords such as \"missed leads\" or \"low conversion rate\".\n2. Raw search results are parsed and filtered to keep only valid LinkedIn post URLs.\n3. ConnectSafely fetches all comments on each post.\n4. Comments are flattened into individual rows.\n5. An AI agent (Azure OpenAI GPT-4o-mini) scores each comment on a 0–100 intent scale.\n6. Parsed intent scores are appended to a Google Sheet.\n\n### Setup steps\n\n1. **SerpAPI** – Add your SerpAPI credential in the \"Search LinkedIn Posts\" node.\n2. **ConnectSafely** – Configure your ConnectSafely account credential (account ID required).\n3. **Azure OpenAI** – Add an Azure OpenAI credential with access to the gpt-4o-mini model.\n4. **Google Sheets** – Ensure the target sheet exists with columns: post_url, lead name, comment, intent score, intent label.\n\n### Customization\n\n- Edit the SerpAPI query keywords to target different pain points.\n- Adjust the intent-scoring prompt or thresholds inside the AI agent's system message.\n- Change the Google Sheet document ID or sheet name in the final node."},"typeVersion":1},{"id":"26b9f48a-b5fc-417a-ba77-58d3a685be55","name":"Section: Search & Scrape","type":"n8n-nodes-base.stickyNote","position":[-560,880],"parameters":{"color":5,"width":700,"height":116,"content":"## Search & Scrape\n\nTriggers a Google search for pain-point posts on LinkedIn, parses the results, and fetches comments from each matched post via ConnectSafely."},"typeVersion":1},{"id":"f014517f-3998-4c2b-baa0-496b1be32683","name":"Section: Comment Processing","type":"n8n-nodes-base.stickyNote","position":[192,816],"parameters":{"color":5,"width":260,"height":196,"content":"## Comment Processing\n\nReceives raw comment arrays from each post and flattens them into individual rows, one per commenter, ready for AI scoring."},"typeVersion":1},{"id":"64cea62a-6624-49b0-a2f1-41329dd61953","name":"Section: AI Intent Scoring","type":"n8n-nodes-base.stickyNote","position":[496,864],"parameters":{"color":5,"width":600,"height":100,"content":"## AI Intent Scoring\n\nEach comment is analysed by an AI agent that returns a 0–100 intent score and a label (no-intent → high-intent). Output is parsed into clean rows."},"typeVersion":1},{"id":"d3084ff1-14ff-4ad9-b601-bc923b41a772","name":"Warning: SerpAPI","type":"n8n-nodes-base.stickyNote","position":[-336,1248],"parameters":{"color":2,"width":268,"height":136,"content":"⚠️ **SerpAPI Key Required**\n\nThis node calls the Google Search API. A valid SerpAPI credential must be configured, or every execution will fail at this step."},"typeVersion":1},{"id":"1a50334f-cfcb-41fe-8652-967df975a40e","name":"Warning: ConnectSafely","type":"n8n-nodes-base.stickyNote","position":[80,1216],"parameters":{"color":2,"width":252,"height":152,"content":"⚠️ **ConnectSafely Credential Required**\n\nFetching post comments depends on an active ConnectSafely account. An invalid or expired API key will block the entire scrape."},"typeVersion":1},{"id":"5be1f1fb-c185-4d54-a2aa-6fe5674bae5d","name":"Warning: Azure OpenAI","type":"n8n-nodes-base.stickyNote","position":[576,1232],"parameters":{"color":2,"width":268,"height":152,"content":"⚠️ **Azure OpenAI Credential Required**\n\nThe AI intent agent uses gpt-4o-mini. Ensure the Azure deployment name matches and the credential is active; otherwise scoring will fail."},"typeVersion":1},{"id":"1b825249-cc0d-46d5-9399-4b0a54e11f64","name":"Search LinkedIn Posts via SerpAPI","type":"n8n-nodes-serpapi.serpApi","position":[-288,1040],"parameters":{"q":"site:linkedin.com/posts (\"Missed leads\" OR \"Losing leads\" OR \"Low conversion rate\" OR \"Leads not converting\")","requestOptions":{},"additionalFields":{}},"credentials":{"serpApi":{"id":"ygeVyEEazMdTsV3u","name":"SerpApi account -anuj"}},"typeVersion":1},{"id":"8b562ae9-e9e4-4c5f-808f-6c627d9ac2b9","name":"Fetch Post Comments via ConnectSafely","type":"n8n-nodes-connectsafely-ai.connectSafelyLinkedIn","position":[144,1040],"parameters":{"postUrl":"={{ $json.post_url }}","accountId":"695ce64a09c18d6bbbe90ed0","operation":"getAllPostComments"},"credentials":{"connectSafelyApi":{"id":"cqSBkVe2jpKAV6PK","name":"ConnectSafely account-rahul sir"}},"typeVersion":1},{"id":"1d901be4-4abd-44ce-9c9d-7597381d84a8","name":"Parse & Filter Search Results","type":"n8n-nodes-base.code","position":[-96,1040],"parameters":{"jsCode":"// ---------------------------\n// COLLECT ALL POSSIBLE RESULTS\n// ---------------------------\nconst data = items[0].json;\n\nconst results = [\n  ...(data.organic_results || []),\n  ...(data.inline_results || []),\n  ...(data.discussions || []),\n  ...(data.forums || []),\n];\n\nconst problemKeywords = [\n  'problem',\n  'issue',\n  'manual',\n  'not working',\n  'struggling',\n  'pain',\n  'challenge',\n  'empty',\n  'ghosted',\n  'ghosting',\n  'not enough',\n  'low',\n  'hard',\n  'difficult',\n  'miss',\n  'failing'\n];\n\nconst output = results.map(post => {\n  const postUrl = post.link || '';\n  let platform = 'Unknown';\n  let username = null;\n  let postId = null;\n  let authorName = null;\n\n  // ---------------------------\n  // LINKEDIN DETECTION\n  // ---------------------------\n  if (/linkedin\\.com\\/posts\\//i.test(postUrl)) {\n    platform = 'LinkedIn';\n\n    const match = postUrl.match(/linkedin\\.com\\/posts\\/([^_]+).*?(\\d{8,})/i);\n    if (match) {\n      username = match[1];\n      postId = match[2];\n    }\n\n    authorName = post.source\n      ? post.source.replace('LinkedIn · ', '').trim()\n      : null;\n  }\n\n  // ---------------------------\n  // REDDIT DETECTION (ROBUST)\n  // ---------------------------\n  if (/reddit\\.com/i.test(postUrl)) {\n    platform = 'Reddit';\n\n    const redditMatch = postUrl.match(\n      /reddit\\.com\\/r\\/([^/]+)\\/comments\\/([^/]+)/i\n    );\n\n    if (redditMatch) {\n      username = `r/${redditMatch[1]}`;\n      postId = redditMatch[2];\n    }\n\n    authorName = post.source\n      ? post.source.replace('Reddit · ', '').trim()\n      : username;\n  }\n\n  // ---------------------------\n  // PROBLEM DETECTION\n  // ---------------------------\n  const text = `${post.title || ''} ${post.snippet || ''}`.toLowerCase();\n\n  const detectedProblems = problemKeywords.filter(k =>\n    text.includes(k)\n  );\n\n  return {\n    json: {\n      platform,\n      author_name: authorName,\n      username,\n      post_id: postId,\n      post_url: postUrl || null,\n      post_title: post.title || null,\n      post_snippet: post.snippet || null,\n      engagement_hint: post.displayed_link || null,\n      problem_keywords_detected: detectedProblems,\n      is_problem_post: detectedProblems.length > 0\n    }\n  };\n});\n\n// REMOVE EMPTY / UNKNOWN URL RESULTS\nreturn output.filter(item => item.json.post_url);\n\n"},"typeVersion":2},{"id":"a77130f6-5705-4267-9ca7-5a80e17b68da","name":"AI Intent Detection Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[560,1040],"parameters":{"text":"=Analyze the following LinkedIn comment and identify lead intent.\n\nPost URL:\n{{ $json.postUrl }}\n\nPost Content:\n{{ $json.postContent }}\n\nCommenter Name:\n{{ $json.commenterName }}\n\nComment Text:\n{{ $json.commentText }}\n\nReturn the result in the following JSON format ONLY:\n\n{\n  \"postUrl\": \"{{ $json.postUrl }}\",\n  \"leadName\": \"{{ $json.commenterName }}\",\n  \"comment\": \"{{ $json.commentText }}\",\n  \"intentScore\": number,\n  \"intentLabel\": \"no-intent | passive-interest | problem-aware | solution-aware | high-intent\"\n}\n","options":{"systemMessage":"=You are a B2B sales intent detection agent.\n\nYour job is to analyze LinkedIn post context and comment text to identify whether the commenter shows buying intent, problem awareness, or decision-maker interest.\n\nYou must:\n- Use ONLY the data provided in the input\n- Infer intent from wording, tone, and relevance to the post\n- Be conservative: do not hallucinate intent\n- Prefer precision over recall\n\nScoring rules:\n- 0–20 → No intent (generic praise, agreement, emojis)\n- 21–40 → Passive interest (thoughtful comment, but no problem ownership)\n- 41–60 → Problem-aware (mentions pain points, challenges, or agreement with problem)\n- 61–80 → Solution-aware (implies need for solution, improvement, or optimization)\n- 81–100 → High buying intent (clear ownership, decision role, desire to act)\n\nIf intent is below 30, still return the record but mark it as \"low-intent\".\n\nOutput MUST be valid JSON and follow the exact schema provided.\nDo not add explanations or extra text.\n"},"promptType":"define"},"typeVersion":3},{"id":"9ccedfae-79a5-402a-85d3-554cee94fae4","name":"Azure OpenAI GPT-4o-mini","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[432,1248],"parameters":{"model":"gpt-4o-mini","options":{}},"credentials":{"azureOpenAiApi":{"id":"C3WzT18XqF8OdVM6","name":"Azure Open AI account"}},"typeVersion":1},{"id":"64643688-528f-456d-aaec-e19baff2137f","name":"Flatten Comments into Rows","type":"n8n-nodes-base.code","position":[352,1040],"parameters":{"jsCode":"const results = [];\n\nfor (const item of items) {\n  const post = item.json;\n\n  const postUrl = post.postUrl || '';\n  const postContent = post.postDetails?.content || '';\n  const activityUrn = post.postDetails?.activityUrn || null;\n\n  const comments = post.comments || [];\n\n  for (const comment of comments) {\n    results.push({\n      json: {\n        // Post info\n        postUrl,\n        activityUrn,\n        postContent,\n\n        // Comment info\n        commentId: comment.commentId,\n        commentText: comment.commentText,\n        commenterName: comment.authorName,\n        commenterProfileUrl: comment.profileUrl || null,\n        commenterUrn: comment.commenterUrn || null,\n\n        // Metadata\n        createdAt: comment.createdAt,\n        likeCount: comment.likeCount,\n        replyCount: comment.replyCount,\n        isProfile: comment.hasProfile\n      }\n    });\n  }\n}\n\nreturn results;\n"},"typeVersion":2},{"id":"27741bee-6896-460a-8bb2-333065225462","name":"Parse AI Intent Output","type":"n8n-nodes-base.code","position":[912,1040],"parameters":{"jsCode":"const results = [];\n\nfor (const item of items) {\n  // Skip empty or invalid outputs safely\n  if (!item.json.output) continue;\n\n  let parsed;\n  try {\n    parsed = JSON.parse(item.json.output);\n  } catch (e) {\n    // If parsing fails, skip this record\n    continue;\n  }\n\n  results.push({\n    json: {\n      postUrl: parsed.postUrl || null,\n      leadName: parsed.leadName || null,\n      comment: parsed.comment || null,\n      intentScore: parsed.intentScore ?? null,\n      intentLabel: parsed.intentLabel || null\n    }\n  });\n}\n\nreturn results;\n"},"typeVersion":2},{"id":"1d190ab7-11b2-40db-bc24-a7a2f16df196","name":"Save Leads to Google Sheet","type":"n8n-nodes-base.googleSheets","position":[1136,1040],"parameters":{"columns":{"value":{"comment":"={{ $json.comment }}","post_url":"={{ $json.postUrl }}","lead name":"={{ $json.leadName }}","intent label":"={{ $json.intentLabel }}","intent score":"={{ $json.intentScore }}"},"schema":[{"id":"post_url","type":"string","display":true,"required":false,"displayName":"post_url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"lead name","type":"string","display":true,"removed":false,"required":false,"displayName":"lead name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"comment","type":"string","display":true,"required":false,"displayName":"comment","defaultMatch":false,"canBeUsedToMatch":true},{"id":"intent score","type":"string","display":true,"required":false,"displayName":"intent score","defaultMatch":false,"canBeUsedToMatch":true},{"id":"intent label","type":"string","display":true,"required":false,"displayName":"intent label","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1hXDNE90IFbXLgyLt2XwSHgI_9sASzTSM9LAA4cUDFj4/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1hXDNE90IFbXLgyLt2XwSHgI_9sASzTSM9LAA4cUDFj4","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1hXDNE90IFbXLgyLt2XwSHgI_9sASzTSM9LAA4cUDFj4/edit?usp=drivesdk","cachedResultName":"Post Scraping"}},"credentials":{"googleSheetsOAuth2Api":{"id":"s4dP1fNuVZ2gWvs3","name":"Google Sheets account"}},"typeVersion":4.7}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"3c109119-fdf5-4216-92ef-7f00bbde7c2f","connections":{"Parse AI Intent Output":{"main":[[{"node":"Save Leads to Google Sheet","type":"main","index":0}]]},"Azure OpenAI GPT-4o-mini":{"ai_languageModel":[[{"node":"AI Intent Detection Agent","type":"ai_languageModel","index":0}]]},"AI Intent Detection Agent":{"main":[[{"node":"Parse AI Intent Output","type":"main","index":0}]]},"Flatten Comments into Rows":{"main":[[{"node":"AI Intent Detection Agent","type":"main","index":0}]]},"Parse & Filter Search Results":{"main":[[{"node":"Fetch Post Comments via ConnectSafely","type":"main","index":0}]]},"Search LinkedIn Posts via SerpAPI":{"main":[[{"node":"Parse & Filter Search Results","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Search LinkedIn Posts via SerpAPI","type":"main","index":0}]]},"Fetch Post Comments via ConnectSafely":{"main":[[{"node":"Flatten Comments into Rows","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":16,"nodeTypes":{"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-serpapi.serpApi":{"count":1},"n8n-nodes-base.googleSheets":{"count":1},"n8n-nodes-base.manualTrigger":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi":{"count":1},"n8n-nodes-connectsafely-ai.connectSafelyLinkedIn":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Rahul Joshi","username":"rahul08","bio":"Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.\n\n","verified":true,"links":["https://www.linkedin.com/in/callrahul/"],"avatar":"https://gravatar.com/avatar/b6cf57822463143589b36ada06fbf6cb1509223a740fae3160b28f1ce41ccc12?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1253,"icon":"file:azure.svg","name":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatazureopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Azure OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMjQyIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTguOTcyJSIgeDI9IjM3LjE5MSUiIHkxPSI3LjQxMSUiIHkyPSIxMDMuNzYyJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzExNEE4QiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzA2NjlCQyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNTkuNzE5JSIgeDI9IjUyLjY5MSUiIHkxPSI1Mi4zMTMlIiB5Mj0iNTQuODY0JSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1vcGFjaXR5PSIuMyIvPjxzdG9wIG9mZnNldD0iNy4xJSIgc3RvcC1vcGFjaXR5PSIuMiIvPjxzdG9wIG9mZnNldD0iMzIuMSUiIHN0b3Atb3BhY2l0eT0iLjEiLz48c3RvcCBvZmZzZXQ9IjYyLjMlIiBzdG9wLW9wYWNpdHk9Ii4wNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIzNy4yNzklIiB4Mj0iNjIuNDczJSIgeTE9IjQuNiUiIHkyPSI5OS45NzklIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjM0NDQkY0Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMjg5MkRGIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0idXJsKCNhKSIgZD0iTTg1LjM0My4wMDNoNzUuNzUzTDgyLjQ1NyAyMzNhMTIuMDggMTIuMDggMCAwIDEtMTEuNDQyIDguMjE2SDEyLjA2QTEyLjA2IDEyLjA2IDAgMCAxIC42MzMgMjI1LjMwM0w3My44OTggOC4yMTlBMTIuMDggMTIuMDggMCAwIDEgODUuMzQzIDB6Ii8+PHBhdGggZmlsbD0iIzAwNzhENCIgZD0iTTE5NS40MjMgMTU2LjI4Mkg3NS4yOTdhNS41NiA1LjU2IDAgMCAwLTMuNzk2IDkuNjI3bDc3LjE5IDcyLjA0N2ExMi4xNCAxMi4xNCAwIDAgMCA4LjI4IDMuMjZoNjguMDJ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTg1LjM0My4wMDNhMTEuOTggMTEuOTggMCAwIDAtMTEuNDcxIDguMzc2TC43MjMgMjI1LjEwNWExMi4wNDUgMTIuMDQ1IDAgMCAwIDExLjM3IDE2LjExMmg2MC40NzVhMTIuOTMgMTIuOTMgMCAwIDAgOS45MjEtOC40MzdsMTQuNTg4LTQyLjk5MSA1Mi4xMDUgNDguNmExMi4zMyAxMi4zMyAwIDAgMCA3Ljc1NyAyLjgyOGg2Ny43NjZsLTI5LjcyMS04NC45MzUtODYuNjQzLjAyTDE2MS4zNy4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTE4Mi4wOTggOC4yMDdBMTIuMDYgMTIuMDYgMCAwIDAgMTcwLjY3LjAwM0g4Ni4yNDVjNS4xNzUgMCA5Ljc3MyAzLjMwMSAxMS40MjggOC4yMDRMMTcwLjk0IDIyNS4zYTEyLjA2MiAxMi4wNjIgMCAwIDEtMTEuNDI4IDE1LjkyaDg0LjQyOWExMi4wNjIgMTIuMDYyIDAgMCAwIDExLjQyNS0xNS45MnoiLz48L3N2Zz4="},"displayName":"Azure OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":37,"name":"Lead Generation"},{"id":49,"name":"AI Summarization"}],"image":[]}}