This workflow corresponds to n8n.io template #15569 — we link there as the canonical source.
This workflow follows the Chainllm → Gmail 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": "vhfHESk9Lyu0bQwH",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Client Onboarding Form \u2192 Profile Summary",
"tags": [],
"nodes": [
{
"id": "59d0e6c0-3a20-4543-bc63-9dd7c17d8f26",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1056,
-688
],
"parameters": {
"width": 752,
"height": 608,
"content": "## Workflow Overview: Investor Profiler\nThis workflow automates the transition from **lead capture to financial strategy**. It enriches client onboarding data with **real-time market insights**, ensuring every recommendation is data-driven, consistent and delivered with professional precision while maintaining real-time team visibility.\n\n\n## How it works\nNew data from the **New Onboarding Submission** node passes through a **Rate Limit Control** node to manage execution. The workflow then fetches live market data using **Fetch Market Data**, processes key values like price and change and derives insights such as trend and volatility through **Generate Market Insights**. In parallel, client data is analyzed by the **Analyze Investor Profile** node using AI. The response is structured via the **Profile Data Parser**, mapped through **Prepare CRM Mapping** and stored in Google Sheets using **Update CRM**. Finally, a **Slack Notification** is sent for real-time visibility and a **Send Welcome Email** delivers the personalized investment strategy to the client.\n\n## Setup steps\n**New Onboarding Submission**: Link your Google Sheet and select the Get Rows trigger. \n**Rate Limit Control**: Set max items (e.g., 1) to control execution and avoid API limits. \n**Fetch Market Data**: Configure your market API (e.g., Alpha Vantage) with correct query parameters. \n**Process Market Data**: Normalize API response fields such as price, change and percentage change. \n**Generate Market Insights**: Use a Function node to derive trend and volatility from market data. \n**Analyze Investor Profile**: Ensure your Groq API key is active. Reference fields using expressions like `{{ $json[\"Income\"] }}` and include market data if needed. \n**Profile Data Parser**: Match the schema exactly with AI output to ensure proper structuring. \n**Prepare CRM Mapping**: Map all required fields for storage. \n**Update CRM**: Set operation to Append or Update and configure your destination sheet. \n**Slack Notification**: Connect your Slack account and map fields for real-time alerts. \n**Send Welcome Email**: Customize the message using AI-generated insights."
},
"typeVersion": 1
},
{
"id": "7b366d7d-d2c3-42af-9b81-a4cc9f047410",
"name": "Analyze Investor Profile",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
560,
256
],
"parameters": {
"text": "=You are an expert financial advisor and portfolio strategist.\n\nAnalyze the client profile along with current market conditions to generate a personalized investment recommendation.\n\nClient Data:\nName: {{ $('Rate Limit Control').item.json.Name }}\nEmail: {{ $('Rate Limit Control').item.json.Email }}\nAge: {{ $('Rate Limit Control').item.json.Age }}\nIncome: {{ $('Rate Limit Control').item.json.Income }}\nRisk Appetite: {{ $('Rate Limit Control').item.json['Risk Appetite '] }}\n\nMarket Data:\nMarket Trend: {{ $json.marketTrend }}\nVolatility: {{ $json.volatility }}\nMarket Change: {{ $json.marketChangePercent }}\n\nInstructions:\n- Classify the investor into a clear risk category (Low, Medium, High)\n- Align the strategy with BOTH client risk appetite AND market conditions\n- Be practical and realistic (like a real financial advisor)\n- Keep the output concise but insightful\n\nReturn your response in the following JSON-friendly format:\n\nInvestor Profile: [2\u20133 line summary of the client]\nRisk Category: [Low/Medium/High]\nSuggested Approach: [Personalized investment strategy considering market trend]\nPortfolio Allocation: [Equity %, Debt %, Gold %]\nMarket Insight: [1-line explanation of current market condition]",
"batching": {},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 1.8
},
{
"id": "1d9a9359-14e0-4a86-b353-2b87d2f03f35",
"name": "Profile Data Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"onError": "continueRegularOutput",
"position": [
720,
464
],
"parameters": {
"autoFix": true,
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"Investor Profile\": {\n \"type\": \"string\"\n },\n \"Risk Category\": {\n \"type\": \"string\"\n },\n \"Suggested Approach\": {\n \"type\": \"string\"\n },\n \"Portfolio Allocation\": {\n \"type\": \"object\",\n \"properties\": {\n \"Equity\": { \"type\": \"string\" },\n \"Debt\": { \"type\": \"string\" },\n \"Gold\": { \"type\": \"string\" }\n }\n },\n \"Market Insight\": {\n \"type\": \"string\"\n }\n }\n}"
},
"retryOnFail": true,
"typeVersion": 1.3
},
{
"id": "7607fba0-75c2-45a0-ab1c-73a02cce27ee",
"name": "Prepare CRM Mapping",
"type": "n8n-nodes-base.set",
"position": [
1152,
256
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2464ffb0-5ad6-487d-896b-2ccce4e879d8",
"name": "Timestamp",
"type": "string",
"value": "={{ $('New Onboarding Submission').item.json.Timestamp }}"
},
{
"id": "e929d824-64df-4884-b902-0b52e55ec9fc",
"name": "Name",
"type": "string",
"value": "={{ $('New Onboarding Submission').item.json.Name }}"
},
{
"id": "8cc7eb62-af62-409c-bd0a-b872ee2c4582",
"name": "Age",
"type": "number",
"value": "={{ $('New Onboarding Submission').item.json.Age }}"
},
{
"id": "4879523c-1d9b-46c8-bb77-2fe18bc0f689",
"name": "Income",
"type": "number",
"value": "={{ $('New Onboarding Submission').item.json.Income }}"
},
{
"id": "666b014d-b2d3-4710-a2e3-103a19695563",
"name": "Profile Summary",
"type": "string",
"value": "={{ $json.output['Investor Profile'] }}"
},
{
"id": "72260fb1-+1234567890cd1b0db4c5",
"name": "Risk Category",
"type": "string",
"value": "={{ $json.output['Risk Category'] }}"
},
{
"id": "3dfac793-d43c-4280-8e69-e3993dab4326",
"name": "Strategy",
"type": "string",
"value": "={{ $json.output['Suggested Approach'] }}"
},
{
"id": "277418dd-58fa-463d-89c7-f8ff821f5c7e",
"name": "Email",
"type": "string",
"value": "={{ $('New Onboarding Submission').item.json.Email }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ff615a23-530a-499f-94a9-90d2ee8d8370",
"name": "Update CRM",
"type": "n8n-nodes-base.googleSheets",
"position": [
1360,
256
],
"parameters": {
"columns": {
"value": {
"Age": "={{ $json.Age }}",
"Name": "={{ $json.Name }}",
"Email": "={{ $json.Email }}",
"Income": "={{ $json.Income }}",
"Strategy": "={{ $json.Strategy }}",
"Timestamp": "={{ $json.Timestamp }}",
"Risk Category": "={{ $json[\"Risk Category\"] }}",
"Profile Summary": "={{ $json['Profile Summary'] }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Age",
"type": "string",
"display": true,
"required": false,
"displayName": "Age",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Income",
"type": "string",
"display": true,
"required": false,
"displayName": "Income",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Profile Summary",
"type": "string",
"display": true,
"required": false,
"displayName": "Profile Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Risk Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Risk Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Strategy",
"type": "string",
"display": true,
"required": false,
"displayName": "Strategy",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Timestamp"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15ysUfMTPzHjPxweQ3b1Po4WzVAHsSiKml8FAcDGqn8U/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "15ysUfMTPzHjPxweQ3b1Po4WzVAHsSiKml8FAcDGqn8U"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "ebd47c34-04e6-486c-b5e5-5f50a70d0f2c",
"name": "Groq (gpt-oss-120b)",
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"position": [
560,
480
],
"parameters": {
"model": "openai/gpt-oss-120b",
"options": {}
},
"credentials": {
"groqApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7be37211-5f08-4e84-819c-d5182d993328",
"name": "Send Welcome Email",
"type": "n8n-nodes-base.gmail",
"position": [
1632,
176
],
"parameters": {
"sendTo": "={{ $json.Email }}",
"message": "=<!DOCTYPE html>\n\n<html>\n <body style=\"font-family: Arial, sans-serif; background-color: #f4f6f8; padding: 20px; margin: 0;\">\n\n```\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"max-width: 600px; margin: auto; background: #ffffff; border-radius: 8px; padding: 20px;\">\n \n <!-- Header -->\n <tr>\n <td>\n <h2 style=\"color: #2c3e50;\">Your Investment Strategy Report</h2>\n <p>Hi {{ $json.Name }},</p>\n <p>Thank you for completing your onboarding. Based on your profile and current market conditions, here is your personalized investment plan:</p>\n </td>\n </tr>\n\n <!-- Risk Category -->\n <tr>\n <td>\n <h3 style=\"color: #34495e;\">Risk Assessment</h3>\n <p><strong>Risk Category:</strong> {{ $('Analyze Investor Profile').item.json.output['Risk Category'] }}</p>\n </td>\n </tr>\n\n <!-- Strategy -->\n <tr>\n <td>\n <h3 style=\"color: #34495e;\">Recommended Strategy</h3>\n <p>{{ $('Analyze Investor Profile').item.json.output['Suggested Approach'] }}</p>\n </td>\n </tr>\n\n <!-- Portfolio Allocation -->\n <tr>\n <td>\n <h3 style=\"color: #34495e;\">Suggested Portfolio Allocation</h3>\n <ul>\n <li><strong>Equity:</strong> {{ $('Analyze Investor Profile').item.json.output['Portfolio Allocation'].Equity }}</li>\n <li><strong>Debt:</strong>{{ $('Analyze Investor Profile').item.json.output['Portfolio Allocation'].Debt }}</li>\n <li><strong>Gold:</strong> {{ $('Analyze Investor Profile').item.json.output['Portfolio Allocation'].Gold }}</li>\n </ul>\n </td>\n </tr>\n\n <!-- Market Insight -->\n <tr>\n <td>\n <h3 style=\"color: #34495e;\">Market Insight</h3>\n <p>{{ $('Analyze Investor Profile').item.json.output['Market Insight'] }}</p>\n </td>\n </tr>\n\n <!-- Footer -->\n <tr>\n <td>\n <p style=\"margin-top: 20px;\">\n This strategy is tailored specifically for you. Our team will reach out shortly to help you take the next steps.\n </p>\n\n <p>\n Regards,<br>\n <strong>Your Advisory Team</strong>\n </p>\n </td>\n </tr>\n\n</table>\n```\n\n </body>\n</html>\n",
"options": {
"ccList": ""
},
"subject": "=Your Personalized Investment Strategy - {{ $json.Name }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "1ddcd899-d79f-4968-a077-4c63e2ec547d",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1024,
128
],
"parameters": {
"color": 7,
"width": 640,
"height": 304,
"content": "## Trigger & Input Capture \nCapture new client onboarding data from Google Sheets in real time. Apply a limit to control workflow execution and prevent excessive API usage during high submission volumes."
},
"typeVersion": 1
},
{
"id": "aec6a8ca-f6e9-4ffe-b791-a2f7093ebd41",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
112
],
"parameters": {
"color": 7,
"width": 496,
"height": 496,
"content": "## AI Profile Analysis & Structuring\nAnalyze client details alongside real-time market insights to generate an investor profile, risk category, personalized strategy, portfolio allocation and market outlook. Structure the response into JSON for consistent, reliable downstream processing and automation."
},
"typeVersion": 1
},
{
"id": "c36d550d-2024-480f-8054-dbfe19886b5c",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
48
],
"parameters": {
"color": 7,
"width": 912,
"height": 512,
"content": "## Data Mapping, Storage & Communication\nMap AI insights with client data, store the enriched profile in Google Sheets and trigger multi-channel communication. A personalized welcome email is sent to the client with their investment strategy, while a Slack notification alerts your team in real time about the new onboarding, ensuring visibility, faster follow-ups and a seamless client experience."
},
"typeVersion": 1
},
{
"id": "78ea63a4-89c2-4a4d-b6a7-8e33d634d1eb",
"name": "Rate Limit Control",
"type": "n8n-nodes-base.limit",
"position": [
-608,
256
],
"parameters": {
"keep": "lastItems"
},
"typeVersion": 1
},
{
"id": "55f0f02e-994e-409c-aaf3-b7e9c9df0eea",
"name": "Slack Notification",
"type": "n8n-nodes-base.slack",
"position": [
1632,
352
],
"parameters": {
"text": "=New Client Onboarded\n\nName: {{ $json.Name }}\nEmail: {{ $json.Email }}\nIncome: {{ $json.Income }}\n\nRisk Category: {{ $('Analyze Investor Profile').item.json.output['Risk Category'] }}\n\nInvestor Profile:\n{{ $('Analyze Investor Profile').item.json.output['Investor Profile'] }}\n\nStrategy:\n{{ $('Analyze Investor Profile').item.json.output['Suggested Approach'] }}\n\nMarket Insight:\n{{ $('Analyze Investor Profile').item.json.output['Market Insight'] }}\n\nPortfolio Allocation:\nEquity: {{ $('Analyze Investor Profile').item.json.output['Portfolio Allocation'].Equity }}\nDebt: {{ $('Analyze Investor Profile').item.json.output['Portfolio Allocation'].Debt }}\nGold: {{ $('Analyze Investor Profile').item.json.output['Portfolio Allocation'].Gold }}\n\nStatus: Analysis completed successfully",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0AQS47TGQ0",
"cachedResultName": "all-dropbox-note-sync"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "0515fb4b-4a5b-4e2c-a3e6-28fa49e937a3",
"name": "New Onboarding Submission",
"type": "n8n-nodes-base.googleSheets",
"position": [
-784,
256
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 154765901,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1si3ETJVqSgxCyfFvCnVgzBjWivf43y6clPxRrms39Hc/edit#gid=154765901",
"cachedResultName": "Form Responses 1"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "1si3ETJVqSgxCyfFvCnVgzBjWivf43y6clPxRrms39Hc"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "a7475621-0e93-43d4-b43e-99d7d0fdea6b",
"name": "Start Workflow",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-976,
256
],
"parameters": {},
"typeVersion": 1
},
{
"id": "ebea27b5-bf23-40d4-938c-2e359cfa4f07",
"name": "Fetch Market Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
-240,
256
],
"parameters": {
"url": "https://www.alphavantage.co/query",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "function",
"value": "GLOBAL_QUOTE"
},
{
"name": "symbol",
"value": "RELIANCE.BSE"
},
{
"name": "apikey"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "8af6b16d-e2ae-4306-bd97-2411d6c50888",
"name": "Process Market Data",
"type": "n8n-nodes-base.code",
"position": [
-32,
256
],
"parameters": {
"jsCode": "const data = $json[\"Global Quote\"];\n\nconst price = parseFloat(data[\"05. price\"]);\nconst change = parseFloat(data[\"09. change\"]);\nconst changePercent = data[\"10. change percent\"];\n\nlet trend = \"Neutral\";\n\nif (change > 0) trend = \"Bullish\";\nif (change < 0) trend = \"Bearish\";\n\nreturn [{\n ...$json,\n marketPrice: price,\n marketChange: change,\n marketChangePercent: changePercent,\n marketTrend: trend\n}];"
},
"typeVersion": 2
},
{
"id": "7cbcfdd6-82c8-4ef7-8d36-de872910f894",
"name": "Generate Market Insights",
"type": "n8n-nodes-base.code",
"position": [
176,
256
],
"parameters": {
"jsCode": "const data = $json[\"Global Quote\"];\n\nconst price = parseFloat(data[\"05. price\"]);\nconst change = parseFloat(data[\"09. change\"]);\nconst changePercent = parseFloat(data[\"10. change percent\"]);\n\nlet trend = \"Neutral\";\nif (change > 0) trend = \"Bullish\";\nif (change < 0) trend = \"Bearish\";\n\n// Volatility\nlet volatility = \"Low\";\nif (Math.abs(changePercent) > 1) volatility = \"High\";\nelse if (Math.abs(changePercent) > 0.5) volatility = \"Medium\";\n\n// Strategy + Allocation\nlet strategy = \"\";\nlet allocation = {};\n\nif (trend === \"Bullish\" && volatility === \"Low\") {\n strategy = \"Stable growth investing\";\n allocation = { Equity: \"70%\", Debt: \"20%\", Gold: \"10%\" };\n} else if (trend === \"Bullish\" && volatility === \"High\") {\n strategy = \"Aggressive growth investing\";\n allocation = { Equity: \"80%\", Debt: \"10%\", Gold: \"10%\" };\n} else if (trend === \"Bearish\") {\n strategy = \"Defensive investing (capital protection)\";\n allocation = { Equity: \"40%\", Debt: \"40%\", Gold: \"20%\" };\n} else {\n strategy = \"Balanced investing\";\n allocation = { Equity: \"60%\", Debt: \"30%\", Gold: \"10%\" };\n}\n\nreturn [{\n ...$json,\n marketPrice: price,\n marketChange: change,\n marketChangePercent: changePercent + \"%\",\n marketTrend: trend,\n volatility,\n recommendedStrategy: strategy,\n allocation\n}];"
},
"typeVersion": 2
},
{
"id": "c73da9f1-a57c-4bc7-8ec6-338b2ac5bd9c",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
128
],
"parameters": {
"color": 7,
"width": 672,
"height": 304,
"content": "## Market Data Enrichment & Intelligence\nFetch real-time market data via API, process and normalize key values, then generate actionable insights such as trend, volatility and strategy. This ensures every client recommendation is context-aware and aligned with current market conditions."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "177f7c67-7aaa-4cc8-96dd-77ff45d6a098",
"connections": {
"Update CRM": {
"main": [
[
{
"node": "Send Welcome Email",
"type": "main",
"index": 0
},
{
"node": "Slack Notification",
"type": "main",
"index": 0
}
]
]
},
"Start Workflow": {
"main": [
[
{
"node": "New Onboarding Submission",
"type": "main",
"index": 0
}
]
]
},
"Fetch Market Data": {
"main": [
[
{
"node": "Process Market Data",
"type": "main",
"index": 0
}
]
]
},
"Rate Limit Control": {
"main": [
[
{
"node": "Fetch Market Data",
"type": "main",
"index": 0
}
]
]
},
"Send Welcome Email": {
"main": [
[]
]
},
"Groq (gpt-oss-120b)": {
"ai_languageModel": [
[
{
"node": "Analyze Investor Profile",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Profile Data Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Prepare CRM Mapping": {
"main": [
[
{
"node": "Update CRM",
"type": "main",
"index": 0
}
]
]
},
"Process Market Data": {
"main": [
[
{
"node": "Generate Market Insights",
"type": "main",
"index": 0
}
]
]
},
"Profile Data Parser": {
"ai_outputParser": [
[
{
"node": "Analyze Investor Profile",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Analyze Investor Profile": {
"main": [
[
{
"node": "Prepare CRM Mapping",
"type": "main",
"index": 0
}
]
]
},
"Generate Market Insights": {
"main": [
[
{
"node": "Analyze Investor Profile",
"type": "main",
"index": 0
}
]
]
},
"New Onboarding Submission": {
"main": [
[
{
"node": "Rate Limit Control",
"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.
gmailOAuth2googleSheetsOAuth2ApigroqApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is a comprehensive automation engine that bridges the gap between raw client data and expert-level financial advice. Upon receiving a new onboarding form from Google Sheets, the system fetches real-time market data via Alpha Vantage, uses Groq-powered AI to…
Source: https://n8n.io/workflows/15569/ — 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 workflow is a high-precision financial intelligence engine that monitors macroeconomic news to identify high-impact trading opportunities. It retrieves real-time data via SerpAPI, processes it th
This template is ideal for HR teams, startup founders, operations leads, remote-first companies, and freelancers managing onboarding manually or across multiple tools.
n8n Graphic Design Team. Uses googleSheets, googleDrive, httpRequest, outputParserStructured. Event-driven trigger; 37 nodes.
Wait Splitout. Uses lmOpenAi, outputParserStructured, httpRequest, stickyNote. Event-driven trigger; 26 nodes.
Wait Splitout. Uses lmOpenAi, outputParserStructured, httpRequest, stickyNote. Event-driven trigger; 26 nodes.