Google Sheets + Gmail: event reminders sent once
Event signups look simple until your spreadsheet starts lying to you. Duplicate emails sneak in, confirmations get missed, and you only notice the mess when people show up confused (or don’t show up at all).
This kind of event reminder automation hits marketing managers first, because they’re the ones judged on attendance. But solo founders running webinars and ops coordinators managing in-person events feel the same pain. You need clean registrations and reliable reminders without babysitting a sheet all week.
This n8n workflow keeps Google Sheets as the source of truth, sends Gmail confirmations and timed reminders, and logs every send so nobody gets emailed twice. Below you’ll see how it works, what you get, and what to watch out for.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Gmail: event reminders sent once
flowchart LR
subgraph sg0["Event Registration Form3 Flow"]
direction LR
n0@{ icon: "mdi:database", form: "rounded", label: "Read Existing Registrations2", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If Not Duplicate2", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>Event Registration Form3"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Check for Duplicate Email2"]
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Registration Success3", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Send Welcome Email3", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Update Welcome Email Status3", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Store Registration (Google S..", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Send Admin Alert3", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code in JavaScript4"]
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Add Status & Event Date3", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Get Confirmed Aptitude Candi..", pos: "b", h: 48 }
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Filter Reminder Candidates2"]
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch Reminder Type2", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop 3-Day2", pos: "b", h: 48 }
n15@{ icon: "mdi:message-outline", form: "rounded", label: "Send 3-Day Reminder2", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Wait5", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Event-Day2", pos: "b", h: 48 }
n18@{ icon: "mdi:message-outline", form: "rounded", label: "Send Event-Day Reminder2", pos: "b", h: 48 }
n19@{ icon: "mdi:cog", form: "rounded", label: "Wait6", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Prepare 3-Day Update2"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Prepare Event-Day Update2"]
n22@{ icon: "mdi:database", form: "rounded", label: "Update Event-Day Status2", pos: "b", h: 48 }
n23@{ icon: "mdi:database", form: "rounded", label: "Update 3-Day Status3", pos: "b", h: 48 }
n24@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger2", pos: "b", h: 48 }
n25@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields4", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields5", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch2", pos: "b", h: 48 }
n16 --> n23
n19 --> n22
n27 --> n0
n27 --> n11
n14 --> n15
n25 --> n27
n26 --> n27
n17 --> n18
n1 --> n7
n24 --> n26
n9 --> n6
n5 --> n9
n15 --> n20
n23 --> n14
n20 --> n16
n13 --> n14
n13 --> n17
n10 --> n4
n2 --> n25
n18 --> n21
n22 --> n17
n21 --> n19
n3 --> n1
n4 --> n5
n4 --> n8
n12 --> n13
n0 --> n3
n11 --> n12
n7 --> n10
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 n2,n24 trigger
class n1,n4,n13,n27 decision
class n0,n6,n7,n11,n22,n23 database
class n3,n9,n12,n20,n21 code
classDef customIcon fill:none,stroke:none
class n2,n3,n9,n12,n20,n21 customIcon
The Problem: Event Emails Get Messy Fast
Most event teams start with “just put the registrations in Google Sheets.” It works right up until it doesn’t. Someone registers twice with the same email. Another person says they never got the confirmation, so you resend it manually, then they find it later and now they’ve received two. And the big one: reminders. You swear you’ll send them three days before and again on event day, but the week gets busy and that follow-up becomes a last-minute scramble.
None of these alone is the problem. Together, they are.
- Duplicate registrations force you to clean lists by hand and you still miss some.
- Manual confirmations get inconsistent when multiple people “help” from the same inbox.
- Reminders are easy to forget, which means more no-shows and awkward “Did you get my email?” replies.
- You have no reliable log of what was sent, so troubleshooting becomes guesswork.
The Solution: One Signup Flow, One Email History
This workflow automates the full registration-to-reminder loop using Google Sheets as the database and Gmail as the sender. When someone submits your event signup form, the workflow cleans up the form fields, checks your sheet for an existing email, and stops duplicates before they pollute your attendee list. If it’s a new registrant, n8n appends the row, assigns a confirmation status and event date, then sends a welcome email immediately. It also processes the send result and writes back to the sheet, so you can see that the confirmation actually went out.
Then the “set it and forget it” part kicks in. A daily schedule trigger reviews confirmed attendees, calculates how close each person is to the event, and routes them into the right reminder flow (three-day or event-day). Each email send is tracked and flagged in Google Sheets, which prevents double-sends even if the workflow runs daily.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you run one live webinar each week with 200 registrants. Manually, you might spend about 10 minutes a day checking duplicates, replying to “please confirm” emails, and preparing reminders, which turns into roughly an hour a week. Add the day-before scramble and it’s easily another 30 minutes. With this workflow, you spend maybe 5 minutes setting up the form and sheet once, then the daily scheduled check handles reminders automatically, while Sheets logs every confirmation and reminder send.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for storing registrations and send status.
- Gmail to send confirmations and reminders.
- Google account access (connect via Google OAuth in n8n).
Skill level: Beginner. You’ll connect Google, map a few fields, and test one registration end-to-end.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A registration comes in. The workflow starts when someone submits your event signup form. n8n immediately normalizes the fields (name, email, anything else you collect) so your sheet stays consistent.
Your sheet gets checked before anything is saved. n8n reads existing rows from Google Sheets, compares emails, and stops the process if that email is already on file. No duplicate row, no accidental second reminder later.
Confirmations go out and get tracked. For new signups, the workflow appends the registration row, assigns a status and event date, and sends a welcome email from Gmail. It then records the send status back into Google Sheets, so you can see what happened without digging through inbox threads.
Daily reminders run automatically. A schedule trigger runs once per day, pulls confirmed attendees, calculates how many days are left, and sends either a 3-day reminder or an event-day message. After each send, the workflow updates “sent” flags in Sheets and includes waits to avoid hammering Gmail.
You can easily modify the reminder timing to match your event style. For example, swap “3-day” for “2-day,” or add a “1-hour before” reminder based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form and Schedule Triggers
This workflow uses a form submission trigger for new registrations and a daily schedule trigger for reminders.
- Open Event Signup Form and set Path to
530dbca7-33ec-4add-a37b-e44ee5fe7e41, Form Title toEvent Registration, and Form Description toRegister for our upcoming event. - In Event Signup Form, confirm the fields: First Name, Last Name, Email (type email), Company, and Interests (dropdown with
n8n,automation,ai-agent,digital-worker). - Open Daily Schedule Trigger and set the schedule rule to run at
09:00(Trigger At Hour9). - In Set Source Form, add the assignment source =
formand keep Include Other Fields enabled. - In Set Source Schedule, add the assignment source =
schedule. - In Route by Source, ensure the rules check
{{$json.source}}equalsformandscheduleto route registrations and reminder checks.
Step 2: Connect Google Sheets
All registration data and reminder flags are stored and updated in Google Sheets.
- Open Fetch Existing Entries and set Document ID to
[YOUR_ID]and Sheet Name togid=0. - Open Append Registration Row and confirm Operation is
appendwith column mappings like Email ={{$json.Email}}and First Name ={{$json["First Name"]}}. - Open Record Welcome Email Status and confirm Operation is
updatewith Matching Columns set toEmail. - Open Retrieve Confirmed Attendees, Update 3-Day Flag, and Update Event-Day Flag, and point each to the same
[YOUR_ID]document andgid=0sheet. - Credential Required: Connect your Google Sheets credentials to all Google Sheets nodes (6 nodes handle reads, appends, and updates).
⚠️ Common Pitfall: The sheet columns include trailing spaces in preEventEmailSent and eventDayEmailSent . Keep the spaces exactly as shown in the sheet and node mappings.
Step 3: Set Up Registration Processing and Duplicate Checks
This path detects duplicate registrations, appends new rows, and assigns status and dates.
- Confirm Fetch Existing Entries flows into Detect Duplicate Email, which compares
Event Signup Formemail data with sheet records. - In Check Non-Duplicate, use the boolean condition value
{{$json.isDuplicate}}to gate new registrations. - In Assign Status and Date, set fields: Status to
confirmed, preEventEmailSent tofalse, and Event Date to20-12-2025. - In Verify Registration Result, confirm the condition checks
{{$json.Status}}equalsconfirmedto proceed.
Step 4: Configure Welcome Email and Failure Notifications
Successful registrations trigger a welcome email and a status update. Failures notify an admin.
- Open Dispatch Welcome Email and set Send To to
{{$json.Email}}and Message to=<h2>Hello {{ $json['First Name'] }}</h2><p>Your registration is confirmed.</p>. - Credential Required: Connect your gmailOAuth2 credentials for Dispatch Welcome Email.
- Keep Process Email Response after Dispatch Welcome Email to add fields like
welcomeEmailSentandemailSentAt. - In Record Welcome Email Status, confirm update mappings include welcomeEmailSent and preEventEmailSent .
- Open Notify Admin Failure and set Send To to
[YOUR_EMAIL], with subject⚠️ Registration Failed for {{ $json.firstName }} {{ $json.lastName }}. - Credential Required: Connect your Gmail credentials for Notify Admin Failure and all other Gmail email nodes in this workflow.
Step 5: Configure Reminder Routing, Batches, and Delays
The reminder flow runs on schedule, filters attendees, and sends 3-day and event-day notices with sheet updates.
- Ensure Daily Schedule Trigger routes through Set Source Schedule → Route by Source → Retrieve Confirmed Attendees → Filter Reminder List.
- In Route Reminder Type, keep the rules that check
{{$json.reminderType}}equals3-dayorevent-day. - For 3-day notices, confirm Batch 3-Day Reminders feeds Send 3-Day Notice, then Prepare 3-Day Sheet Update → Delay After 3-Day → Update 3-Day Flag.
- In Send 3-Day Notice, set Send To to
{{$json.Email}}and use the message template with{{$json['First Name']}}and{{$json.Interests}}. - For event-day notices, confirm Batch Event-Day Reminders feeds Send Event-Day Notice, then Prepare Event-Day Sheet Update → Delay After Event-Day → Update Event-Day Flag.
- In both Delay After 3-Day and Delay After Event-Day, keep Unit set to
seconds(adjust timing as needed). - Credential Required: Connect your Gmail credentials for Send 3-Day Notice and Send Event-Day Notice.
Step 6: Test and Activate Your Workflow
Validate each path, then enable the workflow for production use.
- Use Event Signup Form to submit a test registration and verify Fetch Existing Entries → Detect Duplicate Email → Append Registration Row runs successfully.
- Confirm that Dispatch Welcome Email sends an email and that Record Welcome Email Status updates the sheet.
- Manually run the reminder path by executing Retrieve Confirmed Attendees and confirm routing through Route Reminder Type into either 3-day or event-day batches.
- A successful execution should show Gmail messages sent and updated flags in Update 3-Day Flag or Update Event-Day Flag.
- Turn the workflow Active to enable scheduled reminders and live form processing.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the connected Google account and OAuth consent in n8n 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.
Frequently Asked Questions
About 30 minutes if your Sheet and Gmail account are ready.
No. You’ll mostly connect Google, map fields, and test a signup. The only “code” parts are already included in the 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 Gmail/Google Workspace costs if you’re sending from a paid domain inbox.
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 common tweak. You can change the date math in the “Filter Reminder List” code step, then adjust routing in “Route Reminder Type” so attendees flow into the right batch. Some teams add a “1-day before” email, others move the 3-day notice to 7 days for bigger events. If your event date lives in another system, you can also swap the Google Sheets lookup for HubSpot and still write the send flags back to Sheets.
Usually it’s an expired Google OAuth connection or the connected account lost access to the spreadsheet. Reconnect Google in n8n, then confirm the Sheet is shared with that same account. Also double-check the spreadsheet ID and tab name because a renamed tab can look like a “broken API” when it’s really just pointing at the wrong place.
For most small events, hundreds or a few thousand registrations are fine.
Often, yes, if you care about “send once” logic and tracking. This workflow uses branching, batching, and status flags in Google Sheets, which is where Zapier and Make setups tend to sprawl into multiple zaps/scenarios. n8n also makes scheduled processing straightforward, so you’re not paying extra for every tiny filter step. That said, Zapier or Make can be faster to set up for a simple confirmation-only flow with no reminder routing. If you want the cleanest option for your specific event volume and email cadence, Talk to an automation expert.
Once this is in place, confirmations and reminders become boring. Honestly, that’s the goal. Your sheet stays clean, your emails go out on time, and you stop chasing attendance at the last minute.
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.