TUTORIAL 2
😃

Holiday Joke & Fact Convo Starter

Sends a daily Christmas joke and interesting fact from a Google Sheet. Perfect for cheesy dad jokes your kids will love and conversation starters at holiday gatherings.

Video thumbnail
Watch the Walkthrough

Workflow Overview

Schedule
Config
Xmas Fields
Google Sheets
Filter
Gmail

This workflow builds on the countdown bot, adding Google Sheets integration to pull a joke and fact for each day. It filters the sheet data to match the current countdown day, then sends a beautifully styled HTML email.

📋

Step-by-Step Guide

1

Duplicate the Countdown Bot

Start by duplicating your Holiday Countdown workflow. Rename it to something like "Joke Facts Bot". Make sure is_test is set to true in Config for testing.

2

Add Xmas Fields Node

After Resolve Dates, add an "Edit Fields" node called "Xmas Fields". Create xmasDay (number: 25) and daysUntilXmas using the expression {{ $json.xmasDay - $json.currentDay }}.

3

Connect Google Sheets

Add a Google Sheets node. Select "Get Rows" operation. Connect your Google account, paste the spreadsheet URL, and select the sheet. This pulls all rows from your joke/fact sheet.

4

Add Filter Node

Add a Filter node to match the current day. Compare days_until_xmas (from sheet) equals daysUntilXmas (from Xmas Fields). Use number comparison, not string!

5

Structure Your Spreadsheet

Key insight: Put joke AND fact on the same row. Columns: days_until_xmas, joke, fact, fact_source. This ensures Filter returns ONE item, so Gmail sends ONE email.

6

Style Your Email

Update the Gmail node. Set type to HTML. Use an LLM to generate festive HTML/CSS, then paste expressions for {{ $json.joke }}, {{ $json.fact }}, and {{ $json.fact_source }}.

7

Dynamic Subject Line

Make the subject dynamic so each email is unique. Use an expression like {{ $("Xmas Fields").item.json.daysUntilXmas }} days to go! to show the countdown in the subject.

8

Test & Go Live

Test with different test_day values (try 15, 24, 25). Verify you get one email with both joke and fact. Set is_test to false and activate!

💻

The Code

{{ $json.xmasDay - $json.currentDay }}
{{ $json.days_until_xmas }} = {{ $('Xmas Fields').item.json.daysUntilXmas }}
{{ $('Xmas Fields').item.json.daysUntilXmas }} days to go!
{{ $json.joke }}
💡

Key Concepts

📬 Item Processing

Nodes process EACH item passed to them. 2 items = 2 emails. Structure data to return 1 item when you want 1 action.

🐫 Naming Conventions

Use camelCase for n8n variables, snake_case for external data (sheets). Helps identify data source when debugging.

🔍 Filter Node

Compares values to keep only matching items. Use number comparison (not string) when comparing numeric values.

📊 Spreadsheet Design

Structure matters! One row per day with all data keeps your workflow simple and ensures single-item output.

🎨 HTML Emails

Set email type to HTML. Use an LLM to generate styled templates, then insert n8n expressions for dynamic content.

You've completed this walkthrough!

Explore more holiday automations to level up your n8n skills.

Back to All Walkthroughs