Complete Client Onboarding: Form to Monday.com, Google Drive & Email
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
Displays a professional intake form (client name, email, project type)
Creates a new item in your Monday.com board with all details
Generates a Google Drive folder for the client
Duplicates your template folder structure using Apps Script
Updates the Monday.com item with the Google Drive folder link
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
Open your Monday.com board
Board ID: Check the URL → monday.com/boards/BOARD_ID
Group ID: Use Monday API Explorer or browser dev tools
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
Go to script.google.com
Create new project → Paste code below
Deploy → New deployment → Web app
Execute as: Me | Access: Anyone
Copy the deployment URL
Step 4: Configure the workflow
Replace these placeholders:
YOUR_BOARD_ID — Monday.com board ID
YOUR_GROUP_ID — Monday.com group ID
DESTINATION_PARENT_FOLDER_ID — Drive folder for new client folders
YOUR_APPS_SCRIPT_URL — Apps Script deployment URL
YOUR_TEMPLATE_FOLDER_ID — Template folder to duplicate
Step 5: Connect credentials
Monday.com API credentials
Google Drive OAuth2
Gmail OAuth2
Apps Script Code
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: 'copied_to_existing',
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: 'created_new',
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, destinationFolder, name) {
var files = sourceFolder.getFiles();
while (files.hasNext()) {
try {
var file = files.next();
var newFileName = replacePlaceholders(file.getName(), name);
file.makeCopy(newFileName, destinationFolder);
Utilities.sleep(150);
} catch (error) {
Logger.log('Error copying file: ' + error.toString());
}
}
var subfolders = sourceFolder.getFolders();
while (subfolders.hasNext()) {
try {
var subfolder = subfolders.next();
var newSubfolderName = replacePlaceholders(subfolder.getName(), name);
var newSubfolder = destinationFolder.createFolder(newSubfolderName);
Utilities.sleep(200);
copyContentsRecursively(subfolder, newSubfolder, name);
} catch (error) {
Logger.log('Error copying subfolder: ' + error.toString());
}
}
}
function jsonResponse(data) {
return ContentService
.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
Use Cases
Agencies** — Automate client onboarding with CRM tracking
Freelancers** — Professional intake process for new projects
Consulting firms** — Standardized client setup workflow
Creative studios** — Organize assets and deliverables from day one
Service businesses** — Streamline customer setup and communication
Customization Ideas
Add more form fields: phone, company size, budget, deadline
Add Slack notification to alert your team
Create tasks in Monday.com sub-items
Add to Google Calendar for kickoff meeting
Integrate with invoicing (Stripe, QuickBooks)
Notes
Apps Script may take 30-60 seconds for large folder structures
Monday.com column IDs must match your board's actual columns
The welcome email can be customized with your branding
Test with a single client before full deployment