This workflow corresponds to n8n.io template #9580 — we link there as the canonical source.
This workflow follows the Gmail → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "zayYKWaU4C1b2a2C",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Gracewell Automated Registration Tracker Suite",
"tags": [],
"nodes": [
{
"id": "6129a28e-055e-4355-8b3d-412cd2b21baf",
"name": "Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
-496,
-848
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o/edit?usp=drivesdk",
"cachedResultName": "B"
},
"combineFilters": "OR"
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "939ffb5e-d5ba-4ddd-a34a-b5db3f8be956",
"name": "Google Sheets1",
"type": "n8n-nodes-base.googleSheets",
"position": [
-496,
-656
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1113734691,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE/edit#gid=1113734691",
"cachedResultName": "Form Responses 1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE/edit?usp=drivesdk",
"cachedResultName": "n8n forms (Responses)"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "9019ab48-1b0e-497a-bba6-50727a8664c9",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
-48,
-752
],
"parameters": {
"jsCode": "//-------------------------------------------------------------\n// Gracewell - Form Tracking Dashboard (Workflow 1)\n// Author: Dr. Jeffin Gracewell \u2013 Simplified Version\n//-------------------------------------------------------------\n\n// Step 1 \u2013 Read data from Google Sheets\nconst studentSheet = $items(\"Google Sheets\").map(i => i.json);\nconst responseSheet = $items(\"Google Sheets1\").map(i => i.json);\n\n// Step 2 \u2013 Normalize and Compare Register Numbers\nconst submittedRegs = responseSheet.map(r => String(r[\"Reg No\"]).trim().toLowerCase());\nconst completed = [];\nconst incompleted = [];\n\nfor (const s of studentSheet) {\n const reg = String(s[\"Register No.\"]).trim().toLowerCase();\n if (submittedRegs.includes(reg)) {\n const r = responseSheet.find(x => String(x[\"Reg No\"]).trim().toLowerCase() === reg);\n completed.push({\n \"Register No.\": s[\"Register No.\"],\n \"Student Name\": s[\"Student Name\"],\n \"Email Address\": r?.[\"Email Address\"] || \"\",\n \"Timestamp\": r?.[\"Timestamp\"] || \"\",\n \"Status\": \"\u2705 Completed\"\n });\n } else {\n incompleted.push({\n \"Register No.\": s[\"Register No.\"],\n \"Student Name\": s[\"Student Name\"],\n \"Status\": \"\u26a0\ufe0f Not Submitted\"\n });\n }\n}\n\n// Step 3 \u2013 Summary\nconst summary = {\n total: studentSheet.length,\n submitted: completed.length,\n pending: incompleted.length,\n completion: ((completed.length / Math.max(1, studentSheet.length)) * 100).toFixed(2) + \"%\",\n updated: new Date().toLocaleString()\n};\n\n// Step 4 \u2013 HTML Dashboard\nconst completedRows = completed\n .map(s => `<tr><td>${s[\"Register No.\"]}</td><td>${s[\"Student Name\"]}</td><td>\u2705</td></tr>`)\n .join(\"\");\n\nconst pendingRows = incompleted\n .map(s => `<tr><td>${s[\"Register No.\"]}</td><td>${s[\"Student Name\"]}</td><td>\u26a0\ufe0f</td></tr>`)\n .join(\"\");\n\nconst html = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>Gracewell \u2013 Form Tracking Dashboard</title>\n<script src=\"https://cdn.jsdelivr.net/npm/sweetalert2@11\"></script>\n<style>\nbody{font-family:'Segoe UI',Arial;background:#f9fafb;text-align:center;padding:30px;}\nh1{color:#2563eb;margin-bottom:10px;}\ntable{border-collapse:collapse;margin:15px auto;width:90%;max-width:900px;background:#fff;\n box-shadow:0 2px 6px rgba(0,0,0,0.1);}\nth,td{padding:8px 12px;border-bottom:1px solid #eee;text-align:left;}\nth{background:#eff6ff;color:#1e3a8a;}\nbutton{margin:10px 8px;padding:10px 22px;border:none;border-radius:6px;font-size:15px;cursor:pointer;}\n.send{background:#dc2626;color:#fff;}\n.ack{background:#16a34a;color:#fff;}\nfooter{margin-top:25px;color:#666;font-size:14px;}\n</style>\n</head>\n<body>\n\n<h1>\ud83d\udcca Gracewell Form Tracking Dashboard</h1>\n<p>Total <strong>${summary.total}</strong> | Submitted <strong>${summary.submitted}</strong> | Pending <strong>${summary.pending}</strong> | Completion <strong>${summary.completion}</strong></p>\n\n<button class=\"ack\" onclick=\"acknowledge()\">\u2705 Send Acknowledgements</button>\n<button class=\"send\" onclick=\"remind()\">\u26a0\ufe0f Send Reminders</button>\n\n<section>\n <h2 style=\"color:#16a34a;\">\u2705 Completed (${completed.length})</h2>\n <table><tr><th>Reg No</th><th>Student Name</th><th>Status</th></tr>${completedRows}</table>\n</section>\n\n<section>\n <h2 style=\"color:#dc2626;\">\u26a0\ufe0f Pending (${incompleted.length})</h2>\n <table><tr><th>Reg No</th><th>Student Name</th><th>Status</th></tr>${pendingRows}</table>\n</section>\n\n<footer>\ud83d\udd52 Last Updated: ${summary.updated}</footer>\n\n<script>\nfunction remind(){\n Swal.fire({\n title:'Send Reminders?',\n text:'${incompleted.length} pending students will receive reminder emails or WhatsApp messages.',\n icon:'question',showCancelButton:true,\n confirmButtonText:'Yes, Send'\n }).then(r=>{\n if(r.isConfirmed){\n window.location.href='https://n8n.srv765546.hstgr.cloud/webhook/send-reminder';\n }\n });\n}\nfunction acknowledge(){\n Swal.fire({\n title:'Send Acknowledgements?',\n text:'${completed.length} students will receive thank-you messages.',\n icon:'question',showCancelButton:true,\n confirmButtonText:'Yes, Send'\n }).then(r=>{\n if(r.isConfirmed){\n window.location.href='https://n8n.srv765546.hstgr.cloud/webhook/send-acknowledgements';\n }\n });\n}\n</script>\n\n</body>\n</html>\n`;\n\n// Step 5 \u2013 Return\nreturn [{\n json: { summary, completed, incompleted, html }\n}];\n"
},
"typeVersion": 2
},
{
"id": "751e83f2-92e9-4ca2-80fe-51926866f07e",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
-272,
-752
],
"parameters": {
"mode": "combine",
"options": {},
"advanced": true,
"mergeByFields": {
"values": [
{
"field1": "Register No.",
"field2": "Reg No"
}
]
}
},
"typeVersion": 3.2
},
{
"id": "ab22e315-f457-4c6a-b143-3e5795b25275",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
176,
-736
],
"parameters": {
"options": {
"responseCode": 200,
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "text/html"
}
]
}
},
"respondWith": "text",
"responseBody": "=={{ $json[\"html\"] }}"
},
"typeVersion": 1.4
},
{
"id": "1d83a5bf-9c03-4c8b-8478-1ae605e24e3d",
"name": "Webhook1",
"type": "n8n-nodes-base.webhook",
"position": [
-720,
-752
],
"parameters": {
"path": "2235781f-4371-4f6e-8767-41c352ed171f",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "54808873-11d8-44fa-8429-42cabbfa2b5c",
"name": "Webhook - send-acknowledgements",
"type": "n8n-nodes-base.webhook",
"position": [
-240,
-336
],
"parameters": {
"path": "send-acknowledgements",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "b8895288-5239-43f4-95b3-48d208bab533",
"name": "Google Sheets - Student List",
"type": "n8n-nodes-base.googleSheets",
"position": [
32,
-496
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o/edit?usp=drivesdk",
"cachedResultName": "B"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "410063fe-d634-4db6-b2c6-c31bc239fc57",
"name": "Code - Prepare Messages",
"type": "n8n-nodes-base.code",
"position": [
480,
-400
],
"parameters": {
"jsCode": "//-------------------------------------------------------------\n// Gracewell Workflow 2: Send Acknowledgements (Enhanced & Stable)\n//-------------------------------------------------------------\n\n// --- Read data from both Sheets nodes ---\nconst students = $items('Google Sheets - Student List').map(i => i.json);\nconst responses = $items('Google Sheets FormResponses').map(i => i.json);\n\n// --- Normalization helper ---\nconst normalize = v => (v ? String(v).trim().toLowerCase() : '');\n\n// --- Lists ---\nconst completed = [];\n\n// --- Match Register Numbers ---\nfor (const s of students) {\n const reg = normalize(s['Register No.']);\n const match = responses.find(r => normalize(r['Reg No']) === reg);\n\n if (match) {\n completed.push({\n 'Register No.': s['Register No.'],\n 'Student Name': s['Student Name'],\n 'Contact': s['Contact'] || '', // \u2705 added\n 'Email Address': s['Email'] || match['Email Address'] || '',\n 'Timestamp': match['Timestamp'] || '',\n 'Status': '\u2705 Completed'\n });\n }\n}\n\n// --- Prepare Email Content ---\nconst subject = '\u2705 Thank You for Your Submission';\nconst bodyTemplate = `\nDear {{name}},<br><br>\nThank you for completing your form (Reg No: {{reg}}).<br>\nWe appreciate your prompt response.<br><br>\n\u2013 Gracewell Technologies Team\n`;\n\n// --- Helper for placeholder replacement ---\nfunction fill(template, s) {\n return template\n .replace(/\\{\\{\\s*name\\s*\\}\\}/gi, s['Student Name'])\n .replace(/\\{\\{\\s*reg\\s*\\}\\}/gi, s['Register No.']);\n}\n\n// --- Handle case of no completed students ---\nif (completed.length === 0) {\n return [{ json: { message: 'No completed students found' } }];\n}\n\n// --- Output: one JSON per student ---\nreturn completed.map(s => ({\n json: {\n 'Register No.': s['Register No.'],\n 'Student Name': s['Student Name'],\n 'Contact': s['Contact'],\n 'Email Address': s['Email Address'],\n 'subject': subject,\n 'htmlBody': fill(bodyTemplate, s)\n }\n}));\n"
},
"typeVersion": 2
},
{
"id": "555aad64-769d-4e5a-95ae-65badd883d4d",
"name": "Respond - Confirmation",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
928,
-400
],
"parameters": {
"options": {
"responseCode": 200,
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "text/html"
}
]
}
},
"respondWith": "text",
"responseBody": "<html><body style=\"font-family:Segoe UI,Arial;text-align:center;padding:40px;\"><h2>\u2705 Acknowledgements Sent</h2><p>All completed students have received thank-you messages.</p><a href=\"https://n8n.srv765546.hstgr.cloud/webhook/form-dashboard\">\u2190 Back to Dashboard</a></body></html>"
},
"typeVersion": 1.4
},
{
"id": "f7170ea9-81c5-4602-a9f6-e1d85830694e",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
704,
-400
],
"parameters": {
"sendTo": "={{$json[\"Email Address\"]}}",
"message": "={{ $json.htmlBody }}",
"options": {},
"subject": "{{ $json.subject }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "7fa0622b-4f27-4eb2-96d3-1f6a8a96d983",
"name": "Google Sheets FormResponses",
"type": "n8n-nodes-base.googleSheets",
"position": [
32,
-304
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1113734691,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE/edit#gid=1113734691",
"cachedResultName": "Form Responses 1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE/edit?usp=drivesdk",
"cachedResultName": "n8n forms (Responses)"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "384d999b-d603-4a1e-ad58-6a055a2b26c4",
"name": "Merge1",
"type": "n8n-nodes-base.merge",
"position": [
256,
-400
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "1bf63625-8f0d-4f2c-a6ea-08dcb50dc1ad",
"name": "Google Sheets - FormResponses",
"type": "n8n-nodes-base.googleSheets",
"position": [
16,
208
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1113734691,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE/edit#gid=1113734691",
"cachedResultName": "Form Responses 1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10eIZzrzgRy8PKfyhhVc8eG8lFoAxEqE0h-IOnqHwdVE/edit?usp=drivesdk",
"cachedResultName": "n8n forms (Responses)"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "199c5e4a-514f-4c51-8568-d5aec1c0c3ea",
"name": "Webhook - send-acknowledgements1",
"type": "n8n-nodes-base.webhook",
"position": [
-208,
112
],
"parameters": {
"path": "send-reminder",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "cb8662bb-0224-43c5-9596-36428dbc539f",
"name": "Google Sheets - Student List1",
"type": "n8n-nodes-base.googleSheets",
"position": [
16,
16
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-i55cyu2DKZ_alSlR3Bd7abHn_EfvTpg73hv2y3zb4o/edit?usp=drivesdk",
"cachedResultName": "B"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "693ec31d-f225-4533-800f-870cdc838c59",
"name": "Code - Prepare Messages1",
"type": "n8n-nodes-base.code",
"position": [
464,
112
],
"parameters": {
"jsCode": "//-------------------------------------------------------------\n// Gracewell Workflow 3: Send Reminders (Pending Students)\n//-------------------------------------------------------------\n\n// --- Read data from both Sheets nodes ---\nconst students = $items('Google Sheets - Student List1').map(i => i.json);\nconst responses = $items('Google Sheets - FormResponses').map(i => i.json);\n\n// --- Helper function to normalize Register Numbers ---\nconst normalize = v => (v ? String(v).trim().toLowerCase() : '');\n\n// --- Extract submitted register numbers ---\nconst submittedRegs = responses.map(r => normalize(r['Reg No']));\n\n// --- Identify pending students ---\nconst pending = [];\n\nfor (const s of students) {\n const reg = normalize(s['Register No.']);\n if (!submittedRegs.includes(reg)) {\n pending.push({\n 'Register No.': s['Register No.'],\n 'Student Name': s['Student Name'],\n 'Contact': s['Contact'] || '',\n 'Email Address': s['Email'] || '',\n 'Status': '\u26a0\ufe0f Not Submitted'\n });\n }\n}\n\n// --- Stop execution if no pending students ---\nif (pending.length === 0) {\n return [{ json: { message: 'All students have submitted. No reminders needed.' } }];\n}\n\n// --- Define email subject & body template ---\nconst subject = '\u26a0\ufe0f Reminder: Please Complete Your Form';\nconst bodyTemplate = `\nDear {{name}},<br><br>\nOur records show that you have not yet completed the required form (Reg No: {{reg}}).<br>\nKindly fill it at your earliest convenience.<br><br>\n\u2013 Gracewell AI\n`;\n\n// --- Helper to replace placeholders in the message ---\nfunction fill(template, s) {\n return template\n .replace(/\\{\\{\\s*name\\s*\\}\\}/gi, s['Student Name'])\n .replace(/\\{\\{\\s*reg\\s*\\}\\}/gi, s['Register No.']);\n}\n\n// --- Prepare final output for each pending student ---\nreturn pending.map(s => ({\n json: {\n 'Register No.': s['Register No.'],\n 'Student Name': s['Student Name'],\n 'Contact': s['Contact'],\n 'Email Address': s['Email Address'],\n 'subject': subject,\n 'htmlBody': fill(bodyTemplate, s)\n }\n}));\n"
},
"typeVersion": 2
},
{
"id": "f17a315f-b0f1-4c2a-b482-cb6ccc627140",
"name": "Respond - Confirmation1",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
912,
112
],
"parameters": {
"options": {
"responseCode": 200,
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "text/html"
}
]
}
},
"respondWith": "text",
"responseBody": "<html><body style=\"font-family:Segoe UI,Arial;text-align:center;padding:40px;\"><h2>\u2705 Acknowledgements Sent</h2><p>All completed students have received thank-you messages.</p><a href=\"https://n8n.srv765546.hstgr.cloud/webhook/form-dashboard\">\u2190 Back to Dashboard</a></body></html>"
},
"typeVersion": 1.4
},
{
"id": "a6e673c1-677d-4657-b237-095960f5c0c1",
"name": "Send a message1",
"type": "n8n-nodes-base.gmail",
"position": [
688,
112
],
"parameters": {
"sendTo": "={{$json[\"Email Address\"]}}",
"message": "={{ $json.htmlBody }}",
"options": {},
"subject": "={{ $json.subject }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "f1e66b06-43e4-456f-b7e8-a7afb247b752",
"name": "Merge2",
"type": "n8n-nodes-base.merge",
"position": [
240,
112
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "246db6a2-f974-48b9-85f9-c140a4b52ddf",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
-944
],
"parameters": {
"width": 1360,
"height": 448,
"content": "Gracewell Automated Registration Tracker Suite"
},
"typeVersion": 1
},
{
"id": "64153acd-c102-46be-9e71-2154dcb560d8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-384,
-480
],
"parameters": {
"color": 4,
"width": 1520,
"height": 320,
"content": " Workflow 2: Send Acknowledgements"
},
"typeVersion": 1
},
{
"id": "7e4346b8-b5e8-4f96-a85b-02a4bab9d1af",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-288,
-32
],
"parameters": {
"color": 6,
"width": 1456,
"height": 400,
"content": " Workflow 3: Send Reminders"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "2a09ba1d-f4f1-4e71-b700-4bfb8edd3d1e",
"connections": {
"Code": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Code - Prepare Messages",
"type": "main",
"index": 0
}
]
]
},
"Merge2": {
"main": [
[
{
"node": "Code - Prepare Messages1",
"type": "main",
"index": 0
}
]
]
},
"Webhook1": {
"main": [
[
{
"node": "Google Sheets",
"type": "main",
"index": 0
},
{
"node": "Google Sheets1",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets1": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Send a message": {
"main": [
[
{
"node": "Respond - Confirmation",
"type": "main",
"index": 0
}
]
]
},
"Send a message1": {
"main": [
[
{
"node": "Respond - Confirmation1",
"type": "main",
"index": 0
}
]
]
},
"Respond to Webhook": {
"main": [
[]
]
},
"Code - Prepare Messages": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Code - Prepare Messages1": {
"main": [
[
{
"node": "Send a message1",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets FormResponses": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Google Sheets - Student List": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets - FormResponses": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 1
}
]
]
},
"Google Sheets - Student List1": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 0
}
]
]
},
"Webhook - send-acknowledgements": {
"main": [
[
{
"node": "Google Sheets - Student List",
"type": "main",
"index": 0
},
{
"node": "Google Sheets FormResponses",
"type": "main",
"index": 0
}
]
]
},
"Webhook - send-acknowledgements1": {
"main": [
[
{
"node": "Google Sheets - Student List1",
"type": "main",
"index": 0
},
{
"node": "Google Sheets - FormResponses",
"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.
gmailOAuth2googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
version: 1.0 tags: [education, automation, google-sheets, gmail, dashboard, form-tracking, workflow-suite]
Source: https://n8n.io/workflows/9580/ — 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.
Automate WhatsApp communication for recruitment agencies with an interactive, structured customer experience. This workflow handles pricing inquiries, request submissions, tracking, complaints, and hu
Code. Uses googleSheets, gmail, supabase, stickyNote. Webhook trigger; 51 nodes.
This template turns Podium's conversation inbox into a full sales CRM with a custom funnel, AI message classification, automated drip follow-ups, daily admin reports, and a live Kanban dashboard. Six
Ticketing Backend automates registration, QR-ticket generation, email delivery, and check-in validation using Google Sheets, Gmail, and a webhook scanner — reducing manual ticket prep from ~3 hours to
> n8n + Gmail + Google Sheets + Typeform