Stop Copying Meeting Details from Email to Calendar — Automate It with n8n and GPT-4o-mini
You receive a Calendly confirmation. Or a Zoom invite. Or an email that says "let's meet Tuesday at 3pm."
Every time, you open your calendar, create an event, copy the link, paste the details. Then you spend 5 minutes skimming the email thread trying to remember what the meeting is actually about before it starts.
This workflow eliminates both steps: it reads your Gmail every 15 minutes, detects meeting-related emails, creates the calendar event automatically, and sends you an AI-generated prep brief to Slack before you even open your inbox.
What It Detects
The workflow uses GPT-4o-mini to classify incoming emails. It catches:
- Zoom / Google Meet / Teams confirmations — the standard automated confirmations from each platform
- Calendly booking confirmations — "Your meeting with X has been confirmed"
- Informal meeting requests — "Let's catch up Wednesday at 2pm" in a regular email
- Flight and hotel reservations — date + time + location = calendar event
- Restaurant reservations — same pattern
- Calendar invitations forwarded via email
It ignores newsletters, marketing emails, no-reply senders, and promotional content. You configure the filter list once in the CONFIG node.
The Output
For each detected meeting, the workflow:
- Creates a Google Calendar event with title, date, time, duration, location, and video link pre-filled
- Generates a meeting brief via AI — context summary, 3-4 talking points, 2-3 questions to prepare
- Sends the brief to Slack with a direct link to the calendar event
- Logs the entry to Google Sheets — date, email subject, event created, AI brief status
The Slack message looks like this:
📅 Meeting Created: Discovery Call with Acme Corp
📍 Tuesday 29 Jul, 15:00 — 16:00 (Google Meet)
🔗 meet.google.com/abc-defg-hij
📋 Context: Acme Corp is exploring automation solutions for their sales team.
They mentioned a current Zapier setup they want to move off of.
💡 Talking points:
• Their current Zapier spend and what's breaking
• Which workflows they need first
• Their technical setup (CRM, email tool, data sources)
❓ Questions to prepare:
• Who makes the final decision on tools?
• What's the timeline for implementation?
Enter fullscreen mode Exit fullscreen mode
Workflow Architecture
Schedule (every 15 min)
→ Gmail: Read unread emails (last 30 min)
→ Filter: Remove newsletters/no-reply
→ OpenAI: Classify — is this a meeting? (YES/NO + extracted details)
→ IF YES:
→ Google Calendar: Create event
→ OpenAI: Generate prep brief
→ Slack: Send brief + calendar link
→ Gmail: Mark as read + label "calendar-added"
→ Sheets: Log entry
→ IF NO: Skip
Enter fullscreen mode Exit fullscreen mode
The AI Extraction Prompt
This is the most important node — the quality of the calendar event depends on how well you extract from the email:
You are a scheduling assistant. Extract meeting details from this email.
Email subject: {{subject}}
Email body: {{body}}
Sender: {{from}}
Today's date: {{today}}
Return a JSON object with:
{
"is_meeting": true/false,
"title": "Meeting title (descriptive, not the email subject)",
"date": "YYYY-MM-DD",
"time": "HH:MM",
"duration_minutes": 60,
"timezone": "Europe/Madrid",
"video_link": "https://... or null",
"location": "physical address or null",
"attendees": ["email1", "email2"],
"context": "2-3 sentence summary of what this meeting is about",
"confidence": 0.0-1.0
}
If is_meeting is false, return only {"is_meeting": false}.
Only return the JSON object, no other text.
Enter fullscreen mode Exit fullscreen mode
Set a confidence threshold (e.g. 0.7) — below that, skip the event creation and log it for manual review instead.
Gmail Deduplication
The biggest practical problem with email-to-calendar workflows: you don't want the same meeting created twice if you receive multiple confirmation emails (original invite + reminder + updated time).
Two solutions:
Option A — Label-based: After processing an email, add a Gmail label calendar-added. The next run filters out emails with this label.
Option B — Sheets-based: Log the email Message-ID to a Sheets column and check for duplicates before creating the event.
Label-based is simpler and more reliable. Add a Gmail node at the end of the success branch:
Gmail → Modify Message → Add Label: calendar-added
Enter fullscreen mode Exit fullscreen mode
On the read step, filter: is:unread -label:calendar-added newer_than:1h
Handling Timezone Ambiguity
"Meet Tuesday at 3pm" — 3pm where?
The prep brief prompt includes your configured timezone. If the email doesn't specify, the workflow defaults to your timezone. Add a note to the Slack message when timezone was assumed rather than explicit:
const timezoneNote = detectedTimezone
? `🌍 Timezone: ${detectedTimezone}`
: `⚠️ Timezone assumed: ${CONFIG.default_timezone}`;
Enter fullscreen mode Exit fullscreen mode
Cost
At 50 emails/day processed through GPT-4o-mini:
- Classification call: ~200 tokens per email → $0.003/day
- Brief generation (meetings only, ~20% of emails): ~500 tokens → $0.0015/day
- Total: ~$0.0045/day → ~$1.35/month
For a professional who books 5-10 meetings per week, the time saved (5+ minutes per meeting) pays back the cost in the first hour of the first day.
The CONFIG Node
One node controls everything:
const CONFIG = {
gmail_credential: "your-gmail-oauth-credential-id",
calendar_id: "primary", // or specific calendar ID
slack_webhook: "https://hooks.slack.com/services/...",
sheets_id: "your-spreadsheet-id",
openai_credential: "your-openai-credential-id",
// Your profile (personalizes the brief)
your_name: "Igor",
your_role: "Automation consultant",
your_company: "Agora Intelligence",
// Filter: emails from these domains are always skipped
skip_domains: ["mailchimp.com", "klaviyo.com", "newsletter"],
skip_senders: ["noreply", "no-reply", "donotreply"],
// Minimum confidence to create a calendar event (0-1)
confidence_threshold: 0.7,
// Default timezone when not specified in email
default_timezone: "Europe/Madrid"
};
Enter fullscreen mode Exit fullscreen mode
Get the Complete Workflow
The full 18-node workflow — with Gmail deduplication, confidence thresholds, timezone handling, Slack formatting, and Sheets logging — is available at n8nmarkets.com. Search "Email to Calendar AI Meeting Prep".
Includes the workflow JSON, Google Sheets template, and setup guide for Gmail OAuth (the most common friction point).
What meeting-related emails do you receive most often? The workflow handles standard confirmations well, but I'm curious what edge cases people run into — forwarded invites, multi-timezone teams, recurring meetings with agenda updates.
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.