🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Sheets to Gmail, occasion emails sent right

Lisa Granqvist Partner Workflow Automation Expert

You had the date written down. Somewhere. Then the day arrives, you’re busy, and the “happy birthday” turns into a late apology (or silence).

Sheets Gmail automation is for the moments you don’t want to drop. Founders keeping partners close feel it. So do client-facing marketers and agency owners who live and die by relationships.

This workflow checks your Google Sheet every day, writes a personal message with AI, and sends the right email through Gmail only when someone actually has an occasion. You’ll see how it works, what you need, and what to tweak so it sounds like you.

How This Automation Works

See how this solves the problem:

n8n Workflow Template: Google Sheets to Gmail, occasion emails sent right

The Challenge: Remembering occasions without sounding robotic

Occasion outreach looks simple until you’re the one doing it. Dates live in a spreadsheet, a calendar, or a CRM. You notice them late, then rush out a message that feels copied from a template. Even when you do remember, writing something genuinely personal takes more mental effort than it should, because you’re digging for context (“How do I know them again?”) while juggling everything else. And once you miss one birthday or anniversary, you feel it. Honestly, it’s a small crack that can turn into a reputation problem.

It adds up fast. Here’s where it breaks down in real life.

  • You end up scanning a sheet or calendar manually, which is easy to forget during busy weeks.
  • Generic “Happy birthday!” messages don’t strengthen relationships, so the effort doesn’t pay back.
  • Personal notes get buried, which means you miss the detail that would make the email feel human.
  • When multiple dates hit the same day, you either skip people or you spend your morning writing instead of working.

The Fix: Daily Google Sheets checks that send the right email

This n8n workflow runs on a daily schedule and treats your Google Sheet like a simple relationship reminder system. It grabs “today’s date,” reads rows from your sheet (Name, Occasion_Date, Email, Occasion_Type, Relationship, Personal_Note), and hands the context to an AI Agent. The Agent’s job is straightforward: figure out who matches today and draft a personalized message for each person, using your relationship label and personal note so it doesn’t come out stiff. If there’s nobody to email, it stops quietly. If there are two or five people to wish, it sends two or five separate Gmail messages, each tailored to the person and the occasion.

The workflow starts with a daily trigger, then computes the current date so matching is consistent. Next, the AI Agent produces a strict JSON list of recipients and messages, which gets transformed into the format Gmail expects. Finally, Gmail sends the emails automatically, so your intent becomes action without you being online.

What Changes: Before vs. After

Real-World Impact

Say you keep a list of 60 clients, partners, and referral sources in Google Sheets, and you usually have about 6 occasions in a typical month. Manually, you spend maybe 10 minutes to find the dates and another 10 minutes to write something that doesn’t sound canned, so call it about 20 minutes per email. That’s about 2 hours a month, plus the “oh no, I forgot” moments. With this workflow, your time is basically zero on send day: the daily trigger runs, AI drafts, Gmail sends, and you just skim replies as they come in.

Requirements

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store names, dates, notes.
  • Gmail to send the occasion emails.
  • OpenAI API key (get it from your OpenAI dashboard).

Skill level: Beginner. You’ll connect accounts, paste a prompt, and map a few fields.

Need help implementing this? Talk to an automation expert (free 15-minute consultation).

The Workflow Flow

A daily schedule kicks it off. n8n runs this once per day automatically, so your reminders don’t rely on memory or a calendar alert you’ll swipe away.

Today’s date gets normalized. The Date & Time step computes the current date in a consistent format, which matters more than people think when you’re matching spreadsheet values.

Your sheet becomes the source of truth. Google Sheets rows are retrieved, and the AI Agent reviews Name, Occasion_Date, Occasion_Type, Relationship, and Personal_Note to decide who needs a message today and what to say. The OpenAI chat model generates the wording, but it’s constrained to return strict JSON so the automation stays reliable.

Gmail sends only what’s needed. The code step transforms the AI output into clean fields, then Gmail dispatches one email per person. No matches means no sends, so you aren’t spamming anyone by accident.

