Google Sheets to Gmail, follow ups sent on schedule
Your leads don’t go cold because you’re bad at sales. They go cold because follow-ups slip. A day turns into a week, the thread gets buried, and you’re back to “Just checking in” with zero context.
This is the kind of mess that hits marketers trying to nurture inbound interest, and agency owners juggling too many “hot” prospects at once. Even a busy founder can keep a clean pipeline with this Sheets Gmail follow ups automation running in the background.
You’ll see how a simple Google Sheet becomes a daily follow-up engine that sends the right email on Day 1, 3, 7, and 14, then updates your tracker automatically.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets to Gmail, follow ups sent on schedule
flowchart LR
subgraph sg0["Daily at 9 AM Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Daily at 9 AM", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Read All Follow-Up Leads", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Today's Follow-Ups", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Process One at a Time", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by Follow-Up Stage", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Send Day 1 Follow-Up", pos: "b", h: 48 }
n6@{ icon: "mdi:message-outline", form: "rounded", label: "Send Day 3 Follow-Up", pos: "b", h: 48 }
n7@{ icon: "mdi:message-outline", form: "rounded", label: "Send Day 7 Follow-Up", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Send Day 14 Final Follow-Up", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Update Last Sent Date", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Calculate Next Follow-Up", pos: "b", h: 48 }
n0 --> n1
n5 --> n9
n6 --> n9
n7 --> n9
n3 --> n4
n9 --> n10
n1 --> n2
n4 --> n5
n4 --> n6
n4 --> n7
n4 --> n8
n2 --> n3
n8 --> 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 n2,n4 decision
class n1,n9,n10 database
The Problem: Follow-Ups Fall Apart Without a System
Manual follow-up tracking looks harmless at first. You add a lead to a sheet, maybe set a reminder, and tell yourself you’ll “circle back.” Then real work happens. A client call runs long. Someone replies in a different thread. A new batch of leads comes in and your tracker turns into a graveyard of half-updated rows. Honestly, the worst part is the mental load: you’re not just doing outreach, you’re constantly wondering who you forgot.
It’s not one big failure. It’s dozens of small ones.
- You waste about 10 minutes per lead just figuring out what to send next.
- Follow-ups go out in bursts, which makes your outreach feel inconsistent and rushed.
- One missed “next date” silently kills a deal you could have revived with a simple Day 7 touch.
- Your sheet stops being trustworthy, so you end up managing everything from your inbox instead.
The Solution: A Daily Google Sheets → Gmail Follow-Up Sequence
This n8n workflow runs every morning at 9 AM, reads your “Follow-Up Tracker” Google Sheet, and pulls only the leads that are due today. Then it processes each lead one at a time (so your Gmail account doesn’t get hammered), checks their current stage, and sends the matching email template for Day 1, Day 3, Day 7, or Day 14. After the email is sent, the workflow updates your sheet with the “Last Sent Date” and calculates the next follow-up date automatically. If a lead has reached the end of the sequence, it can mark them complete, so your tracker stays clean.
The workflow starts with a simple daily schedule. From there, Google Sheets acts like your source of truth, and Gmail is the delivery channel. Finally, the sheet gets updated so tomorrow’s run is always accurate.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you’re nurturing 40 active leads and around 8 are due for follow-up on a typical day. Manually, it’s maybe 10 minutes per lead to open the sheet, check the stage, copy a template, personalize, send, then update the “last sent” field, which is about 80 minutes. With this workflow, you spend about 5 minutes adding leads and scanning for odd cases, then the daily run sends and updates everything automatically. You just got more than an hour back, and it happens again tomorrow.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your Follow-Up Tracker table.
- Gmail to send the staged follow-up emails.
- Google OAuth credentials (create them in Google Cloud Console).
Skill level: Beginner. You’ll connect accounts, paste your Sheet ID, and edit a few email templates.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A daily schedule kicks it off. The workflow runs every morning at 9 AM, so follow-ups go out consistently even when your calendar is chaos.
Your Google Sheet becomes the queue. n8n reads the “Follow-Up Tracker” tab, then filters down to rows where the “Next Follow-Up Date” is today.
Each lead is handled individually. A batching loop processes one row at a time, then a simple stage check routes that lead to the correct Gmail email (Day 1, 3, 7, or 14).
The tracker updates itself. After sending, it writes back the “Last Sent Date” and calculates the next follow-up date (or marks the sequence complete), so you don’t have to keep the spreadsheet “in sync” by hand.
You can easily modify the four-stage timing to match your sales cycle based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Set the daily trigger that starts the follow-up workflow each morning.
- Add the Morning Schedule Trigger node as your trigger.
- Set the Interval to cron and use
0 9 * * *so the workflow runs daily at 9:00 AM. - Connect Morning Schedule Trigger to Retrieve Follow-Up Leads.
Step 2: Connect Google Sheets
Pull lead records and update follow-up tracking fields in your spreadsheet.
- Open Retrieve Follow-Up Leads and set Document ID to
[YOUR_ID]and Sheet Name toFollow-Up Tracker. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Retrieve Follow-Up Leads. - Configure Update Last Contact Date with Operation set to
update, and map columns: Email →{{ $json['Email'] }}, Last Sent Date →{{ $now.format('yyyy-MM-dd') }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Update Last Contact Date. - Configure Compute Next Follow-Up with Operation set to
updateand map: Stage →{{ $json['Stage'] === 'Day 1' ? 'Day 3' : $json['Stage'] === 'Day 3' ? 'Day 7' : $json['Stage'] === 'Day 7' ? 'Day 14' : 'Complete' }}, Status →{{ $json['Stage'] === 'Day 14' ? 'Completed' : 'Active' }}, Next Follow-Up Date →{{ $now.plus({ days: $json['Stage'] === 'Day 1' ? 2 : $json['Stage'] === 'Day 3' ? 4 : $json['Stage'] === 'Day 7' ? 7 : 0 }).format('yyyy-MM-dd') }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Compute Next Follow-Up.
[YOUR_ID] in Google Sheets nodes with your actual spreadsheet ID, or reads/updates will fail.Step 3: Set Up Filtering and Batching
Filter the daily queue and batch process leads before routing them by follow-up stage.
- In Filter Today's Queue, set the first condition to Left Value
{{ $json['Next Follow-Up Date'] }}and Right Value{{ $now.format('yyyy-MM-dd') }}with Operationequals. - Add the second condition in Filter Today's Queue with Left Value
{{ $json['Status'] }}and Right ValueActive. - Connect Retrieve Follow-Up Leads → Filter Today's Queue → Batch Through Leads.
- Connect Batch Through Leads to Route by Stage for stage-based routing.
Step 4: Configure Output Email Routing and Updates
Send stage-specific emails and update the tracking sheet after each email is sent.
- In Route by Stage, ensure each output is defined with conditions: Stage equals
Day 1,Day 3,Day 7, andDay 14using{{ $json['Stage'] }}. - For Dispatch Day 1 Email, set Send To to
{{ $json['Email'] }}, Subject toQuick Follow-Up - {{ $json['Name'] }}, and use the provided HTML message with expressions. - Credential Required: Connect your
gmailOAuth2credentials in Dispatch Day 1 Email. - Repeat the email setup for Dispatch Day 3 Email, Dispatch Day 7 Email, and Dispatch Day 14 Email with their respective subjects and message templates.
- Credential Required: Connect your
gmailOAuth2credentials in Dispatch Day 3 Email, Dispatch Day 7 Email, and Dispatch Day 14 Email. - Connect each email node to Update Last Contact Date, then connect Update Last Contact Date to Compute Next Follow-Up.
[YOUR_ID] links in the email templates with your booking or resource URLs before going live.Step 5: Test and Activate Your Workflow
Run a manual test to verify email delivery and spreadsheet updates, then enable the automation.
- Click Execute Workflow and confirm that Retrieve Follow-Up Leads returns rows for today’s follow-up date.
- Verify that a lead routes to one of the email nodes and that the email is delivered using the correct template.
- Check the spreadsheet to confirm Update Last Contact Date and Compute Next Follow-Up updated the Last Sent Date, Stage, Status, and Next Follow-Up Date fields.
- When satisfied, toggle the workflow to Active so Morning Schedule Trigger runs daily.
Common Gotchas
- Google Sheets access can fail if your Google OAuth permissions change. If it stops reading rows, check the Google credential in n8n first, then confirm the Sheet ID is still correct.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Gmail has daily sending limits (about 500/day on many free accounts). If sends start failing, look at your Gmail “Sent” volume and slow the workflow down by batching fewer leads per run.
Frequently Asked Questions
About 30 minutes if your Sheet and Gmail access are ready.
No. You’ll mostly edit email copy and connect Google credentials in n8n.
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 want to consider Gmail account limits (many free accounts cap around 500 emails/day).
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 a practical tweak. You’ll update the stage routing in the “Route by Stage” switch and adjust what gets written in “Compute Next Follow-Up” so the “Next Follow-Up Date” matches your cadence. Common customizations include adding a Day 30 check-in, changing Day 3 to Day 2 for faster cycles, or stopping after Day 7 for shorter sales windows.
Most of the time it’s expired or missing OAuth permissions in your Gmail credential inside n8n. Reconnect the Gmail account, then confirm the email nodes are using the updated credential. If you’re sending a lot in one day, Gmail can also temporarily block or throttle sends, so check your recent sending volume and try again the next run.
It can handle hundreds of leads in the sheet, but daily sends are limited by your Gmail account (often around 500/day on free accounts).
Often, yes, if you care about running a real sequence and keeping a tracker updated in one pass. n8n makes it easier to loop through many rows, route by stage, and write back changes without paying extra for every little branch. It’s also flexible: you can self-host and run as many executions as your server can handle. Zapier or Make can still be a fine choice if you only want a simple “new row → send email” setup and you don’t need staged follow-ups. If you’re torn, Talk to an automation expert and we’ll point you to the cleanest option.
This is what “organized follow-up” looks like when it’s actually automatic. Set it up once, keep your sheet clean, and let the workflow do the repeating work.
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.