Google Sheets + Gmail: cold emails sent and logged
You build a lead list, you plan to send “just a few” emails, and then the week disappears into copy-paste, tab switching, and second-guessing who you already contacted. One missed row turns into an awkward double-send. One forgotten update turns your sheet into fiction.
This Sheets Gmail outreach automation hits marketing managers running scrappy campaigns hardest, but agency owners and sales-minded founders feel it too. The outcome is simple: emails go out automatically and every lead gets logged as “sent” so you stop chasing your own spreadsheet.
Below, you’ll see how the workflow runs daily, pulls only the right rows, sends personalized Gmail messages, and marks each contact so you can scale outreach without the mess.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Sheets + Gmail: cold emails sent and logged
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-vertical", form: "rounded", label: "Batch Processing of Leads", pos: "b", h: 48 }
n2@{ icon: "mdi:message-outline", form: "rounded", label: "Send Personalized Email", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Fetch Leads", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Update Lead Status", pos: "b", h: 48 }
n3 --> n1
n0 --> n3
n4 --> n1
n2 --> n4
n1 --> n2
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 n3,n4 database
The Challenge: Cold outreach that doesn’t get tracked
Cold outreach sounds straightforward until you try to run it consistently. You draft an email, copy a name, paste an address, hit send, then go back to your Google Sheet and mark the row. Multiply that by a few dozen leads and the “quick task” becomes the kind of work you procrastinate. And when you’re interrupted (a call, a Slack ping, a client request), the tracking is the first thing to slip. That’s how duplicates happen, good leads get missed, and your reporting turns into guesswork.
It adds up fast. Here’s where it breaks down in real teams.
- You end up sending the same cold email twice because “sent” wasn’t marked during a busy moment.
- Rows get skipped when someone sorts or filters the sheet and forgets to reset it.
- Personalization drops off because copying names and fields feels tedious after the first ten.
- No one trusts the outreach log, so you waste time re-checking Gmail threads and Sent mail.
The Fix: Send from Sheets, then log it automatically
This workflow turns your Google Sheet into a lightweight outreach system. Every day at a set time, n8n checks your sheet for leads where “Is Email Sent” is blank (or not marked as yes). It pulls those rows, works through them in batches (so you don’t hammer Gmail limits), and sends a personalized email through your connected Gmail account using your template. Once Gmail confirms the send, the workflow updates that same row in Google Sheets to mark it as contacted. Next time it runs, those leads are ignored, which means no duplicates and no “did we email them already?” debates.
The workflow starts on a daily schedule. Then it retrieves only unsent leads, sends the Gmail message using fields like Name, and finally writes back to Google Sheets so your outreach log stays clean with almost no effort.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you send 20 cold emails a day from a sheet. Manually, it’s usually 3 minutes per lead between finding the row, personalizing, sending, and marking status, which is about an hour each day. With this automation, you spend maybe 10 minutes setting up the day’s list and checking replies, and n8n handles the sending plus the logging in the background. That’s roughly 4 hours back every week, without changing your offer or your list quality.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store leads and email status.
- Gmail to send outreach with your template.
- Google OAuth2 credentials (get it from Google Cloud Console).
Skill level: Beginner. You’ll connect Google accounts and map a few fields in the email template.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Daily schedule kicks it off. At your chosen time (the example is set to mid-afternoon), n8n starts the run so outreach happens consistently without someone needing to remember.
Leads are pulled from Google Sheets. The workflow fetches rows where “Is Email Sent” isn’t marked as yes, which means you only touch people who have not been contacted yet.
Batches keep sending under control. Split-in-batches processes a manageable chunk of leads, then moves to the next chunk after each one is handled.
Gmail sends, then Sheets gets updated. The email is sent with personalization variables (like Name), and once it’s successful, the workflow writes back to the same row to mark it as sent.
You can easily modify the email copy to match your brand voice, or change the “sent” logic to use a date stamp instead of yes. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Start the workflow on a schedule so your lead outreach runs automatically.
- Add and open Scheduled Automation Start.
- Set your preferred schedule (for example, daily or weekly cadence).
- Confirm the connection from Scheduled Automation Start to Retrieve Lead List matches the execution flow.
Step 2: Connect Google Sheets
Pull leads from your spreadsheet and update their status after email dispatch.
- Open Retrieve Lead List and configure the spreadsheet, sheet, and range that contains your lead data.
- Open Modify Lead Status and configure the same spreadsheet and the columns used to mark outreach status.
- Credential Required: Connect your Google Sheets credentials in both Retrieve Lead List and Modify Lead Status.
Step 3: Set Up Lead Batching
Iterate through each lead to send tailored outreach one record at a time.
- Open Lead Batch Iterator.
- Set the batch size to match how many emails you want to process per cycle (for example, 1 for one-at-a-time).
- Verify the flow: Retrieve Lead List → Lead Batch Iterator → Dispatch Tailored Email.
Step 4: Configure Email Dispatch and Status Updates
Send the outreach email, then mark the lead as contacted in your sheet.
- Open Dispatch Tailored Email and define the recipient, subject, and body using data from the lead record.
- Credential Required: Connect your Gmail credentials in Dispatch Tailored Email.
- In Modify Lead Status, map the lead identifier and set the status field (e.g., “Sent”) to update after the email sends.
- Confirm the flow: Dispatch Tailored Email → Modify Lead Status → Lead Batch Iterator (looping through all leads).
Step 5: Test and Activate Your Workflow
Run a manual test to confirm data pulls, emails send, and statuses update correctly.
- Click Execute Workflow and observe a single lead flowing from Retrieve Lead List through Dispatch Tailored Email.
- Verify the email arrives in the recipient inbox and the corresponding row is updated by Modify Lead Status.
- If results look correct, toggle the workflow to Active to begin scheduled outreach.
Watch Out For
- Google Sheets OAuth2 credentials can expire or need specific permissions. If things break, check n8n’s Credentials screen and your Google Cloud OAuth consent scopes first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
Usually about 30 minutes if your Google accounts are ready.
Yes. You’ll connect Google accounts and paste your email template, then map a couple of fields like Name and Email.
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 normal Gmail usage limits, but there are no per-email API charges here.
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.
Start with the two Google Sheets nodes and your Gmail send node, because that’s where most customization lives. Many teams replace the “Is Email Sent = yes” update with a date stamp like “Last Contacted,” which makes auditing easier. You can also add columns such as Company or Offer and reference them inside the Gmail message using n8n variables. If you need a different sending schedule, change the Schedule Trigger time and keep everything else the same.
Most of the time it’s expired OAuth2 access or missing Gmail send permissions. Reconnect the Gmail credential in n8n, then verify the OAuth consent scopes you granted in Google. If you’re sending at higher volume, you can also hit Gmail daily limits, which causes sends to fail until the quota resets.
Practically, it’s gated by Gmail sending limits and whatever batch size you choose.
Often, yes, because this kind of “loop through rows, send, then write back” pattern is where n8n feels more flexible. Batching is straightforward, and you’re not forced into pricey task counts just to iterate through a list. Self-hosting is also a big deal if you want to run daily outreach without watching every execution. If you only send a handful of emails and want the simplest UI, Zapier or Make may still be fine. Talk to an automation expert if you want help choosing.
Once this is running, your sheet stays honest and your outreach stays consistent. Set it up once, then spend your time on replies and follow-ups instead of admin.
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.