You can easily modify the tone and length of the messages to match your brand voice 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 schedule and calculate today’s date to drive the workflow’s timing.

  1. Add and open Daily Schedule Trigger.
  2. Set the schedule rule to run every 24 hours by configuring Interval to hours: 24.
  3. Add Compute Current Date and connect Daily Schedule TriggerCompute Current Date.

Step 2: Connect Google Sheets

Provide the occasion data source used by the AI to match today’s date.

  1. Open Retrieve Sheet Rows.
  2. Set Document to [YOUR_ID] and Sheet to Sheet1 (gid=0).
  3. Credential Required: Connect your googleSheetsOAuth2Api credentials.
  4. Ensure Retrieve Sheet Rows is connected as an AI tool to Occasion Reasoning Agent so the agent can access the sheet data.

If the sheet name in Google Sheets is different from Sheet1, update the Sheet selector in Retrieve Sheet Rows to match.

Step 3: Set Up the AI Reasoning and Language Model

Configure the AI agent to interpret today’s date, query the sheet tool, and format structured output.

  1. Open Occasion Reasoning Agent and set Text to =Today's date is: {{ $json.currentDate }} Please check the Google Sheet resource for any occasions matching today's date (month and day only). OUTPUT FORMAT: When occasion is found, return ONLY valid format like this (no other text): [{ "hasOccasion": true, "email": "[YOUR_EMAIL]", "subject": "Happy 30th Anniversary Sarah! 🌹☕", "message": "Happy 30th Anniversary, my love!..." }] When no occasion is found, return ONLY: [{ "hasOccasion": false }] Proceed now..
  2. Set the System Message in Occasion Reasoning Agent to =You are my personal assistant specialized in relationship management and special occasion tracking. YOUR IDENTITY: - Thoughtful and detail-oriented - You help me maintain strong relationships by ensuring I never miss important dates - You have access to a Google Sheet containing all my friends' and family members' special occasions YOUR CAPABILITIES: - You can read and analyze dates from the Google Sheet resource attached - You understand different types of occasions: birthdays, anniversaries, graduations, engagements, etc. - You can calculate ages and anniversary years accurately - You generate personalized, heartfelt messages appropriate for different relationships YOUR RESPONSIBILITIES: 1. Check if today matches any occasion in the sheet (compare month and day only, ignore year) 2. If occasions are found today: - Extract all relevant details (Name, Email, Occasion_Type, Relationship, Personal_Note, Occasion_Date) - Calculate years passed (current year minus occasion year) - Use correct ordinal suffix (1st, 2nd, 3rd, 4th, 21st, 22nd, 23rd, etc.) - Generate warm, personalized messages that reflect the relationship type 3. If no occasions are found today: - Simply respond: "No occasions today." MESSAGE GUIDELINES: - Adapt tone based on relationship: * Spouse/Partner: Romantic, intimate, loving * Parents: Respectful, warm, appreciative * Siblings: Casual, playful, supportive * Friends: Friendly, fun, genuine * Professional contacts: Formal, respectful, professional - Reference the Personal_Note to add authentic, specific touches - Keep messages 3-5 sentences - Start birthday/anniversary messages with "Happy [number][suffix] [occasion]!" - Be genuine and heartfelt, never generic or robotic - Each message should feel unique and personal IMPORTANT RULES: - Match dates by MM-DD only (ignore the year in comparison) - Always calculate the correct age/years for context - Never send wishes if the date doesn't match - Process each person separately if multiple occasions exist today - Maintain privacy and handle personal information carefully.
  3. Connect OpenAI Chat Engine as the language model for Occasion Reasoning Agent and set Model to gpt-4.1-mini.
  4. Credential Required: Connect your openAiApi credentials in OpenAI Chat Engine.

OpenAI Chat Engine is connected as the language model for Occasion Reasoning Agent—ensure credentials are added to OpenAI Chat Engine, not the agent node itself.

Step 4: Configure Output Processing and Email Dispatch

