This workflow corresponds to n8n.io template #6336 — we link there as the canonical source.
This workflow follows the Gmail → Gmail Trigger 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": "6f15bcff-5358-4f9a-914d-dfd1e87c6e6f",
"name": "Find Return-to-Office Date",
"type": "n8n-nodes-base.googleCalendar",
"position": [
860,
0
],
"parameters": {
"limit": 1,
"options": {
"orderBy": "startTime"
},
"timeMax": "={{ $now.plus({ week: 2 }) }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "General Manager"
},
"operation": "getAll"
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "f922f416-5c9e-4053-8612-30d0aa5f92b2",
"name": "Nicely Format Return Date",
"type": "n8n-nodes-base.code",
"position": [
1120,
0
],
"parameters": {
"jsCode": "const dateTime = $input.first().json.start.dateTime;\nconst timeZone = $input.first().json.start.timeZone;\n\nconst date = new Date(dateTime);\n\nconst returnDate = new Intl.DateTimeFormat(undefined, {\n timeZone,\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n}).format(date);\n\nreturn [{ json: { returnDate } }];\n"
},
"typeVersion": 2
},
{
"id": "4585b157-5413-40a6-b661-5836aa1c5717",
"name": "Send Out of Office Message",
"type": "n8n-nodes-base.gmail",
"position": [
1380,
0
],
"parameters": {
"sendTo": "={{ $('Receive an Email in Gmail').item.json.From }}",
"message": "=Hello, \n\nThanks for your message!\n\nI am currently out of the office, and I will be returning on {{ $json.returnDate }}.\n\nBest, \n[User Name]",
"options": {
"appendAttribution": true
},
"subject": "Out of Office / Vacation Responder",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "2a758f6b-981b-42e8-8b6d-65c28d67d3af",
"name": "Receive an Email in Gmail",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
80,
0
],
"parameters": {
"filters": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "8b0b39a3-2109-4d3f-adb9-016b3aac1712",
"name": "Check Calendar for Upcoming Work Events",
"type": "n8n-nodes-base.googleCalendar",
"position": [
360,
0
],
"parameters": {
"limit": 1,
"options": {
"orderBy": "startTime"
},
"timeMax": "={{ $now.plus(1, 'days').format('yyyy-MM-dd') }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "General Manager"
},
"operation": "getAll"
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 1.3,
"alwaysOutputData": true
},
{
"id": "747f8201-60ce-401d-83da-ab2d8867dbca",
"name": "Any Upcoming Events Today?",
"type": "n8n-nodes-base.if",
"position": [
600,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5b1567fc-439c-4924-9290-0bcbb0be9b06",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.summary }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "26b69ab5-7004-4c1c-b6bd-8d332ed26a34",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-600,
-380
],
"parameters": {
"width": 580,
"height": 580,
"content": "## What it Does\nAutomatically checks your Google Calendar to determine if you're officially off work for the rest of today. If so, it auto-sends a personalized out\u2011of\u2011office reply via Gmail, telling senders when you\u2019ll be back, based on your next calendar event within the next 2 weeks.\n\n## Prerequisites\nTo use this template, you'll need:\n- Gmail credentials (for the trigger and reply nodes)\n- Google Calendar credentials (for both calendar checks)\n- A dedicated work calendar selected in the Calendar nodes\n\n\n## Why It's Useful\nIdeal for freelancers, consultants, or remote workers who don\u2019t follow a strict 9\u20135, yet want automated responses aligned with their actual availability, not a static setting. It\u2019s dynamic, real-time, and easy to tweak.\n\n## Classification\nUse Case: Calendar-driven out-of-office automation\n\nRecommended audience: Business professionals, freelancers, remote employees\n\n"
},
"typeVersion": 1
},
{
"id": "74fbf32d-f2a9-4d14-a810-2be2c89160f8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
20,
-380
],
"parameters": {
"width": 760,
"height": 200,
"content": "\n## User Setup Instructions\n- Gmail Trigger: Connect your Gmail account and add any desired filters (labels, senders).\n- Google Calendar Nodes: Connect your calendar account and select your \u201cwork\u201d calendar in both nodes.\n- Function Node: No changes needed unless you prefer a different date format.\n- Gmail Send Node: Edit the message template and toggle attribution as desired."
},
"typeVersion": 1
},
{
"id": "32209323-40fd-47a7-9fb0-2d44b19c87ed",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
20,
-160
],
"parameters": {
"color": 5,
"height": 360,
"content": "## Gmail Trigger\n- Monitors incoming emails every minute\n- Can be filtered (e.g., labels or VIP senders)"
},
"typeVersion": 1
},
{
"id": "4d571591-139a-41cf-96da-9fb92e27e2a1",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
280,
-160
],
"parameters": {
"color": 5,
"width": 500,
"height": 360,
"content": "## Calendar Check #1\n- Inspects if any events remain today"
},
"typeVersion": 1
},
{
"id": "222fbee1-ea2f-4399-a3ab-7146997d8033",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
-160
],
"parameters": {
"color": 5,
"height": 360,
"content": "## Calendar Check #2\n- If no remaining events, scans next 14 days for the next event"
},
"typeVersion": 1
},
{
"id": "aae2c7e1-cc62-45cd-9fcc-46b03b6bdd7f",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1060,
-160
],
"parameters": {
"color": 5,
"height": 360,
"content": "## Function Node\n- Formats the return date as Weekday, Month D, YYYY (e.g., \u201cThursday, July 24, 2025\u201d)"
},
"typeVersion": 1
},
{
"id": "62c57e58-5f16-48e7-a532-d8b387a8f045",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1320,
-160
],
"parameters": {
"color": 5,
"height": 360,
"content": "## Gmail Send\n- Sends a customized out\u2011of\u2011office email, using the formatted date\n- Optionally includes n8n attribution (editable)"
},
"typeVersion": 1
},
{
"id": "90c00754-61da-4326-90a0-ca90e6f6c483",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
220
],
"parameters": {
"width": 760,
"content": "\n## Customization Options\n- Edit the final email content and tone in the Send node\n- Adjust calendar lookahead in Calendar Check #2 (default is 14 days)\n- Add Gmail filters to restrict auto-replies (e.g. only specific senders or labels)"
},
"typeVersion": 1
}
],
"connections": {
"Nicely Format Return Date": {
"main": [
[
{
"node": "Send Out of Office Message",
"type": "main",
"index": 0
}
]
]
},
"Receive an Email in Gmail": {
"main": [
[
{
"node": "Check Calendar for Upcoming Work Events",
"type": "main",
"index": 0
}
]
]
},
"Any Upcoming Events Today?": {
"main": [
[],
[
{
"node": "Find Return-to-Office Date",
"type": "main",
"index": 0
}
]
]
},
"Find Return-to-Office Date": {
"main": [
[
{
"node": "Nicely Format Return Date",
"type": "main",
"index": 0
}
]
]
},
"Check Calendar for Upcoming Work Events": {
"main": [
[
{
"node": "Any Upcoming Events Today?",
"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.
gmailOAuth2googleCalendarOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automatically checks your Google Calendar to determine if you're officially off work for the rest of today. If so, it auto-sends a personalized out‑of‑office reply via Gmail, telling senders when you’ll be back—based on your next calendar entry within the next 2 weeks.
Source: https://n8n.io/workflows/6336/ — 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.
2025-12-03 fix JS code in node
Stop losing valuable leads to missed meetings with this No-Show Follow-Up & Rescheduling automation! Whenever a lead is marked as a “no-show” in your CRM or calendar, this workflow automatically sends
The goal is to reduce inbox noise and automatically organize repetitive types of emails so that imprtant messages remain visible while unsolicited or promotional emails are handled automatically. When
This template is built to be customized for your specific needs. This template has the core logic and n8n node specific references sorted to work with dynamic file names throughout the workflow. Store
This is an elite enterprise-grade solution for Talent Acquisition and HR Ops teams. It automates the high-volume task of resume screening by transforming unstructured PDF applications into structured