Intro
This template is for teams, individuals, or businesses who want to automatically send daily email reminders (e.g., updates, status alerts, follow‑ups) using n8n + Gmail.
How it works
- Cron Trigger fires every day at your specified time.
- Google Sheets node reads all rows from your sheet.
- If node filters rows matching your condition (e.g.,
Status = "Pending"
).
- Send a message (Gmail) sends a customized email to each filtered row.
Required Google Sheet Structure
Column Name |
Type |
Example |
Notes |
Email |
string |
[email protected] |
Recipient email address |
Status |
string |
Pending |
Filter criterion |
Subject |
string |
Daily Status Update |
Email subject (supports variables) |
Body |
string |
“Please update your task” |
Email body (text or HTML) |
Detailed Setup Steps
- Google Sheets
- Build your sheet with the columns above.
- In n8n → Credentials, add Google Sheets API (avoid sensitive names).
- Gmail
- In n8n → Credentials → Gmail (OAuth2 or SMTP), connect your account.
- Do not include your real email in the credential name.
- Import & Configure
- Export the workflow JSON (three‑dot menu → Export).
- Paste it under Template Code in the Creator form.
- In each node, select your Google Sheets and Gmail credentials.
- Sticky Notes
- On the If node: “Defines which rows to email.”
- On the Gmail node: “Sends the email.”
Customization Guidance
- Adjust schedule: change the Cron expression in Cron Trigger.
- Modify filter: edit the condition in the If node.
- Customize email: use expressions like
{{$node["Get row(s) in sheet"].json["Subject"]}}
.
Troubleshooting
- Verify the Google Sheet is shared with the connected service account.
- Check your Cron timezone and expression.
- Ensure Gmail credentials are valid and not rate‑limited.
Security & Best Practices
- Remove any real email addresses and sheet IDs.
- Use n8n Credentials or environment variables—never hard‑code secrets.
- Add sticky notes for any complex logic.