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.