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

  1. Schedule Trigger — Runs the workflow daily at 8 AM (no auth)
  2. Search Client — Queries Airtable for records where the Date_of_Birth or Anniversary field matches today's month and day (API Key auth)
  3. Check Available Dates — An IF node that verifies the record actually has a date in either field (no auth)
  4. No Operation, do nothing — A placeholder for records that don't have a date (false branch)
  5. 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)
  6. 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_Birth is not empty AND Anniversary is 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, and sendTo.
  • 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 appendAttribution option is disabled to keep the email clean.

Setup Instructions

  1. 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.
  2. Airtable Credential — In n8n, create an Airtable credential using your API key (get it from your Airtable account settings).
  3. 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.
  4. 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.
  5. 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

  1. 1Copy the workflow JSON above using the Copy Workflow JSON button.
  2. 2Open your n8n instance and go to Workflows.
  3. 3Click Import from JSON and paste the copied workflow.

Don't have an n8n instance? Start your free trial at n8nautomation.cloud

Ready to automate with n8n?

Get affordable managed n8n hosting with 24/7 support.