🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Gmail + Google Calendar, follow-ups you approve

Lisa Granqvist Partner Workflow Automation Expert

Post-meeting follow-up is where good leads quietly die. Not because you don’t care, but because the next step lives in three places at once: your calendar, your inbox, and your brain.

Sales reps feel it first. Then founders juggling a dozen conversations, and client-facing account managers who can’t afford awkward silence. This follow-up automation flags the meetings that need a nudge and drafts a sensible next step, without sending or booking anything until you say yes.

You’ll set up an n8n workflow that checks past meetings, verifies whether a follow-up happened, proposes open time slots, and only books a next call after an email approval reply.

How This Automation Works

Here’s the complete workflow you’ll be setting up:

n8n Workflow Template: Gmail + Google Calendar, follow-ups you approve

Why This Matters: Follow-ups slip through the cracks

A meeting ends, you tell yourself “I’ll follow up tomorrow,” and then tomorrow gets eaten by more meetings. When you finally remember, you’re hunting for context: what you promised, what they asked, whether they already replied, and which time windows you can offer without creating a scheduling mess. It’s not just time. It’s mental load. And frankly, it’s easy to avoid because writing a good follow-up takes focus you rarely have between calls.

The friction compounds. Here’s where it tends to break down in real teams.

  • You end up manually scanning your calendar for “people I should message,” which is unreliable when your week is packed.
  • Email threads get messy, so you miss that “no reply yet” moment until it’s been a week.
  • Even when you do follow up, proposing times turns into a slow back-and-forth that drags on for days.
  • Automating the whole thing without approval feels risky, because one wrong send can damage the relationship.

What You’ll Build: AI-assisted follow-ups with human approval

This workflow runs on a schedule and looks back a few days in your Google Calendar for sales meetings that already happened. For each event, it searches Gmail to see if there has been any follow-up email traffic since that meeting. If it finds nothing, it treats that as a likely “needs follow-up” situation. Then an AI Agent checks your calendar for realistic open slots and prepares a short suggestion: a follow-up message plus a few time options. Finally, it emails you in “send-and-approval” mode, so you can reply in normal language to accept a slot, propose a new one, or decline. Only if you accept does the workflow book the next meeting in Google Calendar.

The workflow starts with your calendar and ends with a booked next step (or no action at all). Gmail provides the real-world signal of “did anyone actually follow up,” and OpenAI helps turn availability into a message you’d actually send.

What You’re Building

Expected Results

Say you run 10 sales calls a week. A quick “did I follow up?” check is maybe 5 minutes per meeting (calendar scan, open the thread, search for recent replies), so you lose about 50 minutes before you even write anything. Add another 10 minutes to propose times and you’re around 2 hours weekly. With this workflow, the check is automatic and the first draft lands in your inbox; you spend a couple minutes approving or adjusting, then the calendar booking happens on its own.

Before You Start

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Calendar for meeting history and booking.
  • Gmail to check follow-ups and send approvals.
  • OpenAI API key (get it from your OpenAI dashboard)

Skill level: Intermediate. You’ll connect Google OAuth, paste an API key, and test with real calendar events.

Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).

Step by Step

A scheduled check runs automatically. n8n starts on a timer (you choose the cadence) and pulls meetings from Google Calendar that happened a few days ago, which keeps the follow-up timing natural.

The workflow filters to the meetings that truly need attention. It deduplicates events it has already seen, then loops through each one. Gmail search looks for any sent or received follow-up since the meeting; if there’s recent activity, the workflow moves on.

AI proposes a next step based on availability. For the “no follow-up found” cases, an AI Agent checks open slots in your calendar (via Google Calendar tools) and prepares a short, structured suggestion you can actually use.

You approve (or decline) in email. Gmail sends you a draft in approval mode. Reply “Book Tuesday 2pm,” suggest a different time, or decline, and a second AI Agent interprets your response and books the meeting only when it’s accepted.

You can easily modify the lookback window (for example, “meetings from 3 days ago”) to match your sales cycle. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Scheduled Trigger

Set up the workflow to run every day at a defined hour and kick off the calendar scan.

  1. Add the Scheduled Automation Start node as your trigger.
  2. Set the schedule rule to run daily by configuring rule → interval → triggerAtHour to 6.
  3. Connect Scheduled Automation Start to Retrieve Past Meetings.

