Automated Birthday & Anniversary Wishes from Airtable via Gmail
Overview
This workflow automatically sends personalized birthday and anniversary wishes to your contacts (clients, employees, or members) every day at 8 AM. It checks an Airtable base for any records where today matches the person's date of birth or anniversary, then sends a warm email via Gmail. Perfect for maintaining relationships without manual effort.
How It Works
- Schedule Trigger — Runs the workflow daily at 8 AM (no auth)
- Search Client — Queries Airtable for records where the
Date_of_BirthorAnniversaryfield matches today's month and day (API Key auth) - Check Available Dates — An IF node that verifies the record actually has a date in either field (no auth)
- No Operation, do nothing — A placeholder for records that don't have a date (false branch)
- Generate Subject & Body — A Code node that creates a custom subject line and message depending on whether it's a birthday or anniversary (no auth)
- Send Emails — Sends the email to the person's address using Gmail (OAuth2)
Node Details
- Schedule Trigger (No auth) — Configured to trigger at 8:00 AM every day. You can adjust the hour in the node settings.
- Search Client (API Key auth) — Uses an Airtable credential. The filter formula
=OR(AND({Date_of_Birth}, MONTH({Date_of_Birth})=MONTH(TODAY()), DAY({Date_of_Birth})=DAY(TODAY())), AND({Anniversary}, MONTH({Anniversary})=MONTH(TODAY()), DAY({Anniversary})=DAY(TODAY())))finds all records where either date matches today. - Check Available Dates (No auth) — Two conditions combined with AND:
Date_of_Birthis not empty ANDAnniversaryis not empty. This ensures the record has at least one date to work with. Records that pass go to the true branch; others go to the false branch (No Operation). - Generate Subject & Body (No auth) — JavaScript code that extracts the person's name, email, and dates. It compares today's month-day to the date fields and sets a subject like "🎂 Happy Birthday!" or "💍 Happy Anniversary!" along with a friendly message. The output includes the original data plus
subject,message, andsendTo. - Send Emails (OAuth2) — Uses a Gmail credential. Sends a plain text email to the recipient's email address with the generated subject and message. The
appendAttributionoption is disabled to keep the email clean.
Setup Instructions
- Airtable — Create a base with a table containing at least these fields:
Full Name(text),Email Address(email),Date_of_Birth(date),Anniversary(date). Populate with your contacts. - Airtable Credential — In n8n, create an Airtable credential using your API key (get it from your Airtable account settings).
- Gmail Credential — Create a Gmail OAuth2 credential in n8n. You'll need a Google Cloud project with the Gmail API enabled and the necessary redirect URIs configured.
- Update Node Parameters — Open the Search Client node and select your Airtable base and table. The filter formula is already set; you may need to adjust field names if they differ.
- Activate Workflow — Once everything is connected, toggle the workflow to active. It will run daily at 8 AM.
Use Cases & Variations
- Employee Recognition — Replace the email with a Slack message to a company channel for public recognition.
- Client Appreciation — Add a discount code or special offer in the email body.
- Multi‑channel — Combine with SMS (e.g., Twilio) for a more personal touch.
- Different Triggers — Change the schedule to run weekly or on specific days.
- Custom Templates — Modify the Code node to pull from a Google Doc or use HTML email formatting.
This workflow is easily adaptable to any scenario where you want to automatically celebrate important dates with your network.
6 nodesschedule triggerCRM
AirtableNo OpIFCodeGmail
Workflow JSON
{
"name": "Birthday / Anniversary Wishes",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"id": "8f60ab45-253a-437e-be95-f6a6b3e30799",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-760,
120
],
"typeVersion": 1.2
},
{
"parameters": {
"operation": "search",
"base": {
"__rl": true,
"value": "appPpy7OlMovX9FcB",
"mode": "list",
"cachedResultName": "SaaS Support Management",
"cachedResultUrl": "https://airtable.com/appPpy7OlMovX9FcB"
},
"table": {
"__rl": true,
"value": "tblakT5rEzqbW9m3v",
"mode": "list",
"cachedResultName": "Users",
"cachedResultUrl": "https://airtable.com/appPpy7OlMovX9FcB/tblakT5rEzqbW9m3v"
},
"filterByFormula": "=OR(\n AND(\n {Date_of_Birth},\n MONTH({Date_of_Birth}) = MONTH(TODAY()),\n DAY({Date_of_Birth}) = DAY(TODAY())\n ),\n AND(\n {Anniversary},\n MONTH({Anniversary}) = MONTH(TODAY()),\n DAY({Anniversary}) = DAY(TODAY())\n )\n)\n",
"options": {}
},
"type": "n8n-nodes-base.airtable",
"typeVersion": 2.1,
"position": [
-560,
120
],
"id": "b989b923-a660-4f4c-afb6-d94983cead97",
"name": "Search Client",
// ... truncated (copy to see full JSON)How to Import This Workflow
- 1Copy the workflow JSON above using the Copy Workflow JSON button.
- 2Open your n8n instance and go to Workflows.
- 3Click Import from JSON and paste the copied workflow.
Don't have an n8n instance? Start your free trial at n8nautomation.cloud