This workflow corresponds to n8n.io template #10376 — we link there as the canonical source.
This workflow follows the Agent → Emailsend 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": "erj9VZBeJsCXdIsB",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Automate Event Calendar Sync from Excel with GPT-4o-Mini-Powered Smart Summaries",
"tags": [],
"nodes": [
{
"id": "0f6ea127-37bf-4232-b115-8a2147e62562",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-2784,
-352
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"typeVersion": 1.2
},
{
"id": "4ea9696c-5b24-4642-a406-76f842da7ab4",
"name": "Read Excel File",
"type": "n8n-nodes-base.spreadsheetFile",
"position": [
-2320,
-352
],
"parameters": {
"options": {}
},
"typeVersion": 2
},
{
"id": "6df965c6-b497-47ea-a7cd-79063f125983",
"name": "Google Drive - Download Excel",
"type": "n8n-nodes-base.googleDrive",
"position": [
-2480,
-352
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.fileId }}"
},
"options": {},
"operation": "download"
},
"typeVersion": 3
},
{
"id": "89473215-2fe1-41d1-a27b-d0b52d59b2a3",
"name": "Set Excel File ID",
"type": "n8n-nodes-base.set",
"position": [
-2640,
-352
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "fileId",
"name": "fileId",
"type": "string",
"value": "YOUR_EXCEL_FILE_ID"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f81be40d-c060-4333-84b5-dec3702981f0",
"name": "Filter Valid Events",
"type": "n8n-nodes-base.filter",
"position": [
-2144,
-352
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "event_title_exists",
"operator": {
"type": "string",
"operation": "notEmpty"
},
"leftValue": "={{ $json.title }}",
"rightValue": ""
},
{
"id": "start_date_exists",
"operator": {
"type": "string",
"operation": "notEmpty"
},
"leftValue": "={{ $json.startDate }}",
"rightValue": ""
},
{
"id": "valid_date_format",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ new Date($json.startDate).toString() }}",
"rightValue": "Invalid Date"
}
]
}
},
"typeVersion": 2
},
{
"id": "f55e51ce-185b-47dc-9f00-7b0228e8654d",
"name": "Google Calendar - Create Event",
"type": "n8n-nodes-base.googleCalendar",
"position": [
-1280,
-208
],
"parameters": {
"end": "={{ $json.endDate }}",
"start": "={{ $json.startDate }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "primary",
"cachedResultName": "Primary"
},
"additionalFields": {
"color": "={{ $json.urgency === 'high' ? '11' : ($json.urgency === 'medium' ? '5' : '1') }}",
"location": "={{ $json.location || '' }}",
"showMeAs": "busy",
"attendees": "={{ $json.attendees || '' }}",
"description": "={{ $json.description }}\n\n---\nAI Category: {{ $json.category }}\nTags: {{ $json.tags }}\nUrgency: {{ $json.urgency }}",
"repeatUntil": "",
"sendUpdates": "none",
"maxAttendees": 0,
"repeatHowManyTimes": 1
},
"useDefaultReminders": false
},
"typeVersion": 1.2
},
{
"id": "561f037c-2402-4e55-9458-cfc19ff776bf",
"name": "Send Email Summary",
"type": "n8n-nodes-base.emailSend",
"position": [
-368,
-208
],
"parameters": {
"html": "={{ $json.emailBody }}",
"options": {},
"subject": "={{ $json.emailSubject }}",
"toEmail": "user@example.com",
"fromEmail": "user@example.com"
},
"typeVersion": 2.1
},
{
"id": "93e37187-97e4-4250-afb1-6aec29ae661e",
"name": "AI - Analyze Event Context",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1984,
-224
],
"parameters": {
"text": "={{ $json.title }}\n{{ $json.description }}\n{{ $json.location }}",
"agent": "conversationalAgent",
"options": {
"systemMessage": "You are an intelligent calendar event analyzer. Extract and enhance event information:\n1. Categorize the event (meeting, appointment, deadline, social, etc.)\n2. Suggest optimal duration if not provided (return in hours, e.g., 1 or 0.5)\n3. Add smart tags based on content\n4. Detect urgency level (low/medium/high)\n5. Suggest reminder times\n\nReturn ONLY valid JSON:\n{\"category\":\"meeting\",\"suggestedDuration\":1,\"tags\":[\"work\",\"planning\"],\"urgency\":\"medium\",\"reminderMinutes\":30,\"enhancedDescription\":\"improved description\"}"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "53f163ec-9b94-4d4a-a2b8-10d97cfc3e5a",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-2032,
-48
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "06b34d52-bf62-4478-8d70-e201cbb19297",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1824,
-48
],
"parameters": {
"jsonSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"category\": {\"type\": \"string\"},\n \"suggestedDuration\": {\"type\": \"number\"},\n \"tags\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}},\n \"urgency\": {\"type\": \"string\"},\n \"reminderMinutes\": {\"type\": \"number\"},\n \"enhancedDescription\": {\"type\": \"string\"}\n }\n}"
},
"typeVersion": 1
},
{
"id": "ce58f968-33a0-4e6c-bb43-8c45f997aabd",
"name": "Merge AI Insights",
"type": "n8n-nodes-base.merge",
"position": [
-1632,
-96
],
"parameters": {
"mode": "combine",
"options": {}
},
"typeVersion": 3
},
{
"id": "e6484d5c-c814-43f7-9f14-f61b68ebe4b9",
"name": "AI - Generate Smart Summary",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-784,
-208
],
"parameters": {
"text": "Events created:\n{{ $json.aggregatedEvents }}\n\nTotal: {{ $json.totalEvents }}\nTimestamp: {{ $json.syncTimestamp }}",
"options": {
"systemMessage": "You are an executive assistant. Create a professional, concise email summary of calendar events. Include:\n1. Executive summary (2-3 sentences)\n2. Breakdown by category\n3. Urgency highlights\n4. Suggested preparations\n5. Next sync information\n\nUse HTML formatting for email readability."
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "f1f696b4-8d0d-495c-b577-090e2a2c7a42",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-704,
16
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "5b46d55e-866d-4f07-97e5-593f9247fbd1",
"name": "Enrich Event Data",
"type": "n8n-nodes-base.set",
"position": [
-1472,
-96
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "enhanced_title",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "ai_category",
"name": "category",
"type": "string",
"value": "={{ $('AI - Analyze Event Context').item.json.category }}"
},
{
"id": "ai_tags",
"name": "tags",
"type": "string",
"value": "={{ $('AI - Analyze Event Context').item.json.tags.join(', ') }}"
},
{
"id": "enhanced_description",
"name": "description",
"type": "string",
"value": "={{ $('AI - Analyze Event Context').item.json.enhancedDescription || $json.description }}"
},
{
"id": "urgency",
"name": "urgency",
"type": "string",
"value": "={{ $('AI - Analyze Event Context').item.json.urgency }}"
},
{
"id": "calculated_end",
"name": "endDate",
"type": "string",
"value": "={{ $json.endDate || new Date(new Date($json.startDate).getTime() + ($('AI - Analyze Event Context').item.json.suggestedDuration * 3600000)).toISOString() }}"
},
{
"id": "reminder_minutes",
"name": "reminderMinutes",
"type": "number",
"value": "={{ $('AI - Analyze Event Context').item.json.reminderMinutes }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "36a9bb8e-d171-4e59-89ae-205e14b8ce4d",
"name": "Update Calendar Event",
"type": "n8n-nodes-base.googleCalendar",
"position": [
-1104,
-208
],
"parameters": {
"eventId": "={{ $json.id }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "primary",
"cachedResultName": "Primary"
},
"operation": "update",
"updateFields": {
"description": "={{ $json.description }}\n\n---\nAI Insights:\nCategory: {{ $json.category }}\nUrgency: {{ $json.urgency }}\nTags: {{ $json.tags }}"
}
},
"typeVersion": 1.2
},
{
"id": "dbec3dc3-12ea-41d6-9515-e0616a41cc5a",
"name": "Prepare AI Summary Data",
"type": "n8n-nodes-base.set",
"position": [
-928,
-208
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "total_events",
"name": "totalEvents",
"type": "number",
"value": "={{ $input.all().length }}"
},
{
"id": "aggregated_events",
"name": "aggregatedEvents",
"type": "string",
"value": "={{ $input.all().map(item => `${item.json.summary} | ${item.json.category || 'Uncategorized'} | ${item.json.urgency || 'Normal'} | ${new Date(item.json.start.dateTime || item.json.start.date).toLocaleDateString()}`).join('\\n') }}"
},
{
"id": "sync_time",
"name": "syncTimestamp",
"type": "string",
"value": "={{ new Date().toLocaleString() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5d55e282-1fff-491c-9576-a840d8f83e45",
"name": "Format AI Email",
"type": "n8n-nodes-base.set",
"position": [
-528,
-208
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "email_body",
"name": "emailBody",
"type": "string",
"value": "={{ $json.output }}"
},
{
"id": "email_subject",
"name": "emailSubject",
"type": "string",
"value": "\ud83d\udcc5 AI-Enhanced Calendar Sync - {{ $('Prepare AI Summary Data').item.json.syncTimestamp }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4b2eb9fd-21d2-4e49-9c0d-bce61fab9baa",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3232,
-624
],
"parameters": {
"width": 1904,
"height": 736,
"content": "## **Introduction**\nAutomatically imports Excel schedules from Google Drive, validates data with AI, syncs to Google Calendar, \nand emails smart summaries. Ideal for educators, managers, and administrators handling recurring academic\nor project schedules.\n## **How It Works**\nTrigger \u2192 Download Excel \u2192 Filter events \u2192 Dual AI analysis (OpenAI + Parser) \u2192 Merge insights \n\u2192 Enrich data \u2192 Create/Update Google Calendar events \u2192 Generate and email AI summary.\n## **Workflow Template**\nTrigger \u2192 Download Excel \u2192 Filter Events \u2192 AI Analysis \u2192 Merge Insights \u2192 Enrich Data \n\u2192 Create/Update Calendar \u2192 AI Summary \u2192 Email Report\n## **Workflow Steps**\n1. **Trigger**: Runs on schedule to detect new files.\n2. **Read Excel**: Converts spreadsheet data to JSON.\n3. **Filter Events**: Removes invalid entries.\n4. **AI Context Analysis**: Understands event links and conflicts.\n5. **Structured Parser**: Formats AI output for consistency.\n6. **Merge Insights**: Combines multi-AI results.\n7. **Enrich Data**: Prepares Google Calendar-ready events.\n8. **Calendar Actions**: Creates or updates events.\n9. **AI Summary**: Generates executive overview.\n10. **Email Delivery**: Sends formatted summary report.\n## **Setup**\n1. **Google Drive**: Connect OAuth2 \u2192 get file ID.\n2. **Calendar**: Enable API \u2192 authorize in n8n.\n3. **OpenAI**: Add API key \u2192 select GPT model.\n4. **Email (Gmail/SMTP)**: Configure sender and recipients.\n5. **Trigger**: Set timezone and frequency.\n6. **Excel Format**: Include Name, Date, Time, Location, Staff, etc.\n"
},
"typeVersion": 1
},
{
"id": "22ceba2a-6fbd-4677-b335-03d3d0cfb9c2",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1312,
-624
],
"parameters": {
"color": 5,
"width": 512,
"height": 368,
"content": "## **Use Cases**\n* **Education:** Sync course schedules and exams.\n* **Projects:** Import milestones, update team calendars.\n* **Events:** Manage venue bookings and notifications.\n* **HR:** Automate interviews, onboarding, and training.\n* **Healthcare:** Schedule shifts, appointments, maintenance.\n## **Customization**\n* Replace OpenAI with Claude, LLaMA, or Azure.\n* Route events to multiple calendars.\n* Filter by type, date, or priority.\n## **Benefits**\n* **Time Savings:** Cuts 5\u201310 hrs/week of manual work.\n* **Accuracy:** 95% fewer scheduling errors."
},
"typeVersion": 1
},
{
"id": "23b97c18-a4be-46fb-a7b0-60d1ec20b3f9",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-768,
-624
],
"parameters": {
"color": 6,
"width": 336,
"height": 224,
"content": "## **Prerequisites**\n* Google Workspace with Drive & Calendar\n* OpenAI API key\n* Gmail/SMTP setup\n* Standardized Excel schedule\n* n8n instance v1.0+\n* Basic OAuth2 setup"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "5b4aeb05-14da-43be-94f7-e2e8a87312c2",
"connections": {
"Format AI Email": {
"main": [
[
{
"node": "Send Email Summary",
"type": "main",
"index": 0
}
]
]
},
"Read Excel File": {
"main": [
[
{
"node": "Filter Valid Events",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Events": {
"main": [
[
{
"node": "Prepare Email Summary",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Set Excel File ID",
"type": "main",
"index": 0
}
]
]
},
"Enrich Event Data": {
"main": [
[
{
"node": "Google Calendar - Create Event",
"type": "main",
"index": 0
}
]
]
},
"Merge AI Insights": {
"main": [
[
{
"node": "Enrich Event Data",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI - Analyze Event Context",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Set Excel File ID": {
"main": [
[
{
"node": "Google Drive - Download Excel",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI - Generate Smart Summary",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Filter Valid Events": {
"main": [
[
{
"node": "Google Calendar - Create Event",
"type": "main",
"index": 0
},
{
"node": "AI - Analyze Event Context",
"type": "main",
"index": 0
},
{
"node": "Merge AI Insights",
"type": "main",
"index": 1
}
]
]
},
"Prepare Email Summary": {
"main": [
[
{
"node": "Send Email Summary",
"type": "main",
"index": 0
}
]
]
},
"Update Calendar Event": {
"main": [
[
{
"node": "Prepare AI Summary Data",
"type": "main",
"index": 0
}
]
]
},
"Prepare AI Summary Data": {
"main": [
[
{
"node": "AI - Generate Smart Summary",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI - Analyze Event Context",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"AI - Analyze Event Context": {
"main": [
[
{
"node": "Merge AI Insights",
"type": "main",
"index": 0
}
]
]
},
"AI - Generate Smart Summary": {
"main": [
[
{
"node": "Format AI Email",
"type": "main",
"index": 0
}
]
]
},
"Google Drive - Download Excel": {
"main": [
[
{
"node": "Read Excel File",
"type": "main",
"index": 0
}
]
]
},
"Google Calendar - Create Event": {
"main": [
[
{
"node": "Aggregate Events",
"type": "main",
"index": 0
},
{
"node": "Update Calendar Event",
"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.
openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automatically imports Excel schedules from Google Drive, validates data with AI, syncs to Google Calendar, and emails smart summaries. Ideal for educators, managers, and administrators handling recurring academic or project schedules.
Source: https://n8n.io/workflows/10376/ — 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.
Imagine walking into every discovery call fully prepared with company background, recent news, and perfectly tailored questions, without spending a single minute prepping.
This n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform
This workflow is designed for: Content creators and marketers E-commerce and product-based businesses Agencies producing social media visuals and videos Automation builders looking for AI-powered crea
Generate product images with NanoBanana Pro to Veo videos and Blotato - vide 2 ok. Uses httpRequest, editImage, googleDrive, googleSheets. Scheduled trigger; 76 nodes.
My workflow 14. Uses rssFeedRead, chainLlm, lmChatOpenAi, openWeatherMap. Scheduled trigger; 40 nodes.