FlowKit

Automating meeting scheduling by email with an n8n AI agent

Published 22 July 2026 · 4 min read

A meeting request by email almost always follows the same script: "would Tuesday or Thursday work for you?", a reply two days later, a counter-proposal, another round-trip, and sometimes a missed message that kills the meeting altogether. A study by Mark, Gudith, and Klocke (The Cost of Interrupted Work: More Speed and Stress, CHI 2008 — see on Google Scholar) measured that each interruption of this kind — checking a calendar, replying, resuming the original task — costs an average of 23 minutes of focus before a full return to the initial activity. Over a week of scheduling requests, the toll in fragmented attention is real. This guide shows how to connect an n8n AI agent to your inbox and your Google Calendar to remove that back-and-forth, from the first email to the confirmation.

The principle: an AI Agent with two tools

The architecture comes down to a trigger and an AI Agent node equipped with two tools (the ai_tool connection, covered in our guide on custom tools for an n8n AI Agent):

  1. IMAP or Gmail Trigger: detects a new email containing a meeting request (filtered by keywords or by a first-pass AI classification, as in our guide on sorting emails with AI).
  2. Google Calendar Tool (read): queries free slots over a given period (freebusy or event retrieval) to know real availability.
  3. Google Calendar Tool (write): creates the event once a slot has been accepted by the contact, with an automatic email invite.

The agent's system prompt frames the expected behavior: default meeting duration (30 or 45 minutes), acceptable time window (say, 9am-6pm on weekdays), time zone, and the tone of the replies to draft. The agent reads the incoming email, calls the read tool to identify two or three slots that fit the request, then drafts a reply proposing those slots — never booking directly on the first exchange.

Example system prompt

You are the scheduling assistant for {{company_name}}. When an email asks
for a meeting, check the calendar via the "check_availability" tool over
the next 10 business days, propose 2 to 3 slots of 30 minutes between
9am and 6pm (Europe/Paris timezone), and draft a short, professional
email reply. Only use the "create_event" tool once the contact's reply
explicitly confirms one of the proposed slots.

This distinction between "proposing" and "confirming" is what prevents phantom bookings: the agent only creates the calendar event on the second exchange, once the contact has picked a slot.

Handling the email thread

A scheduling exchange typically spans two or three emails. Without memory, the agent would treat each message as a brand-new request and lose the context of the slots already proposed. The fix is the same as for a regular chatbot: attach a conversation memory keyed on the thread identifier (threadId on Gmail, or the normalized email subject on generic IMAP). Every new message in the same thread re-injects the history of slots already offered, letting the agent understand a reply as short as "Thursday 2pm works" without it having to restate the context.

Avoiding double bookings

The main point of fragility in this kind of workflow isn't the AI — it's concurrency: if two meeting requests arrive nearly at the same time, two executions of the workflow can read the same open slot before either one books it, a classic race condition. Two concrete safeguards:

  • Cap the workflow's concurrency at 1 in n8n's settings, so executions for this specific workflow queue up rather than run in parallel.
  • Re-check availability right before writing, in the same tool call that creates the event, rather than trusting a read result obtained several minutes earlier.

A properly configured Error Workflow catches creation failures (a slot that became unavailable, an expired OAuth2 authentication error) and notifies you instead of leaving a meeting silently unconfirmed. If request volume is high, also keep an eye on Google Calendar API quotas: they're generous for everyday use, but a poorly controlled spike of retries can hit them.

Adding human validation for first contacts

Fully automating confirmation works well for recurring meetings with known contacts (client follow-ups, team check-ins). For a first contact or a high-stakes sales meeting, inserting an approval step before sending the final confirmation is still safer: a Wait node with a Slack message, as detailed in our guide on human approval in n8n, lets a sales rep validate or re-propose a slot before the agent closes out the exchange.

Why this use case pays off fast as a first AI project

Scheduling by email is an ideal candidate for a first AI automation project: the trigger (email) and the sorting infrastructure are already covered by the Inbox AI Pack (€79), which provides the classification and prioritization foundation to graft a scheduling agent onto. A study by Rogelberg, Scott, and Kello (The Science and Fiction of Meetings, MIT Sloan Management Review, 2007 — see on Google Scholar) points out that scheduling logistics (finding a slot, following up, confirming) consume a meaningful share of the time professionals perceive as unproductive around meetings — well before the meeting even happens. Automating that one step alone frees up time without touching the substance of the conversation.

Going further

An AI agent connected to an email trigger and two Google Calendar tools is enough to remove most of the scheduling back-and-forth, provided you clearly separate proposing slots from confirming them, and treat booking concurrency as a real technical risk rather than a footnote. This building block combines naturally with the other inbox automations in the Inbox AI Pack, and with the Complete FlowKit Bundle (€269) if you also want to cover the RAG knowledge base and the audit trail alongside your email management.

FAQ

Frequently asked questions

Can the agent handle multiple calendars (several sales reps, several meeting rooms)?

Yes: the Google Calendar Tool accepts a dynamic calendarId. Upstream, a Switch node or a simple lookup in a table (calendar per rep, per department) routes each request to the right agenda before the tool call. For a shared meeting room, just add a second Google Calendar Tool that checks its availability alongside the person's.

What happens if two emails arrive at the same time for the same slot?

That is the real risk with this kind of workflow: a race condition where two parallel executions read the same open slot before either one books it. The reliable fix is to force sequential execution of bookings (set the workflow's concurrency setting to 1, or use a lock via a Data Table) rather than rely on the speed of the Google Calendar API.

Can the AI confirm a meeting without human validation?

Technically yes, but it isn't recommended for first meetings with new contacts: a Wait node with Slack approval, as described in our guide on human approval, adds a safeguard before the final confirmation is sent. For recurring meetings with known contacts, full automation becomes reasonable once the workflow has proven itself.

Do you need a paid Google Workspace subscription to use the Google Calendar node in n8n?

No, a free personal Gmail account is enough: n8n's Google Calendar node authenticates via OAuth2 on any Google account with a calendar, with no distinction between a free account and a paid Workspace one.

Bundle FlowKit Complet

€269