This workflow corresponds to n8n.io template #9628 — we link there as the canonical source.
This workflow follows the Agent → 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "c0cade34-0c2e-4ba5-831a-7f88bc22fcab",
"name": "Parse Client Data",
"type": "n8n-nodes-base.code",
"position": [
-704,
368
],
"parameters": {
"jsCode": "// Parse and normalize client onboarding form data\nconst formData = $input.first().json;\n\nreturn {\n json: {\n submissionId: formData.submissionID || Date.now().toString(),\n clientName: formData.clientName || formData.q3_clientName,\n companyName: formData.companyName || formData.q4_companyName,\n clientEmail: formData.clientEmail || formData.q5_clientEmail,\n clientPhone: formData.clientPhone || formData.q6_clientPhone,\n projectName: formData.projectName || formData.q7_projectName,\n projectScope: formData.projectScope || formData.q8_projectScope,\n budget: parseFloat(formData.budget || formData.q9_budget),\n timeline: formData.timeline || formData.q10_timeline,\n startDate: formData.startDate || formData.q11_startDate,\n endDate: formData.endDate || formData.q12_endDate,\n projectType: formData.projectType || formData.q13_projectType,\n industry: formData.industry || formData.q14_industry,\n preferences: formData.preferences || formData.q15_preferences,\n communicationPreference: formData.communicationPreference || formData.q16_communicationPreference,\n submittedAt: new Date().toISOString(),\n status: 'new'\n }\n};"
},
"typeVersion": 2
},
{
"id": "457370cc-660a-44a2-b5eb-3f5c26038b7b",
"name": "AI Agent - Team Suggestion",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-416,
368
],
"parameters": {
"text": "=You are an expert project scoping agent. Given this client data, recommend a team composition, estimate hours, and evaluate budget adequacy:\n\nClient Data:\n- Company: {{ $json.companyName }}\n- Project: {{ $json.projectName }}\n- Project Type: {{ $json.projectType }}\n- Budget: ${{ $json.budget }}\n- Timeline: {{ $json.timeline }}\n- Scope: {{ $json.projectScope }}\n\nReturn JSON:\n{\n \"roles\": [\"role1\",\"role2\",...],\n \"estimatedHours\": number,\n \"isBudgetSufficient\": boolean,\n \"priority\": \"low|medium|high\",\n \"justification\": \"text\"\n}",
"options": {
"systemMessage": "You are an agency AI agent for project scoping and team planning."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "251809f2-5955-4af3-a22b-daa2628057cc",
"name": "Merge AI Insights",
"type": "n8n-nodes-base.code",
"position": [
-80,
368
],
"parameters": {
"jsCode": "// Merge AI agent output with client data\nconst data = $input.first().json;\nlet aiOut;\ntry {\n aiOut = JSON.parse(data.output);\n} catch (e) {\n aiOut = {\n roles: ['Project Manager','Developer','Designer'],\n estimatedHours: 200,\n isBudgetSufficient: false,\n priority: 'medium',\n justification: 'Fallback values used'\n };\n}\n\nreturn {\n json: {\n ...data,\n suggestedTeam: aiOut.roles,\n estimatedHours: aiOut.estimatedHours,\n isBudgetSufficient: aiOut.isBudgetSufficient,\n priority: aiOut.priority,\n teamSize: aiOut.roles.length,\n hourlyRate: Math.round(data.budget / aiOut.estimatedHours),\n aiAnalysis: aiOut.justification\n }\n};"
},
"typeVersion": 2
},
{
"id": "6884ae96-18c2-4aaa-bbcc-4eb7e5d78cf5",
"name": "Generate Proposal",
"type": "n8n-nodes-base.code",
"position": [
64,
528
],
"parameters": {
"jsCode": "// Generate personalized proposal content\nconst data = $input.first().json;\n\nconst proposalContent = `\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; max-width: 800px; margin: 0 auto; padding: 20px; }\n h1 { color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }\n h2 { color: #34495e; margin-top: 30px; }\n .header { background: #3498db; color: white; padding: 20px; text-align: center; margin: -20px -20px 30px -20px; }\n .section { background: #f8f9fa; padding: 20px; margin: 20px 0; border-radius: 5px; }\n .team { display: flex; flex-wrap: wrap; gap: 10px; }\n .team-member { background: white; padding: 10px; border-radius: 3px; border-left: 3px solid #3498db; }\n .price { font-size: 32px; color: #27ae60; font-weight: bold; }\n table { width: 100%; border-collapse: collapse; margin: 20px 0; }\n th, td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }\n th { background: #3498db; color: white; }\n </style>\n</head>\n<body>\n <div class=\"header\">\n <h1>Project Proposal</h1>\n <p>For ${data.companyName}</p>\n </div>\n \n <h2>Project Overview</h2>\n <div class=\"section\">\n <p><strong>Project Name:</strong> ${data.projectName}</p>\n <p><strong>Client:</strong> ${data.clientName}</p>\n <p><strong>Project Type:</strong> ${data.projectType}</p>\n <p><strong>Timeline:</strong> ${data.timeline}</p>\n <p><strong>Start Date:</strong> ${data.startDate}</p>\n <p><strong>End Date:</strong> ${data.endDate}</p>\n </div>\n \n <h2>Project Scope</h2>\n <div class=\"section\">\n <p>${data.projectScope}</p>\n </div>\n \n <h2>Recommended Team</h2>\n <div class=\"section\">\n <p><strong>Team Size:</strong> ${data.teamSize} professionals</p>\n <p><strong>Estimated Hours:</strong> ${data.estimatedHours} hours</p>\n <div class=\"team\">\n ${data.suggestedTeam.map(role => `<div class=\"team-member\">${role}</div>`).join('')}\n </div>\n </div>\n \n <h2>Investment</h2>\n <div class=\"section\" style=\"text-align: center;\">\n <p class=\"price\">$${data.budget.toLocaleString()}</p>\n <p>Estimated Hourly Rate: $${data.hourlyRate}</p>\n </div>\n \n <h2>Project Deliverables</h2>\n <table>\n <tr>\n <th>Phase</th>\n <th>Deliverable</th>\n <th>Timeline</th>\n </tr>\n <tr>\n <td>Phase 1: Discovery</td>\n <td>Requirements Document, Wireframes</td>\n <td>Week 1-2</td>\n </tr>\n <tr>\n <td>Phase 2: Design</td>\n <td>Visual Designs, Prototypes</td>\n <td>Week 3-4</td>\n </tr>\n <tr>\n <td>Phase 3: Development</td>\n <td>Working Software/Assets</td>\n <td>Week 5-10</td>\n </tr>\n <tr>\n <td>Phase 4: Testing & Launch</td>\n <td>QA Report, Final Delivery</td>\n <td>Week 11-12</td>\n </tr>\n </table>\n \n <h2>Next Steps</h2>\n <div class=\"section\">\n <ol>\n <li>Review and sign this proposal</li>\n <li>Complete contract via DocuSign</li>\n <li>Attend kickoff meeting</li>\n <li>Provide initial assets and access</li>\n <li>Project begins on ${data.startDate}</li>\n </ol>\n </div>\n \n <div style=\"margin-top: 50px; padding-top: 20px; border-top: 2px solid #ddd; text-align: center; color: #7f8c8d;\">\n <p>Thank you for choosing our agency!</p>\n <p>Questions? Contact us at user@example.com</p>\n </div>\n</body>\n</html>\n`;\n\nreturn {\n json: {\n ...data,\n proposalHtml: proposalContent,\n proposalFileName: `Proposal_${data.companyName.replace(/\\s/g, '_')}_${Date.now()}.pdf`\n }\n};"
},
"typeVersion": 2
},
{
"id": "5cd3ec5a-5f6e-4881-a251-b653cdaa4734",
"name": "Create Asana Project",
"type": "n8n-nodes-base.asana",
"position": [
224,
336
],
"parameters": {
"name": "={{ $json.projectName }} - {{ $json.companyName }}",
"workspace": "1211637335390340",
"otherProperties": {}
},
"credentials": {
"asanaApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f2418b9c-dfa0-45a7-b3aa-fd5b32d3a742",
"name": "Generate Tasks",
"type": "n8n-nodes-base.code",
"position": [
256,
592
],
"parameters": {
"jsCode": "// Generate project tasks based on project type and timeline\nconst data = $input.first().json;\n\nconst standardTasks = [\n { name: 'Kickoff Meeting', assignee: 'Project Manager', dueOffset: 1 },\n { name: 'Gather Requirements', assignee: 'Project Manager', dueOffset: 3 },\n { name: 'Create Project Brief', assignee: 'Project Manager', dueOffset: 5 },\n { name: 'Design Phase - Wireframes', assignee: 'UI/UX Designer', dueOffset: 10 },\n { name: 'Design Phase - Visual Design', assignee: 'UI/UX Designer', dueOffset: 15 },\n { name: 'Client Review - Design', assignee: 'Project Manager', dueOffset: 18 },\n { name: 'Development Phase Start', assignee: 'Lead Developer', dueOffset: 21 },\n { name: 'Mid-Project Check-in', assignee: 'Project Manager', dueOffset: 35 },\n { name: 'QA Testing', assignee: 'QA Tester', dueOffset: 50 },\n { name: 'Client UAT', assignee: 'Project Manager', dueOffset: 55 },\n { name: 'Final Revisions', assignee: 'Team', dueOffset: 60 },\n { name: 'Launch/Delivery', assignee: 'Project Manager', dueOffset: 65 },\n { name: 'Post-Launch Review', assignee: 'Project Manager', dueOffset: 70 }\n];\n\nconst tasks = standardTasks.map(task => {\n const dueDate = new Date(data.startDate);\n dueDate.setDate(dueDate.getDate() + task.dueOffset);\n \n return {\n name: task.name,\n assignee: task.assignee,\n dueDate: dueDate.toISOString().split('T')[0],\n description: `Task for ${data.projectName}`,\n priority: task.dueOffset < 10 ? 'high' : 'normal'\n };\n});\n\nreturn {\n json: {\n ...data,\n tasks: tasks,\n taskCount: tasks.length\n }\n};"
},
"typeVersion": 2
},
{
"id": "d37c092a-0aff-44bc-b474-d52c5167c649",
"name": "Create Slack Channel",
"type": "n8n-nodes-base.slack",
"position": [
512,
352
],
"parameters": {
"operation": "create"
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "8398e5a3-67b0-4f58-9285-f121f18a6549",
"name": "Send Slack Welcome",
"type": "n8n-nodes-base.slack",
"position": [
544,
624
],
"parameters": {
"text": "=\ud83c\udf89 Welcome to your project channel, {{ $json.companyName }}!\n\n\ud83d\udccb **Project:** {{ $json.projectName }}\n\ud83d\udcb0 **Budget:** ${{ $json.budget }}\n\ud83d\udcc5 **Timeline:** {{ $json.startDate }} to {{ $json.endDate }}\n\ud83d\udc65 **Team Size:** {{ $json.teamSize }} members\n\n**Your Team:**\n{{ $json.suggestedTeam.map(role => '\u2022 ' + role).join('\\n') }}\n\nWe'll use this channel for all project communications. Looking forward to working together!",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.channelId }}"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "11879f0d-ea22-4ff5-970e-f50170fee82c",
"name": "Send Welcome Email",
"type": "n8n-nodes-base.gmail",
"position": [
864,
656
],
"parameters": {
"sendTo": "={{ $json.clientEmail }}",
"message": "=Hi {{ $json.clientName }},\n\nWelcome aboard! We're thrilled to partner with {{ $json.companyName }} on {{ $json.projectName }}.\n\n**What's Next:**\n\n1. \u2705 Review your personalized proposal (attached)\n2. \u270d\ufe0f Sign the contract via DocuSign (link coming shortly)\n3. \ud83d\udcc5 Join our kickoff meeting (calendar invite sent separately)\n4. \ud83d\udcac Access your dedicated Slack channel for project updates\n5. \ud83d\ude80 Project kickoff on {{ $json.startDate }}\n\n**Your Project Details:**\n\u2022 Budget: ${{ $json.budget }}\n\u2022 Timeline: {{ $json.timeline }}\n\u2022 Team Size: {{ $json.teamSize }} professionals\n\u2022 Priority: {{ $json.priority }}\n\n**Your Dedicated Team:**\n{{ $json.suggestedTeam.map(role => '\u2022 ' + role).join('\\n') }}\n\nWe've created a comprehensive project plan in Asana where you can track progress in real-time.\n\n**Client Portal Access:**\nURL: https://portal.agency.com\nUsername: {{ $json.clientEmail }}\n(Password will be sent separately)\n\nIf you have any questions before we kick off, feel free to reply to this email or reach out via Slack.\n\nExcited to get started!\n\nBest regards,\nThe Agency Team\n\n---\nThis is an automated onboarding email. Your dedicated project manager will be in touch within 24 hours.",
"options": {},
"subject": "=\ud83c\udf89 Welcome to Our Agency - {{ $json.projectName }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "b7da0224-d315-4e3f-b761-25d1b3003718",
"name": "Create HubSpot Contact",
"type": "n8n-nodes-base.hubspot",
"position": [
832,
352
],
"parameters": {
"email": "user@example.com",
"options": {},
"authentication": "appToken",
"additionalFields": {}
},
"credentials": {
"hubspotAppToken": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "285627c0-9e6b-464a-bde7-66f69bc5888b",
"name": "Log to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1280,
464
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "client Name",
"type": "string",
"display": true,
"required": false,
"displayName": "client Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "client Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "client Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "client Email",
"type": "string",
"display": true,
"required": false,
"displayName": "client Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company Name",
"type": "string",
"display": true,
"required": false,
"displayName": "company Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "project Name",
"type": "string",
"display": true,
"required": false,
"displayName": "project Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "project Scope",
"type": "string",
"display": true,
"required": false,
"displayName": "project Scope",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "budget",
"type": "string",
"display": true,
"required": false,
"displayName": "budget",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "timeline",
"type": "string",
"display": true,
"required": false,
"displayName": "timeline",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "start Date",
"type": "string",
"display": true,
"required": false,
"displayName": "start Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "end Date",
"type": "string",
"display": true,
"required": false,
"displayName": "end Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "project Type",
"type": "string",
"display": true,
"required": false,
"displayName": "project Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "industry",
"type": "string",
"display": true,
"required": false,
"displayName": "industry",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "preferences",
"type": "string",
"display": true,
"required": false,
"displayName": "preferences",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "communication Preference",
"type": "string",
"display": true,
"required": false,
"displayName": "communication Preference",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1H3BF_uqLMhrxXZnMg4r1RXX30lftIaxmYiZxqkSFsZU/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1H3BF_uqLMhrxXZnMg4r1RXX30lftIaxmYiZxqkSFsZU",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1H3BF_uqLMhrxXZnMg4r1RXX30lftIaxmYiZxqkSFsZU/edit?usp=drivesdk",
"cachedResultName": "Client Onboarding"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.4
},
{
"id": "245c95d1-e5df-427b-b17e-cee3628f5448",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1056,
-32
],
"parameters": {
"width": 288,
"height": 560,
"content": "\ud83d\udce9 **TRIGGER: New Client Submission**\n\nCaptures comprehensive client details from Jotform:\n\u2022 Client/Company information\n\u2022 Project scope and requirements\n\u2022 Budget and timeline\n\u2022 Communication preferences\n\nCreate your intake form on [Jotform](https://www.jotform.com/?partner=mediajade)\n\n**Required Form Fields:**\n- Client Name\n- Company Name\n- Email & Phone\n- Project Name & Type\n- Budget & Timeline\n- Project Scope (long text)\n- Industry & Preferences"
},
"typeVersion": 1
},
{
"id": "8dd11531-9d79-464b-b584-cac258d4b63e",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-736,
96
],
"parameters": {
"height": 432,
"content": "\ud83e\uddfe **PARSE & NORMALIZE**\n\nExtracts and standardizes all client data from Jotform submission.\n\nHandles multiple field name formats (q3_field, field, etc.)\n\nPrepares clean data structure for downstream processing."
},
"typeVersion": 1
},
{
"id": "52c49cf3-27e0-41ca-b160-ea99a779b57e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-464,
64
],
"parameters": {
"width": 272,
"height": 576,
"content": "\ud83e\udd16 **AI AGENT - TEAM SUGGESTION**\n\nReplaces the static logic node with a LangChain AI Agent:\n\u2022 Analyzes project input data\n\u2022 Suggests optimal roles & hours\n\u2022 Evaluates budget adequacy & priority\n\u2022 Generates justification text"
},
"typeVersion": 1
},
{
"id": "fd913e86-e028-4d0c-a464-d2ef6654aba7",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-160,
-16
],
"parameters": {
"width": 256,
"height": 400,
"content": "\ud83d\udcc4 **PROPOSAL GENERATION**\n\nCreates beautiful, branded HTML proposal:\n\n\u2022 Project overview\n\u2022 Recommended team\n\u2022 Investment breakdown\n\u2022 Deliverables timeline\n\u2022 Next steps\n\nReady for PDF conversion or DocuSign!\n\n**Customize:**\nEdit HTML template with your branding, colors, and logo."
},
"typeVersion": 1
},
{
"id": "d70eab5c-5cc6-4daa-9c90-7b7d308fed1a",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-16
],
"parameters": {
"width": 320,
"height": 736,
"content": "\ud83d\udcca **PROJECT MANAGEMENT SETUP**\n\n**Asana Project Creation:**\n\u2022 Creates new project\n\u2022 Sets timeline and notes\n\u2022 Links to client data\n\n**Task Generation:**\n\u2022 13 standard tasks\n\u2022 Auto-assigned to roles\n\u2022 Due dates calculated from start date\n\u2022 Customizable per project type\n\nPhases: Discovery \u2192 Design \u2192 Development \u2192 Testing \u2192 Launch"
},
"typeVersion": 1
},
{
"id": "b22c2ef8-5c13-4a4a-bdeb-3e6a5fe4e7e1",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
464,
0
],
"parameters": {
"width": 256,
"height": 816,
"content": "\ud83d\udcac **SLACK WORKSPACE SETUP**\n\n**Channel Creation:**\n\u2022 Private client-specific channel\n\u2022 Named: client-company-name\n\u2022 Topic set to project name\n\n**Welcome Message:**\n\u2022 Project overview\n\u2022 Team introduction\n\u2022 Budget & timeline\n\u2022 Communication guidelines\n\n**Team Invitations:**\nManually invite suggested team members or automate with Slack API!"
},
"typeVersion": 1
},
{
"id": "f3259ceb-0244-4398-990e-e7bc240666fa",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
0
],
"parameters": {
"width": 288,
"height": 832,
"content": "\u2709\ufe0f **CLIENT COMMUNICATION**\n\n**Welcome Email includes:**\n\u2705 Personalized greeting\n\u2705 Project details recap\n\u2705 Team introduction\n\u2705 Next steps checklist\n\u2705 Portal access info\n\u2705 Slack channel invite\n\u2705 Contact information\n\n**Attachments:**\n\u2022 Proposal PDF\n\u2022 Getting Started Guide\n\u2022 Brand Guidelines\n\nFully customizable HTML template!"
},
"typeVersion": 1
},
{
"id": "f8d1a847-4da5-480f-81d7-8b2d5a7baa1b",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1184,
112
],
"parameters": {
"width": 304,
"height": 480,
"content": "\ud83d\udcc8 **CRM & ANALYTICS**\n\n**HubSpot Contact:**\n\u2022 Creates new contact\n\u2022 Sets lifecycle stage to 'customer'\n\u2022 Adds company details\n\u2022 Tags with project type\n\u2022 Lead status: OPEN\n\n**Google Sheets Log:**\n\u2022 Complete client database\n\u2022 Project tracking\n\u2022 Budget & timeline data\n\u2022 Team assignments\n\u2022 Analytics & reporting\n\nConnect to Data Studio for dashboards!"
},
"typeVersion": 1
},
{
"id": "c473c2ca-e754-457f-9195-ba75a1690c64",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-416,
624
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "2f02d7ac-87c8-416e-aa67-a7c13b5f9541",
"name": "Jotform Trigger",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-1024,
384
],
"parameters": {
"form": "252862984356471"
},
"credentials": {
"jotFormApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"connections": {
"Generate Tasks": {
"main": [
[
{
"node": "Create Slack Channel",
"type": "main",
"index": 0
}
]
]
},
"Jotform Trigger": {
"main": [
[
{
"node": "Parse Client Data",
"type": "main",
"index": 0
}
]
]
},
"Generate Proposal": {
"main": [
[
{
"node": "Create Asana Project",
"type": "main",
"index": 0
},
{
"node": "Generate Tasks",
"type": "main",
"index": 0
}
]
]
},
"Merge AI Insights": {
"main": [
[
{
"node": "Generate Proposal",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent - Team Suggestion",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Parse Client Data": {
"main": [
[
{
"node": "AI Agent - Team Suggestion",
"type": "main",
"index": 0
}
]
]
},
"Send Slack Welcome": {
"main": [
[
{
"node": "Send Welcome Email",
"type": "main",
"index": 0
},
{
"node": "Create HubSpot Contact",
"type": "main",
"index": 0
}
]
]
},
"Send Welcome Email": {
"main": [
[
{
"node": "Log to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Create Asana Project": {
"main": [
[
{
"node": "Create Slack Channel",
"type": "main",
"index": 0
}
]
]
},
"Create Slack Channel": {
"main": [
[
{
"node": "Send Slack Welcome",
"type": "main",
"index": 0
}
]
]
},
"Create HubSpot Contact": {
"main": [
[
{
"node": "Log to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"AI Agent - Team Suggestion": {
"main": [
[
{
"node": "Merge AI Insights",
"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.
asanaApigmailOAuth2googleSheetsOAuth2ApihubspotAppTokenjotFormApiopenAiApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Streamline client onboarding and project setup from hours to minutes with AI-driven automation. This intelligent workflow eliminates manual coordination, builds proposals, creates projects in Asana, welcomes clients on Slack, and logs everything — ensuring 90% faster onboarding…
Source: https://n8n.io/workflows/9628/ — 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.
Transform accounts payable from a manual bottleneck into an intelligent, automated system that reads invoices, detects fraud, and processes payments automatically—saving 20+ hours per week while preve
Transform college admissions from an overwhelming manual process into an intelligent, efficient, and equitable system that analyzes essays, scores applicants holistically, and identifies top candidate
Revolutionize your recruitment process with intelligent AI-driven candidate screening that evaluates resumes, scores applicants, and automatically routes them based on fit - saving 10-15 hours per wee
Automates sales data analysis and strategic insight generation for sales managers and strategists needing actionable intelligence. Fetches multi-source data from sales, marketing, and financial system
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.