Parse the AI output into clean items and send the email when an occasion is found.

  1. Open Transform AI Output and set JavaScript Code to // Get the string returned by the AI agent let raw = items[0].json.output; // Sometimes output may already be parsed, handle both cases let parsed; try { // Try to parse directly parsed = JSON.parse(raw); } catch (e) { // If output contains escaped JSON inside JSON, parse twice try { parsed = JSON.parse(JSON.parse(raw)); } catch (e2) { throw new Error("AI output is not valid JSON array: " + raw); } } // Ensure we always get an array if (!Array.isArray(parsed)) { parsed = [parsed]; } // If no occasions found → [{ hasOccasion: false }] if (parsed.length === 1 && parsed[0].hasOccasion === false) { // Return zero items → nothing is sent return []; } // Convert each event into its own n8n item const newItems = parsed.map(ev => ({ json: { hasOccasion: ev.hasOccasion, email: ev.email, subject: ev.subject, message: ev.message } })); return newItems; .
  2. Connect Occasion Reasoning AgentTransform AI OutputDispatch Email Notice.
  3. Open Dispatch Email Notice and set Send To to ={{ $json.output.email }}, Subject to ={{ $json.output.subject }}, and Message to ={{ $json.output.message }}.
  4. Credential Required: Connect your Gmail OAuth2 credentials.

⚠️ Common Pitfall: If Dispatch Email Notice has no Gmail credentials configured, the workflow will fail at send time even if the AI produces valid output.

Step 5: Test and Activate Your Workflow

Validate the end-to-end flow and then enable it for daily execution.

  1. Click Execute Workflow to run a manual test from Daily Schedule Trigger.
  2. Confirm that Compute Current Date outputs today’s date and Occasion Reasoning Agent returns properly formatted JSON.
  3. If an occasion matches, verify that Dispatch Email Notice sends an email with the expected subject and message. If no occasion matches, verify that no email is sent (the output should be empty after Transform AI Output).
  4. Once validated, toggle the workflow Active to enable daily execution.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Watch Out For

  • Google Sheets permissions can be picky. If the workflow suddenly can’t read rows, check the Google connection in n8n credentials and confirm the sheet is shared with the right account.
  • If you’re using Wait behavior or relying on external processing, timing can drift. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default AI prompts are bland. Add your voice rules and “do not mention AI” instructions early, or you will be editing messages forever.

Common Questions

How quickly can I implement this Sheets Gmail automation automation?

About 30 minutes if your sheet is ready.

Can non-technical teams implement this occasion email sending?

Yes. You’ll connect Google Sheets and Gmail, then paste the AI prompt and map a few fields.

Is n8n free to use for this Sheets Gmail automation 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 OpenAI API usage costs, which are usually small for short emails.

Where can I host n8n to run this automation?

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.

How do I adapt this Sheets Gmail automation solution to my specific challenges?

You can tailor it mostly through the AI prompt and the fields you pass in from Google Sheets. Common tweaks include changing the tone (formal, friendly, short), adding “send me an early reminder” behavior by comparing dates for the next few days, and saving a “Last_Sent” column back to the sheet so you never double-send. If you’d rather message yourself first, route the Agent’s output to Telegram before Gmail, then send only after approval.

Why is my Gmail connection failing in this workflow?

Most of the time it’s an expired Google authorization in n8n credentials. Reconnect Gmail, then confirm the Gmail node is using the updated credential. Also check that your Google account allows the required access and that you haven’t hit sending limits if you’re emailing a lot of recipients at once.

What’s the capacity of this Sheets Gmail automation solution?

For a daily “check and send” workflow like this, most small teams are fine on a starter plan. If you self-host, there’s no execution cap from n8n itself, but your server resources and Google’s email sending limits still apply. Practically, sending a few emails per day is easy; scaling to large lists means you should add logging, rate controls, and a “sent history” column in Sheets.

Is this Sheets Gmail automation automation better than using Zapier or Make?

Often, yes, because this workflow benefits from structured AI output (strict JSON) and a bit of logic around “send nothing when empty,” which is easier to control in n8n. n8n also gives you a self-hosting option, which can matter if you want unlimited runs or tighter data control. Zapier and Make can still do it, but you may spend more time fighting formatting and edge cases. If you want approvals, sent-history logging, or multiple message styles, n8n tends to stay cleaner as it grows. Talk to an automation expert if you’re not sure which fits.

You set it up once, and the workflow keeps quietly doing the thoughtful thing in the background. That’s fewer missed moments, and a lot less mental clutter.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal