# Send daily product newsletters with Gmail: n8n workflow

> Started by another system calling it, and works across Gmail and Google Sheets. 30 steps, 4 branches: large, and worth reading before you trust it with...

Source: https://millionrounds.com/workflow/send-daily-product-newsletters-with-gmail (Millionrounds; every figure on the page links to its filing or article)

[Automation library](https://millionrounds.com/workflows) · [Content](https://millionrounds.com/workflows?category=Content#library)

# Send daily product newsletters with Gmail

Started by another system calling it, and works across Gmail and Google Sheets. 30 steps, 4 branches: large, and worth reading before you trust it with anything live.

Large

[Download free](https://millionrounds.com/login?next=%2Fapp%2Fworkflow%2Fsend-daily-product-newsletters-with-gmail)

**30 steps** Large: read it before trusting it with anything live

**4** Branches: places the flow splits

**0** Loops or waits

**2** Services it connects to

## The flow

Starts it 6 Logic 13 Service 11

The steps in the order they run, from what starts it.

- 1 **Daily at 08:00** Schedule trigger *Starts it*
- 2 **Tracker Webhook** Webhook *Starts it*
- 3 **⚙️ Config** Code *Logic*
- 4 **⚙️ Config (Tracker)** Code *Logic*
- 5 **Read Products** Google Sheets *Service*
- 6 **Check Event Type** Switch *Logic*
- 7 **Filter by Today** Code *Logic*
- 8 **Log Open Event** Google Sheets *Service*
- 9 **Read Recent Clicks** Google Sheets *Service*
- 10 **Read Unsubscribed (Dedup)** Google Sheets *Service*
- 11 **Products Found?** If *Logic*
- 12 **Return Tracking Pixel** Respond To Webhook *Starts it*
- 13 **Dedup Check** Code *Logic*
- 14 **Dedup Check (Unsub)** Code *Logic*
- 15 **Log Newsletter Contents** Google Sheets *Service*
- 16 **Build HTML Email** Code *Logic*
- 17 **Is Duplicate?** If *Logic*
- 18 **Is Duplicate Unsub?** If *Logic*
- 19 **Read Recipients** Google Sheets *Service*
- 20 **Read Unsubscribed** Google Sheets *Service*
- 21 **Redirect (Bot)** Respond To Webhook *Starts it*
- 22 **Log Click Event** Google Sheets *Service*
- 23 **Return Unsubscribe Confirmation** Respond To Webhook *Starts it*
- 24 **Log Unsubscribe** Google Sheets *Service*
- 25 **Merge Recipients + Unsubscribed** Merge *Logic*
- 26 **Redirect to Product URL** Respond To Webhook *Starts it*
- 27 **Filter Active Recipients** Code *Logic*
- 28 **Personalize per Recipient** Code *Logic*
- 29 **Send Newsletter** Gmail *Service*
- 30 **Log Send Event** Google Sheets *Service*

## How it's built

- **Starts on:** Another system calling it
- **Steps:** 30, with 4 branches
- **Size:** Large: read it before trusting it with anything live
- **Connects to:** Gmail, Google Sheets
- **Model:** None. This is plumbing, not judgement

## Questions

What does it need to run?

An n8n account, plus your own Gmail and Google Sheets accounts. You connect your own accounts after importing it; none are included.

What starts it?

It starts on another system calling it.

Does it use AI?

No. Every step is fixed logic or a call to a service, so it does the same thing every time.

How long does it take to set up?

Take your time. At 30 steps it is large: read it before trusting it with anything live.

How do I import it?

Copy the workflow, open a new workflow in n8n and paste. The steps appear on the canvas, ready for your own accounts.

**Before you run it**

Nothing here has been tested by us. It is somebody's working automation, read and described from its own steps. Treat the connections it wants as a list of accounts it will touch, and read the 30 steps before you point it at anything that matters.

## Run it in n8n

- **Create your n8n account** Free to start. n8n is where the workflow runs. [Create an n8n account ↗](https://millionrounds.com/n8n)
- **Download the workflow** Free with a Millionrounds account. [Download free](https://millionrounds.com/login?next=%2Fapp%2Fworkflow%2Fsend-daily-product-newsletters-with-gmail)
- **Paste it into n8n** Open a new workflow in n8n and paste. Then connect your own accounts.

Stored with the author's traces removed: canvas notes, instance identifiers, saved credential names and any live document they had left behind.

## Connects to

Each opens the other workflows that use it.

[Gmail](https://millionrounds.com/workflows?service=Gmail#library)[Google Sheets](https://millionrounds.com/workflows?service=Google+Sheets#library)

## Workflows like it

Also content, with the same services where possible, closest in size first.

- [**Generate SEO blog posts with Claude and Google Docs** 30 steps · Google Drive, Google Sheets](https://millionrounds.com/workflow/generate-seo-blog-posts-with-claude-and-google-docs)
- [**AI-powered blog post promoter for Instagram, Facebook & X** 30 steps · calls a model · Gmail, Google Sheets](https://millionrounds.com/workflow/ai-powered-blog-post-promoter-for-instagram-facebook-and-x)
- [**AI-powered blog: auto WordPress publish with Pexels** 30 steps · calls a model · Google Sheets, WordPress](https://millionrounds.com/workflow/ai-powered-blog-auto-wordpress-publish-with-pexels)
- [**Draft and track incident postmortems with OpenAI** 30 steps · calls a model · Discord, Gmail](https://millionrounds.com/workflow/draft-and-track-incident-postmortems-with-openai-2)
- [**Generate SEO-optimized WordPress blogs with Gemini and Tavily** 30 steps · calls a model · Google Sheets, Telegram](https://millionrounds.com/workflow/generate-seo-optimized-wordpress-blogs-with-gemini-and-tavil)
- [**Generate Sora v2 ASMR clips with OpenAI and Cloudinary** 30 steps · calls a model · Google Sheets](https://millionrounds.com/workflow/generate-sora-v2-asmr-clips-with-openai-and-cloudinary)