Step 2: Connect Google Calendar and Fetch Past Meetings

Pull recent calendar events to identify meetings that may need a follow-up.

  1. Open Retrieve Past Meetings and set Operation to getAll.
  2. Set Calendar to your calendar ID: [YOUR_ID].
  3. Set timeMin to {{ $now.minus({ day: 4 }) }} and timeMax to {{ $now.minus({ day: 2 }) }}.
  4. Credential Required: Connect your googleCalendarOAuth2Api credentials.
  5. Connect Retrieve Past Meetings to Deduplicate Seen Events.

If you want a wider window for past meetings, adjust timeMin and timeMax consistently to avoid missing or reprocessing events.

Step 3: Deduplicate and Prepare Events for Follow-Up Detection

Remove events already processed and prepare each meeting for email history checks.

  1. In Deduplicate Seen Events, set Operation to removeItemsSeenInPreviousExecutions.
  2. Set dedupeValue to {{ $json.id }} so each event is uniquely tracked.
  3. Connect Deduplicate Seen Events to Iterate Event Records.
  4. From Iterate Event Records, note that outputs run to both Filter Follow-Up Needed and Fetch Recent Emails in parallel.

⚠️ Common Pitfall: If dedupeValue is changed to a non-unique field, previously processed meetings may re-trigger.

Step 4: Detect Missing Follow-Ups via Gmail

Check the email thread history to determine if a follow-up email is missing.

  1. In Fetch Recent Emails, set Resource to thread and Limit to 1.
  2. Set filters → q to =(from:{{ $json.attendees.find(attendee => !attendee.self)?.email }} OR to:{{ $json.attendees.find(attendee => !attendee.self)?.email }}).
  3. Set filters → receivedAfter to {{ $json.end.dateTime }}.
  4. Credential Required: Connect your gmailOAuth2 credentials.
  5. In Set Follow-Up Flag, set mode to raw and jsonOutput to {{ { ...$('Iterate Event Records').first().json, followUp: $json.isEmpty() } }}.
  6. Ensure includeOtherFields is set to true.
  7. Connect Fetch Recent Emails to Set Follow-Up Flag, then connect Set Follow-Up Flag back to Iterate Event Records.

Step 5: Configure the AI Availability Planning Chain

Use AI to propose future meeting slots based on the previous meeting details.

  1. In Filter Follow-Up Needed, define your conditions for when followUp should proceed (left and right values are currently empty).
  2. Connect Filter Follow-Up Needed to Availability Planning Agent.
  3. In Availability Planning Agent, set text to ### Details of the previous call as following title: {{ $json.summary }} date: {{ $json.start.dateTime }} {{ $json.start.timeZone }} duration: {{ DateTime.fromISO($json.end.dateTime).diffTo(DateTime.fromISO($json.start.dateTime), 'minutes') }} minutes.
  4. Ensure Availability Planning Agent uses Primary Chat Model as its language model and Structured Output Parser as its output parser.
  5. Credential Required: Connect your openAiApi credentials in Primary Chat Model.
  6. Attach Calendar Availability Tool as a tool to Availability Planning Agent with timeMin set to {{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start_Time', ``, 'string') }} and timeMax set to {{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End_Time', ``, 'string') }}.
  7. Credential Required: Connect your googleCalendarOAuth2Api credentials in Calendar Availability Tool.
  8. In Structured Output Parser, keep inputSchema as the provided JSON schema for slots.

AI tools like Calendar Availability Tool and Structured Output Parser inherit credentials and configuration from the parent agent; configure credentials on Primary Chat Model and tool nodes, not on the parser itself.

Step 6: Compose and Send the Approval Email

Build a follow-up email with proposed slots and ask for confirmation before booking.

  1. Connect Availability Planning Agent to Compose Reminder Message.
  2. In Compose Reminder Message, set the message assignment to the multi-line template with slots formatting (keep the expression as defined).
  3. Connect Compose Reminder Message to Request User Approval.
  4. In Request User Approval, set sendTo to [YOUR_EMAIL].
  5. Set subject to Book a follow-up meeting with {{ $('Filter Follow-Up Needed').item.json.attendees.find(x => !x.self).email }}? and message to {{ $json.message }}.
  6. Set operation to sendAndWait and responseType to freeText.
  7. Credential Required: Connect your gmailOAuth2 credentials.

