Gmail + Google Calendar: meetings booked from emails
Your inbox is doing too much. One minute it’s a real lead asking to meet, the next it’s a calendar “Accepted” notification, and somehow both end up stealing your attention.
Freelancers feel it when proposals turn into endless scheduling threads. Sales reps feel it when a hot lead cools off overnight. And small teams handling support plus growth get hit from both sides. This Gmail Calendar automation turns “email ping-pong” into booked meetings and clean, consistent replies.
Below is the workflow, what it automates, and what you get back (time, speed, and fewer missed opportunities).
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Gmail + Google Calendar: meetings booked from emails
flowchart LR
subgraph sg0["Gmail Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Function Node: Parse Email C.."]
n1@{ icon: "mdi:robot", form: "rounded", label: "Message a model", pos: "b", h: 48 }
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail Trigger", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge"]
n5@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge (Allowed)"]
n7@{ icon: "mdi:location-exit", form: "rounded", label: "Create an event", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Personalize AI Reply"]
n9@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n10@{ icon: "mdi:message-outline", form: "rounded", label: "Send AI Reminder Email", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "AI Reminder Generator", pos: "b", h: 48 }
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Personalize Greeting"]
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send a text message (New Mee.."]
n14@{ icon: "mdi:message-outline", form: "rounded", label: "Send AI Reply (schedule_meet..", pos: "b", h: 48 }
n15@{ icon: "mdi:message-outline", form: "rounded", label: "Send AI Reply (auto_reply)", pos: "b", h: 48 }
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Personalize Auto Reply"]
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send a text message (meet ac.."]
n17 --> n18
n17 --> n1
n9 --> n11
n4 --> n3
n3 --> n7
n3 --> n16
n3 --> n9
n2 --> n0
n2 --> n5
n7 --> n8
n7 --> n13
n6 --> n17
n1 --> n4
n5 --> n6
n8 --> n14
n12 --> n10
n11 --> n12
n16 --> n15
n0 --> n4
n0 --> n6
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2 trigger
class n1,n11 ai
class n3,n17 decision
class n5 database
class n0,n8,n12,n16 code
classDef customIcon fill:none,stroke:none
class n0,n4,n6,n8,n12,n13,n16,n18 customIcon
The Problem: Email Threads That Should’ve Been a Calendar Invite
Booking meetings from email sounds simple until you’re the one doing it all day. You read the message, decide if it’s real, check the sender, scan your calendar, propose times, wait, follow up, then repeat because the other person replies with “Sorry, can we do Thursday instead?” Meanwhile, automated notifications (“Accepted”, “Declined”) clog the same inbox and can even trigger accidental reply loops if you’re using rules. It’s not the big tasks that burn you out. It’s the constant context switching, and the fact that you can’t scale “being responsive” forever.
It adds up fast. Here’s where it usually breaks down.
- You waste about 10 minutes per serious inquiry just confirming intent and proposing times.
- Leads go cold because you don’t reply quickly when you’re in meetings or deep work.
- Automated calendar replies clutter the queue, and your system can end up reacting to its own messages.
- Follow-ups are inconsistent, so “maybe later” turns into “never happened.”
The Solution: An AI Inbox Assistant That Books Meetings
This workflow watches your Gmail inbox and behaves like a calm, disciplined assistant. First, it checks who the sender is by looking them up in a Google Sheets “Whitelist,” so you only automate replies for people you’ve approved. Then it filters out noisy calendar notifications to avoid weird loops and false triggers. After that, OpenAI reads the email body and classifies the intent (for example, “wants to book a meeting,” “not interested,” or “unclear”). Finally, the workflow takes the appropriate action: it can create a Google Calendar event, send a confirmation email, and notify you in Telegram; or it can send a polite decline reply; or it can wait and send a gentle follow-up when the email needs review.
The workflow starts when a new email hits Gmail. AI figures out what the sender is trying to do, then routes the message down one of three paths. If it’s meeting-worthy, Google Calendar gets updated and the sender gets a clean confirmation message, with optional Telegram alerts for you.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get 5 legitimate inbound emails a day that need a response. Manually, you might spend about 10 minutes per email reading, deciding, and replying, plus another 10 minutes for the ones that turn into scheduling threads. That’s roughly 1–2 hours daily, and it’s scattered across your whole day. With this workflow, you do almost nothing beyond maintaining the whitelist: the email triggers instantly, AI routes it, and meeting requests can create a calendar event plus a confirmation reply automatically. Most days, that’s about an hour back, without “forgetting to follow up” hanging over you.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail to monitor incoming emails and send replies
- Google Calendar for creating meeting events automatically
- Google Sheets to store your approved sender whitelist
- OpenAI API Key (get it from your OpenAI API dashboard)
- Telegram (optional) for instant meeting notifications
Skill level: Intermediate. You’ll connect OAuth credentials, pick the right Google Sheet, and adjust a couple of message templates.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
New email arrives in Gmail. The workflow triggers on incoming messages and immediately extracts the useful details (sender, subject, body) so later steps don’t have to “re-read” the inbox.
Sender filtering and loop prevention. It checks a Google Sheets whitelist to confirm the sender is someone you want to automate for. It also validates calendar-related notices (like accepted/declined messages) so you don’t end up responding to automated updates.
AI intent classification. OpenAI reviews the email content and decides what the person is trying to accomplish. The workflow merges that intent with the email data, then routes the message to the right path using a simple decision switch.
Meeting booking, polite decline, or follow-up. If it’s a meeting request, Google Calendar creates the event, Gmail sends a confirmation, and Telegram can ping you. If the sender declines or isn’t interested, it sends a short “thank you” reply. If it’s unclear, the workflow waits (you set the delay) and sends a gentle follow-up to get a clearer response.
You can easily modify the whitelist rules to include domains or lead sources based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Gmail Trigger
Set up the workflow to watch your inbox and start the automation when a new email arrives.
- Add and open Inbox Watch Trigger.
- Confirm the polling schedule is set to check every minute in pollTimes.
- Credential Required: Connect your gmailOAuth2 credentials.
- Note that Inbox Watch Trigger outputs to both Extract Email Details and Retrieve Allowed List in parallel.
Step 2: Connect Google Sheets
Configure the allowlist lookup that is used for validating emails and calendar responses.
- Open Retrieve Allowed List and select your spreadsheet in documentId.
- Choose the correct tab in sheetName.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- In Combine Allowed Match, keep mode set to
combineand confirm the merge fields are=emailand=from_email. - Ensure Combine Allowed Match connects to Validate Calendar Notice as shown in the flow.
Step 3: Set Up AI Processing
Use AI to classify intent and draft a follow-up when needed.
- Open Extract Email Details and review the code that builds
lead_name,from_email,subject, andlast_message. - Configure AI Intent Classifier to use model
gpt-4.1-miniand keep jsonOutput enabled. - Credential Required: Connect your openAiApi credentials in AI Intent Classifier (this node has no credentials configured).
- In Unify AI With Lead, keep mode set to
combineand combineBy set tocombineByPosition. - Open Route By Intent and confirm the rules match
schedule_meeting,auto_reply, andneeds_reviewusing={{$json["message"]["content"]["action"]}}. - Set up the follow-up branch by confirming Pause Before Followup has amount set to
3and unit set tominutes. - In Generate Followup Draft, keep jsonOutput enabled and model
gpt-4.1-mini. - Credential Required: Connect your openAiApi credentials in Generate Followup Draft.
- Verify Generate Followup Draft flows to Build Followup Message, then to Send Followup Email.
Step 4: Configure Output and Notifications
Set up calendar creation, email replies, and Telegram alerts for accepted meetings.
- In Schedule Calendar Event, set end to
={{ $now.plus(2, 'hour') }}and select your calendar in calendar. - Confirm summary is
={{ $json.subject }} Lead : {{ $json.lead_name }}and attendees includes={{ $json.from_email }}. - Credential Required: Connect your Google Calendar credentials in Schedule Calendar Event (this node has no credentials configured).
- Schedule Calendar Event outputs to both Craft Meeting Reply and Telegram Meeting Alert in parallel.
- In Craft Meeting Reply, review the HTML template and ensure
finalMessageis created for Send Meeting Email. - Open Send Meeting Email and confirm sendTo is
={{ $('Route By Intent').item.json.from_email }}and subject is={{ $('Route By Intent').item.json.subject }}. - Credential Required: Connect your gmailOAuth2 credentials in Send Meeting Email (this node has no credentials configured).
- Open Telegram Meeting Alert and confirm the text uses lead and event details including
{{ $json.summary || 'No subject' }}. - Credential Required: Connect your telegramApi credentials in Telegram Meeting Alert (this node has no credentials configured).
- For declines, review Compose Decline Reply then confirm Send Decline Email uses sendTo
={{ $json.from_email }}and subject=Re: {{ $json.subject }}. - Credential Required: Connect your gmailOAuth2 credentials in Send Decline Email.
- For follow-ups, ensure Send Followup Email uses sendTo
={{ $('Route By Intent').item.json.from_email }}and message={{ $json.finalMessage }}. - Credential Required: Connect your gmailOAuth2 credentials in Send Followup Email.
- Configure calendar response notifications: Validate Calendar Notice should pass accepted/declined/tentative subjects to Telegram Accepted Alert and otherwise to AI Intent Classifier.
- Credential Required: Connect your telegramApi credentials in Telegram Accepted Alert.
⚠️ Common Pitfall: If AI Intent Classifier or Schedule Calendar Event run without credentials, the workflow will fail silently at those nodes.
Step 5: Test and Activate Your Workflow
Run a complete test to validate routing, AI responses, and outbound actions before enabling the workflow.
- Click Execute Workflow and send a test email to the inbox monitored by Inbox Watch Trigger.
- Verify that Extract Email Details outputs
lead_name,from_email, andlast_message. - Confirm AI Intent Classifier returns a JSON object with
actionand that Route By Intent routes correctly. - Check that the expected branch runs: meeting flow (calendar + email + Telegram), decline reply, or follow-up after Pause Before Followup.
- When the results are correct, toggle the workflow to Active for production use.
Common Gotchas
- Google (Gmail/Sheets/Calendar) credentials can expire or need specific permissions. If things break, check n8n’s Credentials panel and Google OAuth consent access first.
- If you’re using Wait nodes or external processing, timing varies. Bump up the wait duration if downstream nodes fail because a reply thread hasn’t arrived yet.
- Default prompts in OpenAI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30–60 minutes once your Google and OpenAI accounts are ready.
No. You will mostly connect accounts and edit a few message templates.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage (often a few dollars a month at modest volume).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s one of the best tweaks you can make. Most people extend the Google Sheets whitelist to include a company domain column, then adjust the matching logic in the merge/IF steps that compare the sender to the allowed list. You can also refine the “AI Intent Classifier” prompt so it only books meetings when the email clearly asks for a call (and otherwise routes to Needs Review). Common customizations include different reply tone per brand, longer wait times before follow-up, and turning Telegram alerts on only for meeting requests.
Usually it’s expired or revoked Google OAuth access in n8n. Reconnect your Gmail credential, then confirm the workflow has permission to read mail and send emails. Also check that you’re not hitting Gmail sending limits if you’re testing with a lot of messages in a short time.
On a typical n8n Cloud plan, it can handle hundreds to thousands of email-triggered runs per month, depending on your plan limits.
Often, yes, because this kind of flow needs branching, filtering, and “wait then follow up” logic that gets awkward (and expensive) in simpler tools. n8n also gives you more control over Gmail edge cases, like ignoring automated calendar notices to prevent loops. The AI piece is easier to shape too, since you can adjust prompts and keep memory/state when needed. That said, if you only want “new email → create event” with no intent detection, Zapier or Make can be quicker. If you’re torn, Talk to an automation expert and get a clean recommendation.
Once this is running, your inbox stops being a to-do list. Meetings get booked, declines get handled politely, and you only step in when something truly needs your judgment.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.