AutomationFlowsEmail & Gmail › Send Daily Interview Schedule to Interviewers via Gmail

Send Daily Interview Schedule to Interviewers via Gmail

Original n8n title: Send Today’s Interview Schedule From Google Calendar to Each Interviewer via Email

Send today’s interview schedule from Google Calendar to each interviewer via email. Uses gmail, googleCalendar. Scheduled trigger; 6 nodes.

Cron / scheduled trigger★★★★☆ complexity6 nodesGmailGoogle Calendar
Email & Gmail Trigger: Cron / scheduled Nodes: 6 Complexity: ★★★★☆ Added:

This workflow follows the Gmail → Google Calendar 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 →

Download .json
{
  "id": "MvSVpfzaFUWELNTR",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Send today\u2019s interview schedule from Google Calendar to each interviewer via email",
  "tags": [],
  "nodes": [
    {
      "id": "1ad3eb39-d1e3-455c-ad06-3264c2b6ec91",
      "name": "About this template",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -180,
        720
      ],
      "parameters": {
        "width": 1220,
        "height": 240,
        "content": "## Description\nThis workflow automatically sends daily interview schedules to each interviewer via email. It is triggered every day at 8:00 AM, fetches all interview events from a specified Google Calendar, and groups them by interviewer email (based on the event organizer or creator). Each interviewer then receives a personalized HTML-formatted email listing their interview schedule for the day, including event titles, start and end times."
      },
      "typeVersion": 1
    },
    {
      "id": "d25ce1fa-0914-4ec4-aca6-10b232a0e753",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -100,
        420
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e16e6483-873a-4184-84dc-67120fbcb4a3",
      "name": "HTML Table",
      "type": "n8n-nodes-base.code",
      "position": [
        520,
        420
      ],
      "parameters": {
        "jsCode": "const events = $input.all().map(e => e.json);\n\n// Group events by organizer or creator email\nconst grouped = {};\n\nfor (const event of events) {\n  const interviewerEmail = event.organizer?.email || event.creator?.email;\n  if (!interviewerEmail) continue;\n\n  if (!grouped[interviewerEmail]) grouped[interviewerEmail] = [];\n\n  const attendees = (event.attendees || []).map(att => {\n    return `${att.email} (${att.responseStatus})`;\n  }).join('<br>');\n\n  grouped[interviewerEmail].push({\n    summary: event.summary || 'No Title',\n    start: event.start?.dateTime || event.start?.date || 'N/A',\n    end: event.end?.dateTime || event.end?.date || 'N/A',\n    description: event.description || 'No description',\n    htmlLink: event.htmlLink || '',\n    meetLink: event.conferenceData?.entryPoints?.[0]?.uri || event.hangoutLink || 'N/A',\n    attendees: attendees || 'No attendees'\n  });\n}\n\nconst output = [];\n\nfor (const [email, interviews] of Object.entries(grouped)) {\n  let html = `<h3>Your Interview Schedule for Today</h3>\n  <table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n    <tr>\n      <th>Title</th>\n      <th>Start</th>\n      <th>End</th>\n      <th>Description</th>\n      <th>Meeting Link</th>\n      <th>Attendees (Status)</th>\n    </tr>`;\n\n  for (const iv of interviews) {\n    html += `<tr>\n      <td>${iv.summary}</td>\n      <td>${new Date(iv.start).toLocaleString('en-IN', { timeZone: 'Asia/Kolkata' })}</td>\n      <td>${new Date(iv.end).toLocaleString('en-IN', { timeZone: 'Asia/Kolkata' })}</td>\n      <td>${iv.description}</td>\n      <td><a href=\"${iv.meetLink}\" target=\"_blank\">Join</a></td>\n      <td>${iv.attendees}</td>\n    </tr>`;\n  }\n\n  html += `</table>`;\n\n  output.push({\n    json: {\n      interviewer_email: email,\n      subject: \"Today's Interview Schedule\",\n      htmlContent: html\n    }\n  });\n}\n\nreturn output;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "33bd4e2d-fa01-42e4-9daa-c545763df3b9",
      "name": "Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        780,
        420
      ],
      "parameters": {
        "sendTo": "={{ $json.interviewer_email }}",
        "message": "={{ $json.htmlContent }}",
        "options": {},
        "subject": "Interview Reminder"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e9103f86-7674-4b4f-856e-babae68f6c0f",
      "name": "Google Calendar(Fetch Interview Events)",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        220,
        420
      ],
      "parameters": {
        "options": {},
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "0b2f912b-19af-4c90-a42b-4f32daf6e73a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -180,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 1220,
        "height": 360,
        "content": "## Send today\u2019s interview schedule from Google Calendar to each interviewer via email"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "61b63191-87b5-4974-99fa-7437035c1dcd",
  "connections": {
    "HTML Table": {
      "main": [
        [
          {
            "node": "Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Google Calendar(Fetch Interview Events)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Calendar(Fetch Interview Events)": {
      "main": [
        [
          {
            "node": "HTML Table",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Send today’s interview schedule from Google Calendar to each interviewer via email. Uses gmail, googleCalendar. Scheduled trigger; 6 nodes.

Source: https://github.com/weblineindia/n8n-Automate-Daily-Interview-Schedule-Delivery-from-Google-Calendar-to-Gmail/blob/main/main.json — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Splitout Googlecalendar. Uses httpRequest, scheduleTrigger, googleCalendar, splitOut. Scheduled trigger; 19 nodes.

HTTP Request, Google Calendar, Clearbit +1
Email & Gmail

It’s very important to come prepared to Sales calls. This often means a lot of manual research about the person you’re calling with. This workflow delivers the latest social media activity (LinkedIn +

HTTP Request, Google Calendar, Clearbit +1
Email & Gmail

Sign up for Decodo — get better pricing here

Google Sheets, @Decodo/N8N Nodes Decodo, Google Calendar +2
Email & Gmail

Code Googlecalendar. Uses stickyNote, scheduleTrigger, httpRequest, gmail. Scheduled trigger; 12 nodes.

HTTP Request, Gmail, Google Calendar
Email & Gmail

It's very important to come prepared to Sales calls. This often means a lot of manual research about the person you're calling with. This workflow delivers the latest news about businesses you are abo

HTTP Request, Gmail, Google Calendar