AutomationFlowsEmail & Gmail › Proj5

Proj5

Proj5. Uses googleSheetsTrigger, chainLlm, lmChatGroq, gmail. Event-driven trigger; 24 nodes.

Event trigger★★★★☆ complexityAI-powered24 nodesGoogle Sheets TriggerChain LlmGroq ChatGmailGoogle TasksGoogle Sheets
Email & Gmail Trigger: Event Nodes: 24 Complexity: ★★★★☆ AI nodes: yes Added:

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 →

Download .json
{
  "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.

Pro

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 →

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

Proj5_Claude. Uses googleSheetsTrigger, chainLlm, lmChatGroq, gmail. Event-driven trigger; 28 nodes.

Google Sheets Trigger, Chain Llm, Groq Chat +3
Email & Gmail

Meeting Minutes. Uses chainLlm, lmChatGroq, googleSheetsTrigger, googleTasks. Event-driven trigger; 23 nodes.

Chain Llm, Groq Chat, Google Sheets Trigger +4
Email & Gmail

This template is ideal for HR teams, startup founders, operations leads, remote-first companies, and freelancers managing onboarding manually or across multiple tools.

Google Sheets Trigger, Jira, HubSpot Trigger +7
Email & Gmail

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

OpenRouter Chat, Output Parser Structured, Google Sheets +6
Email & Gmail

Proj2 Newsletter. Uses googleSheets, httpRequest, chainLlm, lmChatGroq. Event-driven trigger; 28 nodes.

Google Sheets, HTTP Request, Chain Llm +2