Step 7: Book the Meeting with AI Decisioning

Interpret the approval response and book the meeting automatically if confirmed.

  1. Connect Request User Approval to Booking Decision Agent.
  2. In Booking Decision Agent, set text to {{ $json.data.text }}.
  3. Ensure Booking Decision Agent uses Secondary Chat Model as its language model.
  4. Credential Required: Connect your openAiApi credentials in Secondary Chat Model.
  5. Attach Calendar Booking Tool as a tool to Booking Decision Agent with start set to {{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start', ``, 'string') }} and end set to {{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End', ``, 'string') }}.
  6. Set Calendar Booking Tool calendar to [YOUR_ID] and keep summary and description mapped from AI.
  7. Credential Required: Connect your googleCalendarOAuth2Api credentials in Calendar Booking Tool.

⚠️ Common Pitfall: If the user responds with unclear text, Booking Decision Agent may skip booking. Consider refining its system message for stricter confirmation language if needed.

Step 8: Test and Activate Your Workflow

Validate each step with a manual run, then enable the schedule for production use.

  1. Click Execute Workflow to run the flow manually from Scheduled Automation Start.
  2. Confirm that Retrieve Past Meetings returns events within the time window and Deduplicate Seen Events filters repeats.
  3. Verify Fetch Recent Emails returns threads and Set Follow-Up Flag outputs followUp: true when no thread is found.
  4. Check that Availability Planning Agent outputs slot data and Compose Reminder Message formats the email correctly.
  5. Approve the email from Request User Approval and confirm Calendar Booking Tool creates the meeting in your calendar.
  6. Turn the workflow Active to allow daily execution.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Troubleshooting Tips

  • Google Calendar credentials can expire or need specific permissions. If things break, check the Google OAuth connection in n8n’s Credentials list first, then confirm the workflow is pointing at the right calendar.
  • If you’re using Wait-style timing (or your calendar is busy), processing times vary. Bump up any waiting/handling time if downstream steps fail because availability data hasn’t returned yet.
  • Default prompts in AI nodes are generic. Add your brand voice early (greeting style, sign-off, how direct you are) or you’ll be editing outputs forever.

Quick Answers

What’s the setup time for this follow-up automation automation?

About an hour if your Google and OpenAI accounts are ready.

Is coding required for this follow-up automation?

No. You’ll connect Google/Gmail, add your OpenAI key, and tweak the email wording.

Is n8n free to use for this follow-up automation workflow?

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 costs, which are usually pennies per follow-up draft.

Where can I host n8n to run this automation?

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.

Can I modify this follow-up automation workflow for different use cases?

Yes, and you should. You can adjust the “Retrieve Past Meetings” calendar query, swap the Gmail search to match your subject-line patterns, or change the “Request User Approval” step to notify a shared inbox instead. If you don’t want auto-booking at all, keep the approval email but replace the “Calendar Booking Tool” action with a simple task creation in Google Sheets.

Why is my Gmail connection failing in this workflow?

Usually it’s expired Google OAuth permissions or the wrong Gmail account selected in the Gmail nodes. Reconnect the credential in n8n, then re-open “Fetch Recent Emails” and “Request User Approval” to confirm they point to the same account. If you’re searching a high-volume mailbox, Gmail can also throttle aggressive queries, so narrowing the search window helps.

What volume can this follow-up automation workflow process?

Most small teams can run it daily without thinking about limits, because it only checks a recent slice of your calendar.

Is this follow-up automation automation better than using Zapier or Make?

Often, yes, for one specific reason: you need branching logic and “interpret my reply, then decide” behavior, and that gets expensive or clunky in simpler tools. n8n also gives you the option to self-host, which matters once you’re running this every day across multiple team calendars. The Gmail approval step is a big deal too, because it keeps you in control when the AI suggestion is slightly off. Zapier or Make can still work if you strip the workflow down to “remind me,” but you’ll lose the approval-driven booking loop that makes this template genuinely usable. If you want a second opinion on complexity versus cost, Talk to an automation expert.

Once this is running, follow-up becomes a simple decision instead of a recurring chore. You stay in control, but the workflow does the chasing.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal