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 →
{
"name": "Proj5",
"nodes": [
{
"parameters": {
"pollTimes": {
"item": [
{}
]
},
"documentId": {
"__rl": true,
"value": "YOUR_GOOGLE_SHEET_ID",
"mode": "list",
"cachedResultName": "Proj5 New Hires",
"cachedResultUrl": "YOUR_GOOGLE_SHEET_URL"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Proj5 New Hires",
"cachedResultUrl": "YOUR_GOOGLE_SHEET_URL"
},
"event": "rowAdded",
"options": {}
},
"type": "n8n-nodes-base.googleSheetsTrigger",
"typeVersion": 1,
"position": [
-1168,
120
],
"id": "113e255a-7433-408d-98e6-399b2a708372",
"name": "Google Sheets Trigger",
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=First Name: {{ $json['First Name'] }}\nLast Name: {{ $json['Last Name'] }}\nRole: {{ $json.Role }}\nDepartment: {{ $json.Department }}\nStart Date: {{ $json['Start Date'] }}\nManager: {{ $json.Manager }}\nContact Email: {{ $json['Contact Email'] }}",
"messages": {
"messageValues": [
{
"message": "You are an onboarding HR lead at a prestigious company that builds the most exquisite widgets in North America. Based on the incoming New hire data (name, role, department, start date and manager), personalize a 3 to 5 sentence \"welcome\" email to the new hire. \n\nDo note include any thoughts, pleasantries, etc prior to generating your message."
}
]
},
"batching": {
"batchSize": 1,
"delayBetweenBatches": 40
}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.9,
"position": [
-944,
-152
],
"id": "9be8f7a9-6054-4461-927f-9a7a8cc90453",
"name": "Basic LLM Chain"
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Sanitize LLM Output\n// Patterns sourced from n8n_and_ClaudeCode_Lessons_Learned_v2.md\n// Sections 1.3, 1.4 -- treat all LLM output as dirty by default\n\nlet text = $json.text || \"\";\n\n// Strip reasoning traces from thinking models (Section 1.4)\ntext = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, \"\");\n\n// Strip markdown headers\ntext = text.replace(/#{1,6}\\s+/g, \"\");\n\n// Strip bold and italic markers\ntext = text.replace(/\\*{1,3}([^*]+)\\*{1,3}/g, \"$1\");\ntext = text.replace(/_{1,3}([^_]+)_{1,3}/g, \"$1\");\n\n// Strip markdown bullet points and numbered lists\ntext = text.replace(/^\\s*[-*+]\\s+/gm, \"\");\ntext = text.replace(/^\\s*\\d+\\.\\s+/gm, \"\");\n\n// Strip markdown fences (Section 1.5 -- llama-4-scout wraps output in fences)\ntext = text.replace(/```[\\s\\S]*?```/g, \"\");\ntext = text.replace(/`([^`]+)`/g, \"$1\");\n\n// Strip literal backslash-n strings (Section 1.3)\ntext = text.replace(/\\n/g, \" \");\n\n// Convert actual newlines to spaces for single-field outputs\n// Comment this line out if downstream node needs newlines preserved (e.g. Gmail with <br> conversion)\n// text = text.replace(/\\n+/g, \" \");\n\n// Strip horizontal rules\ntext = text.replace(/^[-*_]{3,}\\s*$/gm, \"\");\n\n// Strip blockquotes\ntext = text.replace(/^>\\s+/gm, \"\");\n\n// Trim leading/trailing whitespace (Section 1.3 -- always trim before parsing)\ntext = text.trim();\n\nreturn {\n json: {\n ...$json,\n text_clean: text\n }\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-592,
-152
],
"id": "99290614-db09-4acc-b89f-c6ec913b5ba3",
"name": "Code in JavaScript"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
-872,
72
],
"id": "e810365c-ebec-4b93-9963-eded5874a4dc",
"name": "Groq Chat Model",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.text_clean }}",
"messages": {
"messageValues": [
{
"message": "You are an onboarding HR lead at a prestigious company that builds the most exquisite widgets in North America. Based on the role and welcome letter, generate a 30-60-90 day onboarding plan tailored to the role. There should be no more than 2 sentences for each of the 30-60-90 milestones\n\nDo note include any thoughts, pleasantries, etc prior to generating your message."
}
]
},
"batching": {
"batchSize": 1,
"delayBetweenBatches": 40
}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.9,
"position": [
-368,
-152
],
"id": "c7b21626-38c9-4ddf-afb6-4874370ff4f6",
"name": "Basic LLM Chain1"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
-296,
72
],
"id": "bc7adbdb-1e6b-45d8-ba0b-3e5af7ea30e1",
"name": "Groq Chat Model1",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let text = $json.text || \"\";\n\n// Strip reasoning traces\ntext = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, \"\");\n\n// Strip markdown headers\ntext = text.replace(/#{1,6}\\s+/g, \"\");\n\n// Strip bold and italic markers\ntext = text.replace(/\\*{1,3}([^*]+)\\*{1,3}/g, \"$1\");\ntext = text.replace(/_{1,3}([^_]+)_{1,3}/g, \"$1\");\n\n// Strip markdown bullet points and numbered lists\ntext = text.replace(/^\\s*[-*+]\\s+/gm, \"\");\ntext = text.replace(/^\\s*\\d+\\.\\s+/gm, \"\");\n\n// Strip markdown fences\ntext = text.replace(/```[\\s\\S]*?```/g, \"\");\ntext = text.replace(/`([^`]+)`/g, \"$1\");\n\n// Strip literal backslash-n strings (Section 1.3)\n// NOTE: do NOT replace real \\n here -- we need them to split on below\ntext = text.replace(/\\n/g, \"\\n\");\n\n// Strip horizontal rules\ntext = text.replace(/^[-*_]{3,}\\s*$/gm, \"\");\n\n// Strip blockquotes\ntext = text.replace(/^>\\s+/gm, \"\");\n\n// Trim\ntext = text.trim();\n\n// Split into 30/60/90 sections\n// Anchors on the day labels -- adjust these strings to match what your LLM actually outputs\nconst day30Match = text.match(/30.day[\\s\\S]*?(?=60.day|$)/i);\nconst day60Match = text.match(/60.day[\\s\\S]*?(?=90.day|$)/i);\nconst day90Match = text.match(/90.day[\\s\\S]*/i);\n\nconst day30 = day30Match ? day30Match[0].trim() : \"\";\nconst day60 = day60Match ? day60Match[0].trim() : \"\";\nconst day90 = day90Match ? day90Match[0].trim() : \"\";\n\nreturn {\n json: {\n ...$json,\n text_clean: text,\n day_30: day30,\n day_60: day60,\n day_90: day90\n }\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-16,
-152
],
"id": "0d56d2b0-4a33-418a-955c-c5148597fffe",
"name": "Code in JavaScript1"
},
{
"parameters": {
"sendTo": "={{ $('Google Sheets Trigger').item.json['Contact Email'] }}",
"subject": "=Welcome {{ $('Google Sheets Trigger').item.json['First Name'] }} {{ $('Google Sheets Trigger').item.json['Last Name'] }}!",
"message": "={{ $('Code in JavaScript').item.json.text_clean.replace(/\\n/g, '<br>') }}\n<br><br>\nBelow you'll find your 30-60-90 plan. Please reach out with any questions.\n<br><br>\n{{ $json.day_30 }}\n<br><br>\n{{ $json.day_60 }}\n<br><br>\n{{ $json.day_90 }}\n<br><br>\nRegards,<br>\nWidget Co. HR Team",
"options": {}
},
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.2,
"position": [
1808,
-400
],
"id": "59721b6d-1e4e-4ac2-80ec-c327cf6e34fd",
"name": "Send a message",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
280,
-32
],
"id": "34c74399-4ad4-4023-9dea-98d417cc1303",
"name": "Groq Chat Model2",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"sendTo": "={{ $('Google Sheets Trigger').item.json['Manager Email'] }}",
"subject": "=Action Items For New Hire {{ $('Google Sheets Trigger').item.json['First Name'] }} {{ $('Google Sheets Trigger').item.json['Last Name'] }}",
"message": "=Hi {{ $('Google Sheets Trigger').item.json.Manager }},\n<br><br>\nThe first week's agenda is as follows:\n{{ $json.agenda }}\n<br><br>\nPlease complete the actions below to support onboarding. \n<br><br>\n{{ $json.action_items[0] }}\n<br><br>\n{{ $json.action_items[1] }}\n<br><br>\n{{ $json.action_items[2] }}\n<br><br>\n{{ $json.action_items[3] }}\n<br><br>\n{{ $json.action_items[4] }}\n<br><br>\n{{ $json.action_items[5] }}\n<br><br>\nRegards,<br>\nWidget Co. HR Team",
"options": {}
},
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.2,
"position": [
1808,
-180
],
"id": "90aed41e-e3fd-49c9-abe2-805b13f2261a",
"name": "Send a message1",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let text_clean = $json.text_clean || \"\";\n\n// Split on --- delimiter into individual action items\nconst actions = text_clean\n .split(\"---\")\n .map(item => item.trim())\n .filter(item => item.length > 0);\n\nreturn {\n json: {\n ...$json,\n action_items: actions,\n action_count: actions.length\n }\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
912,
-152
],
"id": "f3a06b90-7242-45e5-bc0d-c9095509ae81",
"name": "Code in JavaScript3"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
632,
368
],
"id": "fa5f1b58-ae67-4fe3-bfa2-bc1dac5dad97",
"name": "Groq Chat Model3",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=30 Day: {{ $json.day_30 }}\n60 Day: {{ $json.day_60 }}\n90 Day: {{ $json.day_90 }}",
"messages": {
"messageValues": [
{
"message": "Create an agenda from the {{ $json.day_30 }} for the manager to track. This should be no more than 2 to 4 lines"
}
]
},
"batching": {
"batchSize": 1,
"delayBetweenBatches": 100
}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.9,
"position": [
560,
144
],
"id": "36fed964-0503-4950-af95-12dfdcb83745",
"name": "Agenda Gen"
},
{
"parameters": {
"promptType": "define",
"text": "=30 Day: {{ $json.day_30 }}\n60 Day: {{ $json.day_60 }}\n90 Day: {{ $json.day_90 }}",
"messages": {
"messageValues": [
{
"message": "Based on this 30-60-90 day onboarding plan, extract 3-5 specific action items \nthe manager should complete before and during the new hire's first week. \nWrite each as a plain one-sentence task starting with a verb. No bullets, \nno markdown, no numbering. Separate each action item with this exact text on its own line: ---"
}
]
},
"batching": {
"batchSize": 1,
"delayBetweenBatches": 60
}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.9,
"position": [
208,
-256
],
"id": "2b5a3407-906b-47c6-a90a-55dacf265cc2",
"name": "Action Item Gen"
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let text = $json.text || \"\";\n\n// Strip reasoning traces\ntext = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, \"\");\n\n// Strip markdown headers\ntext = text.replace(/#{1,6}\\s+/g, \"\");\n\n// Strip bold and italic markers\ntext = text.replace(/\\*{1,3}([^*]+)\\*{1,3}/g, \"$1\");\ntext = text.replace(/_{1,3}([^_]+)_{1,3}/g, \"$1\");\n\n// Strip markdown bullet points and numbered lists\ntext = text.replace(/^\\s*[-*+]\\s+/gm, \"\");\ntext = text.replace(/^\\s*\\d+\\.\\s+/gm, \"\");\n\n// Strip markdown fences\ntext = text.replace(/```[\\s\\S]*?```/g, \"\");\ntext = text.replace(/`([^`]+)`/g, \"$1\");\n\n// Strip literal backslash-n strings (Section 1.3)\n// NOTE: do NOT replace real \\n here -- we need them to split on below\ntext = text.replace(/\\\\n/g, \" \");\ntext = text.replace(/\\n/g, \" \");\n\n// Strip horizontal rules\ntext = text.replace(/^[-*_]{3,}\\s*$/gm, \"\");\n\n// Strip blockquotes\ntext = text.replace(/^>\\s+/gm, \"\");\n\n// Trim\ntext = text.trim();\n\nreturn {\n json: {\n ...$json,\n text_clean: text\n }\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
624,
-152
],
"id": "70e6697e-6195-4e3d-9c2a-59a83333a81e",
"name": "Clean"
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let text = $json.text || \"\";\n\n// Strip reasoning traces\ntext = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, \"\");\n\n// Strip markdown headers\ntext = text.replace(/#{1,6}\\s+/g, \"\");\n\n// Strip bold and italic markers\ntext = text.replace(/\\*{1,3}([^*]+)\\*{1,3}/g, \"$1\");\ntext = text.replace(/_{1,3}([^_]+)_{1,3}/g, \"$1\");\n\n// Strip markdown bullet points and numbered lists\ntext = text.replace(/^\\s*[-*+]\\s+/gm, \"\");\ntext = text.replace(/^\\s*\\d+\\.\\s+/gm, \"\");\n\n// Strip markdown fences\ntext = text.replace(/```[\\s\\S]*?```/g, \"\");\ntext = text.replace(/`([^`]+)`/g, \"$1\");\n\n// Strip literal backslash-n strings (Section 1.3)\n// NOTE: do NOT replace real \\n here -- we need them to split on below\ntext = text.replace(/\\\\n/g, \" \");\ntext = text.replace(/\\n/g, \" \");\n\n// Strip horizontal rules\ntext = text.replace(/^[-*_]{3,}\\s*$/gm, \"\");\n\n// Strip blockquotes\ntext = text.replace(/^>\\s+/gm, \"\");\n\n// Trim\ntext = text.trim();\n\nreturn {\n json: {\n ...$json,\n agenda: text\n }\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
912,
144
],
"id": "5feef2aa-9578-4231-bac5-a074599fadd4",
"name": "Clean1"
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"options": {
"includeUnpaired": true
}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
1136,
-4
],
"id": "8c0ce449-eaf7-4067-8461-f90a3ee912f3",
"name": "Merge"
},
{
"parameters": {
"task": "YOUR_GOOGLE_TASKS_LIST_ID",
"title": "={{ $('Google Sheets Trigger').item.json.Manager }}: {{ $json.action_items }}",
"additionalFields": {}
},
"type": "n8n-nodes-base.googleTasks",
"typeVersion": 1,
"position": [
1584,
172
],
"id": "66d2035f-56e7-40f8-a7ed-1a949cd7d896",
"name": "Create a task",
"credentials": {
"googleTasksOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"fieldToSplitOut": "action_items",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
1360,
172
],
"id": "6dc4bfd0-230b-40e9-b793-1f1cffd0aee1",
"name": "Split Out"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_GOOGLE_SHEET_ID",
"mode": "list",
"cachedResultName": "Proj5 New Hires",
"cachedResultUrl": "YOUR_GOOGLE_SHEET_URL"
},
"sheetName": {
"__rl": true,
"value": 1532338632,
"mode": "list",
"cachedResultName": "Proj5 New Hires",
"cachedResultUrl": "YOUR_GOOGLE_SHEET_URL"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Timestamp": "={{ $now }}",
"First Name": "={{ $json['First Name'] }}",
"Last Name": "={{ $json['Last Name'] }}",
"Role": "={{ $json.Role }}",
"Department": "={{ $json.Department }}",
"Start Date": "={{ $json['Start Date'] }}",
"Manager": "={{ $json.Manager }}",
"Welcome Email Sent": "Yes",
"Scheduled Check-In Date": "={{ $json.check_in_date }}",
"Manager Email Sent": "Yes",
"Tasks Created": "Yes",
"Onboarding Status": "Initiated"
},
"matchingColumns": [],
"schema": [
{
"id": "Timestamp",
"displayName": "Timestamp",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "First Name",
"displayName": "First Name",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"displayName": "Last Name",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Role",
"displayName": "Role",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Department",
"displayName": "Department",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Start Date",
"displayName": "Start Date",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Manager",
"displayName": "Manager",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Welcome Email Sent",
"displayName": "Welcome Email Sent",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Manager Email Sent",
"displayName": "Manager Email Sent",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Tasks Created",
"displayName": "Tasks Created",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Scheduled Check-In Date",
"displayName": "Scheduled Check-In Date",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Onboarding Status",
"displayName": "Onboarding Status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
2256,
-4
],
"id": "1460876f-7c00-45c9-bf33-0acf80011383",
"name": "Append row in sheet",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"numberInputs": 4,
"options": {
"includeUnpaired": true
}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
2032,
-36
],
"id": "19a4d113-2e5d-43f7-8c52-c42ccd3faec5",
"name": "Merge1",
"executeOnce": false
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const startDate = new Date($('Google Sheets Trigger').item.json['Start Date']);\nstartDate.setDate(startDate.getDate() + 30);\n\nconst checkInDate = startDate.toISOString().split('T')[0];\n\nreturn {\n json: {\n ...$json,\n check_in_date: checkInDate\n }\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1808,
392
],
"id": "74c53710-6d54-4589-a5d6-8858ac489ea0",
"name": "Check_In"
},
{
"parameters": {
"maxItems": 1
},
"type": "n8n-nodes-base.limit",
"typeVersion": 1,
"position": [
1808,
172
],
"id": "ea4791b5-4979-4217-a445-225b9a49a772",
"name": "Limit"
},
{
"parameters": {
"amount": 30
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
272,
144
],
"id": "695bc8a4-20d5-49cd-bd81-5c4584103979",
"name": "Wait"
}
],
"connections": {
"Google Sheets Trigger": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
},
{
"node": "Check_In",
"type": "main",
"index": 0
}
]
]
},
"Basic LLM Chain": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Basic LLM Chain1",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model1": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Basic LLM Chain1": {
"main": [
[
{
"node": "Code in JavaScript1",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript1": {
"main": [
[
{
"node": "Action Item Gen",
"type": "main",
"index": 0
},
{
"node": "Send a message",
"type": "main",
"index": 0
},
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model2": {
"ai_languageModel": [
[
{
"node": "Action Item Gen",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code in JavaScript3": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model3": {
"ai_languageModel": [
[
{
"node": "Agenda Gen",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Agenda Gen": {
"main": [
[
{
"node": "Clean1",
"type": "main",
"index": 0
}
]
]
},
"Action Item Gen": {
"main": [
[
{
"node": "Clean",
"type": "main",
"index": 0
}
]
]
},
"Clean": {
"main": [
[
{
"node": "Code in JavaScript3",
"type": "main",
"index": 0
}
]
]
},
"Clean1": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Send a message1": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Send a message1",
"type": "main",
"index": 0
},
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Create a task",
"type": "main",
"index": 0
}
]
]
},
"Create a task": {
"main": [
[
{
"node": "Limit",
"type": "main",
"index": 0
}
]
]
},
"Append row in sheet": {
"main": [
[]
]
},
"Send a message": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Check_In": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 2
}
]
]
},
"Limit": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 3
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Agenda Gen",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate"
},
"versionId": "YOUR_VERSION_ID",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "YOUR_WORKFLOW_ID",
"tags": []
}
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.
gmailOAuth2googleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApigoogleTasksOAuth2ApigroqApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Proj5. Uses googleSheetsTrigger, chainLlm, lmChatGroq, gmail. Event-driven trigger; 24 nodes.
Source: https://github.com/MDunn83/AI-Portfolio/blob/main/workflows/P05-onboarding-automation/n8n-manual-build/P05-onboarding-automation-manual.json — 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.
Proj5_Claude. Uses googleSheetsTrigger, chainLlm, lmChatGroq, gmail. Event-driven trigger; 28 nodes.
Meeting Minutes. Uses chainLlm, lmChatGroq, googleSheetsTrigger, googleTasks. Event-driven trigger; 23 nodes.
This template is ideal for HR teams, startup founders, operations leads, remote-first companies, and freelancers managing onboarding manually or across multiple tools.
This template automates the complete hiring pipeline for digital agencies managing applications across multiple job roles. When a candidate submits a Google Form with their CV, the system scores it wi
Proj2 Newsletter. Uses googleSheets, httpRequest, chainLlm, lmChatGroq. Event-driven trigger; 28 nodes.