Complete client onboarding: Form to Monday.com, Google Drive & Email
Ready for 3.0Ready for 3.0. This template uses no nodes that n8n 3.0 removes. No removed nodes, versions or helpers found. Static check, last run 2026-10-19.
Nodes used (6)
- n8n Form Trigger
n8n-nodes-base.formTrigger - Monday.com
n8n-nodes-base.mondayCom - Google Drive
n8n-nodes-base.googleDrive - Wait
n8n-nodes-base.wait - HTTP Request
n8n-nodes-base.httpRequest - Gmail
n8n-nodes-base.gmail
What it does
Overview Streamline your entire client onboarding process with a single workflow. When a new client submits the intake form, this automation creates a Monday.com item, generates a complete Google Drive folder structure from your template, updates the Monday item with the folder link, and sends a personalized welcome email—all automatically. What This Workflow Does 1. Displays a professional intake form (client name, email, project type) 2. Creates a new item in your Monday.com board with all details 3. Generates a Google Drive folder for the client 4. Duplicates your template folder structure using Apps Script 5. Updates the Monday.com item with the Google Drive folder link 6. Sends a welcome email to the client with folder access Key Features - End-to-end automation — From form submission to welcome email - CRM integration — All client data captured in Monday.com - Organized file storage — Consistent folder structure for every client - Professional onboarding — Clients receive immediate welcome email with resources - Fully customizable — Add more form fields, notifications, or integrations Prerequisites - Monday.com account with API credentials - Google Drive account with OAuth2 credentials - Gmail account with OAuth2 credentials - Google Apps Script deployment (code below) - Template folder in Google Drive with {{NAME}} placeholders Setup Step 1: Get your Monday.com IDs 1. Open your Monday.com board 2. Board ID: Check the URL → monday.com/boards/BOARDID 3. Group ID: Use Monday API Explorer or browser dev tools 4. Column IDs: Found in column settings or via API Step 2: Create your Drive template folder 📁 {{NAME}} - Client Files ├── 📁 01. Contracts & Agreements ├── 📁 02. {{NAME}} - Assets ├── 📁 03. Deliverables ├── 📁 04. Communications └── 📄 {{NAME}} - Project Brief.gdoc Step 3: Deploy Apps Script 1. Go to script.google.com 2. Create new project → Paste code below 3. Deploy → New deployment → Web app 4. Execute as: Me | Access: Anyone 5. Copy the deployment URL Step 4: Configure the workflow Replace these placeholders: - YOURBOARDID — Monday.com board ID - YOURGROUPID — Monday.com group ID - DESTINATIONPARENTFOLDERID — Drive folder for new client folders - YOURAPPSSCRIPTURL — Apps Script deployment URL - YOURTEMPLATEFOLDERID — Template folder to duplicate Step 5: Connect credentials - Monday.com API credentials - Google Drive OAuth2 - Gmail OAuth2 --- Apps Script Code javascript function doPost(e) { try { var params = e.parameter; var templateFolderId = params.templateFolderId; var name = params.name; var destinationFolderId = params.destinationFolderId; if (!templateFolderId || !name) { return jsonResponse({ success: false, error: 'Missing required parameters: templateFolderId and name are required' }); } var templateFolder = DriveApp.getFolderById(templateFolderId); if (destinationFolderId) { var destinationFolder = DriveApp.getFolderById(destinationFolderId); copyContentsRecursively(templateFolder, destinationFolder, name); return jsonResponse({ success: true, id: destinationFolder.getId(), url: destinationFolder.getUrl(), name: destinationFolder.getName(), mode: 'copiedtoexisting', timestamp: new Date().toISOString() }); } else { var parentFolder = templateFolder.getParents().next(); var newFolderName = replacePlaceholders(templateFolder.getName(), name); var newFolder = parentFolder.createFolder(newFolderName); copyContentsRecursively(templateFolder, newFolder, name); return jsonResponse({ success: true, id: newFolder.getId(), url: newFolder.getUrl(), name: newFolder.getName(), mode: 'creatednew', timestamp: new Date().toISOString() }); } } catch (error) { return jsonResponse({ success: false, error: error.toString() }); } } function replacePlaceholders(text, name) { var result = text; result = result.replace(/\{\{NAME\}\}/g, name); result = result.replace(/\{\{name\}\}/g, name.toLowerCase()); result = result.replace(/\{\{Name\}\}/g, name); return result; } function copyContentsRecursively(sourceFolder, destinationF