Google Sheets + Gmail: follow ups that book meetings
You had a good first reply. Then… nothing. The lead sits in a Google Sheet, nobody follows up at the right time, and by the time you remember, the moment is gone.
This Gmail follow up automation hits sales reps first, honestly, but ops folks and small agency owners feel it too. You get consistent follow-ups, reserved calendar slots, and a clean “BOOKED” status without chasing spreadsheets all week.
Below, you’ll see exactly what the workflow does, what you need to run it, and how to think about customizing it for your pipeline.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Google Sheets + Gmail: follow ups that book meetings
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Unbooked", pos: "b", h: 48 }
n2@{ icon: "mdi:location-exit", form: "rounded", label: "Create Calendar Placeholder", pos: "b", h: 48 }
n3@{ icon: "mdi:message-outline", form: "rounded", label: "Send Follow-up Email1", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Get a thread", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Append or update row in sheet", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n9@{ icon: "mdi:cog", form: "rounded", label: "Wait 24 hr 1", pos: "b", h: 48 }
n6 --> n8
n8 --> n7
n5 --> n6
n9 --> n5
n0 --> n4
n1 --> n3
n4 --> n1
n3 --> n2
n2 --> n9
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 n0 trigger
class n1,n6 decision
class n4,n7 database
Why This Matters: Leads Go Cold Between “Interested” and “Booked”
Booking meetings sounds simple until you’re juggling real volume. A lead replies, you mean to follow up tomorrow, and then tomorrow becomes “after this one thing.” Suddenly it’s been three days, and the lead has moved on. Even worse, you send a follow-up late, they actually want to meet, and now you’re scrambling to find times that don’t conflict with what’s already on the calendar. That back-and-forth kills momentum, and it creates messy data because nobody updates the sheet the same way.
It adds up fast. Here’s where it breaks down in most teams.
- Following up “in 24 hours” turns into checking a sheet a few times a day and hoping you didn’t miss anyone.
- People copy, paste, and tweak email templates, which means tone and details drift over time.
- Calendar links help, but they don’t stop double booking when multiple leads are choosing similar times.
- Status fields stay wrong for days, so reporting and handoffs become guesswork.
What You’ll Build: An Automated Follow-Up + Slot-Holding Booking Sequence
This workflow runs quietly in the background and keeps your “unbooked” leads moving. Every hour, it checks your Google Sheet for leads that still haven’t booked (or haven’t responded in about a day). When it finds one, it pulls their details like name, company, and email, then sends a personalized Gmail follow-up that includes your calendar booking link plus a couple alternate time options. At the same time, it creates a placeholder event in Google Calendar to hold a slot, so you’re not offering times that will get taken later. After waiting about 24 hours, it checks for confirmation (via replies or webhook triggers) and updates the Sheet to “BOOKED” when it’s real.
The flow starts with a scheduled hourly check. Then it filters for the right leads, sends the right message, and reserves time on your calendar. Finally, it watches for confirmations and cleans up your tracking so you can trust your pipeline again.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you’re handling 30 active leads in a sheet. Manually, you might spend about 5 minutes per lead each week checking status, calculating “has it been 24 hours,” and sending a follow-up, which is roughly 2.5 hours. With this workflow, the check runs automatically every hour, the email sends itself, and the calendar slot gets held while you do other work. Your “time cost” becomes a quick review of bookings and exceptions, maybe 10 minutes a day.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store lead details and statuses.
- Gmail to send follow-up emails from your account.
- Google Calendar to create placeholder events that reserve slots.
- Google API credentials (create in Google Cloud Console).
Skill level: Beginner. You’ll connect Google accounts, then map a few fields in the Sheet.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
An hourly check kicks things off. The workflow runs on a schedule (every hour) so your follow-ups happen even when nobody is “on top of the sheet.”
Lead records get filtered down. It pulls rows from Google Sheets, then uses simple conditions (like Status = Unbooked, or the initial reply date being older than about 24 hours) to select only the people who need attention.
The follow-up and calendar hold happen together. n8n sends a Gmail message personalized with the lead’s details, includes your booking link, and offers two alternate time slots. In the same run, it creates a Google Calendar placeholder event so those slots aren’t accidentally taken by something else.
Confirmation gets detected and logged. After a 24-hour wait, the workflow checks for a reply (or a webhook-based confirmation) and updates the Google Sheet status to “BOOKED.” You can also route confirmations to Slack so your team sees it instantly.
You can easily modify the “24 hours” delay to match your sales cycle, or change the status values in Google Sheets to fit your existing pipeline stages. See the full implementation guide below for customization options.
Troubleshooting Tips
- Google (Sheets/Gmail/Calendar) credentials can expire or need specific permissions. If things break, check the n8n Credentials screen first, then re-auth in your Google connection.
- If you’re using Wait nodes or external timing (like checking after 24 hours), processing times vary. Bump up the wait duration if downstream checks run before Gmail threads have actually updated.
- The default email copy is rarely “your voice.” Edit the message body early, add your booking rules, and keep the subject line consistent or you’ll be cleaning up tone and threading issues later.
Quick Answers
About 30 minutes if your Google accounts are ready.
No. You’ll connect Google, then map a few fields from your Sheet into the email and calendar steps.
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 Google API usage (usually negligible for low 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 you should. Most people start by changing the Google Sheets filter (the IF condition for status and timing), then adjusting the Gmail message content and the Google Calendar placeholder rules. You can also swap the confirmation method by using a webhook from your booking page instead of checking Gmail replies. Common customizations include different delay windows, multiple follow-up rounds, and Slack notifications for “BOOKED.”
Usually it’s an expired Google credential or missing permissions on the account you connected. Reconnect Google in n8n, confirm the spreadsheet is shared with that account, and double-check the Sheet ID and tab name match what the node expects.
A typical small team can run hundreds of checks per day without issues, because it’s just reading rows and sending a subset of emails.
Sometimes, yes. n8n is better when you want branching logic (like status rules, time checks, and different outcomes), plus a true 24-hour wait and then another round of processing without paying extra for every little step. Self-hosting is also a big deal if you have steady volume and don’t want to think about task limits. Zapier or Make can be quicker for a basic “new row → send email” setup, but this workflow is more than that. If you want help picking the right approach, Talk to an automation expert.
Once this is running, your sheet stays honest and your follow-ups stop depending on someone’s memory. Set it up, let it work, and focus on the conversations that actually close.
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.