This workflow follows the Emailsend → OpenAI 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 →
{
"name": "Eastside Remodels - Lead Nurturing AI Agent",
"nodes": [
{
"parameters": {
"path": "/eastside-remodels-bot",
"responseMode": "responseNode",
"options": {
"cors": {
"allowedOrigins": "*"
}
}
},
"id": "webhook_trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
250,
300
]
},
{
"parameters": {
"model": "gpt-4",
"messages": {
"values": [
{
"role": "system",
"content": "You are a helpful AI assistant for Eastside Remodels, a home remodeling company. Your role is to:\n1. Answer frequently asked questions about our services\n2. Qualify leads by asking relevant questions\n3. Schedule appointments when appropriate\n\nOur services include:\n- Kitchen remodeling\n- Bathroom renovations\n- Basement finishing\n- Room additions\n- Whole home renovations\n- Exterior remodeling\n\nBusiness hours: Monday-Friday 8AM-6PM, Saturday 9AM-4PM\n\nAlways be professional, friendly, and helpful. Collect the following information when qualifying leads:\n- Name\n- Phone number\n- Email\n- Project type\n- Timeline\n- Budget range\n- Property location"
},
{
"role": "user",
"content": "={{ $json.message }}"
}
]
},
"options": {
"temperature": 0.7,
"maxTokens": 500
}
},
"id": "openai_chat",
"name": "OpenAI Chat",
"type": "n8n-nodes-base.openAi",
"typeVersion": 1,
"position": [
650,
300
]
},
{
"parameters": {
"functionCode": "const message = items[0].json.message.toLowerCase();\nconst response = items[0].json.response;\n\n// Determine intent\nlet intent = 'general';\n\nif (message.includes('price') || message.includes('cost') || message.includes('budget')) {\n intent = 'pricing';\n} else if (message.includes('schedule') || message.includes('appointment') || message.includes('book') || message.includes('meeting')) {\n intent = 'scheduling';\n} else if (message.includes('timeline') || message.includes('how long') || message.includes('duration')) {\n intent = 'timeline';\n} else if (message.includes('service') || message.includes('what do you')) {\n intent = 'services';\n} else if (message.includes('contact') || message.includes('phone') || message.includes('email')) {\n intent = 'contact';\n}\n\n// Extract lead information if present\nconst emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/;\nconst phoneRegex = /\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b/;\n\nconst extractedData = {\n intent: intent,\n email: message.match(emailRegex)?.[0] || null,\n phone: message.match(phoneRegex)?.[0] || null,\n message: message,\n response: response,\n timestamp: new Date().toISOString(),\n leadScore: 0\n};\n\n// Calculate lead score\nif (extractedData.email) extractedData.leadScore += 20;\nif (extractedData.phone) extractedData.leadScore += 20;\nif (intent === 'scheduling') extractedData.leadScore += 30;\nif (intent === 'pricing') extractedData.leadScore += 15;\nif (message.includes('urgent') || message.includes('asap')) extractedData.leadScore += 15;\n\nreturn [extractedData];"
},
"id": "intent_classifier",
"name": "Intent Classifier",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
450,
300
]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.intent }}",
"value2": "scheduling"
}
]
}
},
"id": "is_scheduling",
"name": "Is Scheduling?",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
850,
300
]
},
{
"parameters": {
"resource": "event",
"operation": "create",
"calendar": "primary",
"summary": "Eastside Remodels Consultation",
"start": "={{ $json.appointmentDate }}",
"end": "={{ $json.appointmentEndDate }}",
"description": "Lead Information:\nName: {{ $json.name }}\nPhone: {{ $json.phone }}\nEmail: {{ $json.email }}\nProject: {{ $json.projectType }}\nBudget: {{ $json.budget }}\nNotes: {{ $json.notes }}",
"options": {
"sendNotifications": true,
"sendUpdates": "all"
}
},
"id": "google_calendar",
"name": "Book in Google Calendar",
"type": "n8n-nodes-base.googleCalendar",
"typeVersion": 1,
"position": [
1050,
200
]
},
{
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.leadScore }}",
"operation": "larger",
"value2": 50
}
]
}
},
"id": "high_quality_lead",
"name": "High Quality Lead?",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
850,
500
]
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "lead",
"operation": "create",
"company": "={{ $json.name }}",
"email": "={{ $json.email }}",
"phone": "={{ $json.phone }}",
"additionalFields": {
"leadSource": "AI Chat Bot",
"status": "Open - Not Contacted",
"rating": "={{ $json.leadScore >= 70 ? 'Hot' : $json.leadScore >= 40 ? 'Warm' : 'Cold' }}",
"description": "Project Type: {{ $json.projectType }}\nBudget: {{ $json.budget }}\nTimeline: {{ $json.timeline }}\nConversation: {{ $json.message }}"
}
},
"id": "salesforce_lead",
"name": "Create Salesforce Lead",
"type": "n8n-nodes-base.salesforce",
"typeVersion": 1,
"position": [
1050,
400
]
},
{
"parameters": {
"fromEmail": "info@eastsideremodels.com",
"toEmail": "={{ $json.email }}",
"subject": "Thank You for Contacting Eastside Remodels",
"html": "<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; line-height: 1.6; }\n .container { max-width: 600px; margin: 0 auto; padding: 20px; }\n .header { background-color: #2c3e50; color: white; padding: 20px; text-align: center; }\n .content { padding: 20px; background-color: #f4f4f4; }\n .cta { background-color: #3498db; color: white; padding: 10px 20px; text-decoration: none; display: inline-block; margin-top: 20px; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h1>Eastside Remodels</h1>\n </div>\n <div class=\"content\">\n <h2>Thank you for your interest!</h2>\n <p>Dear {{ $json.name }},</p>\n <p>Thank you for contacting Eastside Remodels. We've received your inquiry about {{ $json.projectType }} and one of our remodeling specialists will contact you within 24 hours.</p>\n <p><strong>Your Project Details:</strong></p>\n <ul>\n <li>Project Type: {{ $json.projectType }}</li>\n <li>Timeline: {{ $json.timeline }}</li>\n <li>Budget Range: {{ $json.budget }}</li>\n </ul>\n <p>In the meantime, feel free to browse our portfolio at www.eastsideremodels.com</p>\n <a href=\"https://eastsideremodels.com\" class=\"cta\">View Our Work</a>\n </div>\n </div>\n</body>\n</html>",
"options": {
"attachments": []
}
},
"id": "send_email",
"name": "Send Follow-up Email",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1250,
300
]
},
{
"parameters": {
"content": "## FAQ Responses Database",
"height": 200,
"width": 400
},
"id": "faq_note",
"name": "FAQ Database",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
250,
500
]
},
{
"parameters": {
"functionCode": "// Store FAQ responses\nconst faqs = {\n \"pricing\": {\n \"kitchen\": \"Kitchen remodels typically range from $15,000 to $75,000 depending on size and finishes.\",\n \"bathroom\": \"Bathroom renovations usually cost between $8,000 to $35,000.\",\n \"basement\": \"Basement finishing projects range from $20,000 to $50,000 for most homes.\",\n \"general\": \"Project costs vary based on scope, materials, and finishes. We offer free consultations to provide accurate estimates.\"\n },\n \"timeline\": {\n \"kitchen\": \"Most kitchen remodels take 6-12 weeks from start to finish.\",\n \"bathroom\": \"Bathroom renovations typically complete in 3-5 weeks.\",\n \"basement\": \"Basement projects usually require 8-12 weeks depending on complexity.\",\n \"general\": \"Project timelines vary by scope. We'll provide a detailed timeline during consultation.\"\n },\n \"services\": [\n \"Kitchen Remodeling\",\n \"Bathroom Renovations\",\n \"Basement Finishing\",\n \"Room Additions\",\n \"Whole Home Renovations\",\n \"Exterior Remodeling\",\n \"Custom Cabinetry\",\n \"Flooring Installation\"\n ],\n \"warranty\": \"We offer a 5-year warranty on workmanship and stand behind all manufacturer warranties on materials.\",\n \"financing\": \"Yes, we offer flexible financing options through our lending partners with terms up to 84 months.\"\n};\n\nreturn [{ json: { faqs } }];"
},
"id": "faq_database",
"name": "FAQ Database",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
250,
700
]
},
{
"parameters": {
"resource": "message",
"operation": "send",
"from": "+1234567890",
"to": "={{ $json.phone }}",
"message": "Hi {{ $json.name }}! This is Eastside Remodels. Thanks for your interest in our {{ $json.projectType }} services. Your appointment is confirmed for {{ $json.appointmentDate }}. Reply STOP to opt out."
},
"id": "twilio_sms",
"name": "Send SMS Confirmation",
"type": "n8n-nodes-base.twilio",
"typeVersion": 1,
"position": [
1250,
100
]
},
{
"parameters": {
"channel": "#new-leads",
"text": ":house: *New Lead Alert!*\n\n*Name:* {{ $json.name }}\n*Email:* {{ $json.email }}\n*Phone:* {{ $json.phone }}\n*Project:* {{ $json.projectType }}\n*Budget:* {{ $json.budget }}\n*Timeline:* {{ $json.timeline }}\n*Lead Score:* {{ $json.leadScore }}/100\n*Status:* {{ $json.leadScore >= 70 ? ':fire: HOT' : $json.leadScore >= 40 ? ':sunny: WARM' : ':snowflake: COLD' }}",
"options": {
"username": "Eastside Bot",
"icon_emoji": ":robot_face:"
}
},
"id": "slack_notification",
"name": "Notify Sales Team",
"type": "n8n-nodes-base.slack",
"typeVersion": 1,
"position": [
1050,
600
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
}
},
"id": "webhook_response",
"name": "Webhook Response",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
1450,
300
]
}
],
"connections": {
"webhook_trigger": {
"main": [
[
{
"node": "intent_classifier",
"type": "main",
"index": 0
}
]
]
},
"intent_classifier": {
"main": [
[
{
"node": "openai_chat",
"type": "main",
"index": 0
},
{
"node": "is_scheduling",
"type": "main",
"index": 0
},
{
"node": "high_quality_lead",
"type": "main",
"index": 0
}
]
]
},
"openai_chat": {
"main": [
[
{
"node": "webhook_response",
"type": "main",
"index": 0
}
]
]
},
"is_scheduling": {
"main": [
[
{
"node": "google_calendar",
"type": "main",
"index": 0
}
],
[
{
"node": "send_email",
"type": "main",
"index": 0
}
]
]
},
"high_quality_lead": {
"main": [
[
{
"node": "salesforce_lead",
"type": "main",
"index": 0
},
{
"node": "slack_notification",
"type": "main",
"index": 0
}
],
[
{
"node": "send_email",
"type": "main",
"index": 0
}
]
]
},
"google_calendar": {
"main": [
[
{
"node": "twilio_sms",
"type": "main",
"index": 0
}
]
]
},
"salesforce_lead": {
"main": [
[
{
"node": "send_email",
"type": "main",
"index": 0
}
]
]
},
"send_email": {
"main": [
[
{
"node": "webhook_response",
"type": "main",
"index": 0
}
]
]
},
"twilio_sms": {
"main": [
[
{
"node": "send_email",
"type": "main",
"index": 0
}
]
]
},
"slack_notification": {
"main": [
[
{
"node": "webhook_response",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"saveDataSuccessExecution": "all",
"saveManualExecutions": true,
"saveExecutionProgress": true
},
"staticData": null,
"tags": [
{
"name": "AI Agent",
"createdAt": "2024-01-01T00:00:00.000Z"
},
{
"name": "Lead Generation",
"createdAt": "2024-01-01T00:00:00.000Z"
}
],
"triggerCount": 1,
"updatedAt": "2024-01-01T00:00:00.000Z",
"versionId": "1.0.0"
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Eastside Remodels - Lead Nurturing AI Agent. Uses openAi, googleCalendar, salesforce, emailSend. Webhook trigger; 13 nodes.
Source: https://gist.github.com/imatomicrohit-ux/e4540d996b87722d58adbff0b2f38a75 — 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.
This n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La
The system collects real-time wearable health data, normalizes it, and uses AI to analyze trends and risk scores. It detects anomalies by comparing with historical patterns and automatically triggers
This workflow automates customer feedback processing by analyzing sentiment, identifying key issues, generating personalized responses, and escalating critical cases to support teams when required. De
AI-Driven Handbook Generator with Multi-Agent Orchestration (Pyragogy AI Village). Uses start, postgres, openAi, emailSend. Webhook trigger; 36 nodes.
AI-Driven Handbook Generator with Multi-Agent Orchestration (Pyragogy AI Village). Uses start, postgres, openAi, emailSend. Webhook trigger; 36 nodes.