This workflow corresponds to n8n.io template #6226 — we link there as the canonical source.
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": "L4F6EnHYmVEq7SSW",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Prepare for meetings Outlook -> Teams",
"tags": [],
"nodes": [
{
"id": "1a3eb8b0-1507-4c7f-9644-8779ab20a157",
"name": "Get Calendar Events",
"type": "n8n-nodes-base.microsoftOutlook",
"position": [
820,
660
],
"parameters": {
"filters": {
"custom": "={{ $json.filter }}"
},
"resource": "event"
},
"credentials": {
"microsoftOutlookOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "9afa8efa-2154-4584-8476-52039358e03f",
"name": "Create filter for \"TODAY\" value",
"type": "n8n-nodes-base.code",
"position": [
640,
660
],
"parameters": {
"jsCode": "const now = new Date();\n\n// Get start of today (UTC)\nconst start = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));\nconst end = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 1));\n\nconst startISO = start.toISOString(); // e.g. 2025-05-27T00:00:00.000Z\nconst endISO = end.toISOString();\n\nconst filter = `start/dateTime ge '${startISO}' and start/dateTime lt '${endISO}'`;\n\nreturn [{\n json: {\n filter,\n startISO,\n endISO\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "1eb47e59-e8d0-4f26-b647-8351d76d877a",
"name": "Schedule every midnight",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
420,
660
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "17e80693-1187-4ccf-a4d6-1f08416421d4",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
200,
460
],
"parameters": {
"color": 7,
"width": 1380,
"height": 480,
"content": "## Automatically send your daily schedule to Teams\n1) \"Code\" node - setting TODAY value \n2) \"Microsoft Outlook\" node - set Resource as EVENT and operation as GET MANY \n3) \"Code\" node - HTML-formatted message for each item, summarizing the meeting time, subject, and body preview, using default values if fields are missing.\n4) Send the message via \"MS Teams node\" - use technical user & select relevant teams channel or chat \n"
},
"typeVersion": 1
},
{
"id": "76ffe5c8-e99a-46c3-9576-2aaf6687e57e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1660,
420
],
"parameters": {
"width": 600,
"height": 600,
"content": "## Final Output\n### Received in teams chat \n\ud83d\udcc5 Meeting Time: 2025-07-08T13:00:00.0000000\n\ud83d\udcdd Subject: Name of Example Meeting\n\ud83d\udcc4 Summary:\nAgenda:\n\ud83d\udfe2 Quick check-in on project status\n\ud83d\udcca Review of key KPIs from last week\n\ud83d\udee0\ufe0f Discussion on blockers and resource needs\n\ud83d\udcc6 Planning milestones for the upcoming sprint\n\u2753 Q&A + feedback round\n________________________________________________________________________________ Microsoft Teams Need help? [Join the meeting now] Meeting ID: 123 456 789 000 Passcode: aB1c2DE3________________________________ For organizers:\n\n"
},
"typeVersion": 1
},
{
"id": "b2e1ec44-99c1-4476-82a8-53e27e270470",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-600,
80
],
"parameters": {
"width": 700,
"height": 1240,
"content": "## Daily Summary of your Outlook calendar to MS Teams \n**No need to open your calendar \u2013 get a clear daily agenda delivered to your Teams channel. Use this workflow.**\n\n### About Workflow\nThis workflow sends an automatic daily summary of your Outlook calendar events into a Microsoft Teams channel. Perfect for team visibility or personal reminders.\n\n### Use Case \nTeams can stay prepared for morning syncs or personal planning by using the tool as a daily agenda or simple reminder. It provides visibility into shared calendars and helps organize workflows without the need to open a calendar, making it ideal for structured team coordination.\n\n\n### How it works\n- Scheduled trigger will ensure the automatic run \n=> every midnight\n- Code node generates the date value for \"today\"\n=> Calculates UTC start and end of the current day\n=> Builds a Microsoft Graph-compatible filter string\n- Microsoft Outlook node retrieves all calendar events for the day\n=> Resource : Event | Operation : Get Many\n=> Uses {{ $json.filter }} based on the \"today\" date to get only relevant entries\n- Code node transforms each event into a formatted HTML message\n=> Example Output:\n<b> Meeting Time:</b> 2025-07-08T10:00:00Z<br>\n<b> Subject:</b> Weekly Sync<br>\n<b>Summary:</b><br>\n- Send to MS Teams - by native MS Teams node\n=> Chat Message | Create | Selected Channel | HTML content\n=> Uses the htmlMessage field from the previous node as the message body\n\n### How to use\n- Adjust the schedule time to match your working hours or timezone\n- Customize the Teams channel or chat to match your team\u2019s setup\n- Modify the HTML format to include more fields (e.g. location, organizer)\n- Use the workflow for multiple teams\n\n### Requirements \n- MS Outlook\n=> ideally technical user for API calls with specific permissions\n- MS Teams\n=> ideally technical user for API calls with specific permissions\n\n### Need Help? \n- Reach out through n8n community => https://community.n8n.io/u/easy8.ai\n- Contant our team directly => Easy8.ai\n- Visit our youtube channel => https://www.youtube.com/@easy8ai "
},
"typeVersion": 1
},
{
"id": "5026f97a-712b-4c2a-87d4-ed0f84a7074a",
"name": "Create chat message",
"type": "n8n-nodes-base.microsoftTeams",
"position": [
1200,
660
],
"parameters": {
"chatId": {
"__rl": true,
"mode": "list",
"value": "19:user@example.com",
"cachedResultUrl": "https://teams.microsoft.com/l/chat/19%3Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%40unq.gbl.spaces/0?tenantId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"cachedResultName": "FirstName LastName (exampleChat)"
},
"message": "={{ $json.htmlMessage }}",
"options": {},
"resource": "chatMessage"
},
"credentials": {
"microsoftTeamsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "a589e740-17df-4bce-a8d8-79e97e17261d",
"name": "HTML format",
"type": "n8n-nodes-base.code",
"position": [
1000,
660
],
"parameters": {
"jsCode": "return items.map(item => {\n const start = item.json.start?.dateTime || \"N/A\";\n const subject = item.json.subject || \"No subject\";\n const preview = item.json.bodyPreview || \"\";\n\n return {\n json: {\n htmlMessage: `\n <b>\ud83d\udcc5 Meeting Time:</b> ${start}<br>\n <b>\ud83d\udcdd Subject:</b> ${subject}<br>\n <b>\ud83d\udcc4 Summary:</b><br>\n ${preview}\n `\n }\n };\n});\n"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "c7fb9c1c-c830-4bb1-ac44-520b35accf0d",
"connections": {
"HTML format": {
"main": [
[
{
"node": "Create chat message",
"type": "main",
"index": 0
}
]
]
},
"Microsoft Outlook": {
"main": [
[
{
"node": "HTML format",
"type": "main",
"index": 0
}
]
]
},
"Schedule every midnight": {
"main": [
[
{
"node": "Create filter for \"TODAY\" value",
"type": "main",
"index": 0
}
]
]
},
"Create filter for \"TODAY\" value": {
"main": [
[
{
"node": "Microsoft Outlook",
"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.
microsoftOutlookOAuth2ApimicrosoftTeamsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This automation is ideal for team leads, project managers, and remote workers who need to keep stakeholders informed of scheduled events without manual effort. It saves time, ensures consistent communication, and reduces the chance of missing important meetings.
Source: https://n8n.io/workflows/6226/ — 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 workflow automates the backup of your self-hosted n8n instance by exporting all workflows and saving them as individual files to a designated OneDrive folder. Each file is timestamped for easy ve
Synchronize OKRs (Objectives and Key Results) between Monday.com and Jira to automatically calculate progress variance, update dashboards, and share variance reports via Slack and Outlook. This workfl
Generate Weekly n8n Execution Report and Email Summary Automatically runs every 7 days to pull all n8n workflow executions from the past week Merges execution data with workflow information to provide
This workflow automatically connects to the Square API and generates a monthly sales summary report for all your Square locations. The report matches the figures displayed in Square Dashboard > Rep
This workflow automatically connects to the Square API and generates a weekly sales summary report for all your Square locations. The report matches the figures displayed in Square Dashboard > Repo