Newsletter Automation
A complete newsletter management system built on n8n and Google Sheets. Handles subscriber signups with double opt-in, automated welcome drip emails, broadcast sending, and daily analytics reports.
Problem
Running a newsletter manually means juggling signup forms, confirmation emails, welcome sequences, and broadcast sends across multiple tools. Most newsletter platforms charge per subscriber, and you lose control of your data.
This system gives you a free, self-hosted newsletter pipeline using n8n and Google Sheets.
What It Does
- 1. Double Opt-In Signup — Webhook receives signups, validates email, sends confirmation link, stores in Sheets
- Welcome Drip Sequence — Automatically sends Day 0 (welcome), Day 3 (tips), Day 7 (resources) emails
- Broadcast Sender — API-triggered broadcast to all confirmed subscribers with unsubscribe links
- Daily Analytics — Subscriber counts, growth metrics, confirmation rates, top sources
Included Workflows
| # | File | Purpose |
|---|
| 01 | INLINECODE0 | Webhook signup with validation, double opt-in, and Sheets storage |
| 02 |
02-welcome-sequence.json | Scheduled drip emails at Day 0, 3, and 7 |
| 03 |
03-broadcast-sender.json | Webhook-triggered broadcast to all confirmed subscribers |
| 04 |
04-subscriber-analytics.json | Daily metrics report email |
Architecture
CODEBLOCK0
Required n8n Credentials
| Credential Type | Used For | Placeholder in JSON |
|---|
| Google Sheets OAuth2 | Subscriber storage | INLINECODE4 |
| SMTP (Gmail or custom) |
All emails (confirmation, drip, broadcast, reports) |
YOUR_SMTP_CREDENTIAL_ID |
Environment Variables
CODEBLOCK1
Configuration Placeholders
| Placeholder | Description |
|---|
| INLINECODE6 | Google Sheet ID for subscriber data |
| INLINECODE7 |
n8n Google Sheets credential ID |
|
YOUR_SMTP_CREDENTIAL_ID | n8n SMTP credential ID |
|
YOUR_NOTIFICATION_EMAIL | Fallback admin email (also set via
NEWSLETTER_ADMIN_EMAIL env) |
|
YOUR_DOMAIN | Fallback domain (also set via
NEWSLETTER_BASE_URL env) |
Google Sheets Schema (Subscribers)
| Column | Type | Description |
|---|
| email | text | Primary key, subscriber email |
| name |
text | Subscriber name |
| status | text | pending / confirmed / unsubscribed |
| source | text | Where they signed up (website, landing-page, etc.) |
| subscribed_at | datetime | Signup timestamp |
| confirmed | boolean | Whether email is confirmed |
| token | text | Confirmation token |
| last
dripday | number | Last drip sent (0, 3, or 7) |
| last
dripat | datetime | When last drip was sent |
Quick Start
1. Prerequisites
- - n8n v2.4+ (self-hosted)
- Google Sheets OAuth2 credentials
- SMTP email credentials
2. Create Subscriber Sheet
Create a Google Sheet with the columns above. Name the sheet tab "Subscribers".
3. Import Workflows
Import all 4 JSON files into n8n. Replace all
YOUR_* placeholders.
4. Test Signup
CODEBLOCK2
5. Test Broadcast
CODEBLOCK3
Use Cases
- 1. Personal newsletters — Self-hosted alternative to Substack or ConvertKit
- Business newsletters — Weekly updates to customers with zero per-subscriber cost
- Product updates — Notify users about new features and releases
- Community newsletters — Manage subscriber lists for communities or organizations
- Content creators — Build an audience with automated drip sequences
Requirements
- - n8n v2.4+ (self-hosted recommended)
- Google Sheets OAuth2 credentials
- SMTP email credentials (Gmail, SES, or custom)
新闻通讯自动化
基于n8n和Google Sheets构建的完整新闻通讯管理系统。处理订阅者注册(含双重确认)、自动欢迎邮件序列、群发发送以及每日分析报告。
问题
手动运营新闻通讯意味着需要在多个工具之间切换处理注册表单、确认邮件、欢迎序列和群发发送。大多数新闻通讯平台按订阅者收费,而且你会失去对数据的控制权。
该系统使用n8n和Google Sheets为你提供一个免费、自托管的新闻通讯管道。
功能
- 1. 双重确认注册 — Webhook接收注册信息,验证邮箱,发送确认链接,存储到Sheets
- 欢迎邮件序列 — 自动发送第0天(欢迎)、第3天(技巧)、第7天(资源)邮件
- 群发发送器 — 通过API触发向所有已确认订阅者发送带退订链接的群发邮件
- 每日分析 — 订阅者数量、增长指标、确认率、主要来源
包含的工作流
| 编号 | 文件 | 用途 |
|---|
| 01 | 01-subscriber-signup.json | 带验证、双重确认和Sheets存储的Webhook注册 |
| 02 |
02-welcome-sequence.json | 在第0、3、7天定时发送滴灌邮件 |
| 03 | 03-broadcast-sender.json | 通过Webhook触发向所有已确认订阅者发送群发邮件 |
| 04 | 04-subscriber-analytics.json | 每日指标报告邮件 |
架构
注册表单(网站)
|
v
工作流01:订阅者注册
|
+-> 验证邮箱
+-> 保存到Google Sheets(状态:待确认)
+-> 发送确认邮件(双重确认)
+-> 返回成功响应
用户点击确认链接
|
v
更新Sheets(状态:已确认)
定时执行(每6小时):
|
v
工作流02:欢迎邮件序列
+-> 读取已确认订阅者
+-> 检查滴灌计划(第0/3/7天)
+-> 发送相应邮件
+-> 更新Sheets中的lastdripday
API触发:
|
v
工作流03:群发发送器
+-> 验证请求和认证
+-> 获取已确认订阅者
+-> 向每位订阅者发送群发邮件
+-> 包含退订链接
每日计划:
|
v
工作流04:订阅者分析
+-> 读取所有订阅者
+-> 计算指标(总数、增长、比率)
+-> 向管理员发送邮件报告
所需的n8n凭证
| 凭证类型 | 用途 | JSON中的占位符 |
|---|
| Google Sheets OAuth2 | 订阅者存储 | YOURGOOGLESHEETSCREDENTIALID |
| SMTP(Gmail或自定义) |
所有邮件(确认、滴灌、群发、报告) | YOUR
SMTPCREDENTIAL_ID |
环境变量
bash
必需
NEWSLETTER
ADMINEMAIL=admin@yourbusiness.com
NEWSLETTER
BASEURL=https://yourdomain.com
NEWSLETTER_SECRET=your-broadcast-api-secret
配置占位符
| 占位符 | 描述 |
|---|
| YOURSUBSCRIBERSSHEETID | 订阅者数据的Google Sheet ID |
| YOURGOOGLESHEETSCREDENTIAL_ID |
n8n Google Sheets凭证ID |
| YOUR
SMTPCREDENTIAL_ID | n8n SMTP凭证ID |
| YOUR
NOTIFICATIONEMAIL | 备用管理员邮箱(也可通过NEWSLETTER
ADMINEMAIL环境变量设置) |
| YOUR
DOMAIN | 备用域名(也可通过NEWSLETTERBASE_URL环境变量设置) |
Google Sheets架构(订阅者)
| 列名 | 类型 | 描述 |
|---|
| email | 文本 | 主键,订阅者邮箱 |
| name |
文本 | 订阅者姓名 |
| status | 文本 | 待确认 / 已确认 / 已退订 |
| source | 文本 | 注册来源(网站、落地页等) |
| subscribed_at | 日期时间 | 注册时间戳 |
| confirmed | 布尔值 | 邮箱是否已确认 |
| token | 文本 | 确认令牌 |
| last
dripday | 数字 | 最后发送的滴灌天数(0、3或7) |
| last
dripat | 日期时间 | 最后发送滴灌邮件的时间 |
快速开始
1. 前提条件
- - n8n v2.4+(自托管)
- Google Sheets OAuth2凭证
- SMTP邮件凭证
2. 创建订阅者表格
创建一个包含上述列的Google Sheet。将工作表标签命名为Subscribers。
3. 导入工作流
将所有4个JSON文件导入n8n。替换所有YOUR_*占位符。
4. 测试注册
bash
curl -X POST https://your-n8n.com/webhook/newsletter/signup \
-H Content-Type: application/json \
-d {email: test@example.com, name: Test User, source: api-test}
5. 测试群发
bash
curl -X POST https://your-n8n.com/webhook/newsletter/broadcast \
-H Content-Type: application/json \
-d {
_secret: your-newsletter-secret,
subject: Test Broadcast,
content:
This is a test broadcast.
}
使用场景
- 1. 个人新闻通讯 — Substack或ConvertKit的自托管替代方案
- 企业新闻通讯 — 零订阅者成本的客户每周更新
- 产品更新 — 通知用户新功能和版本发布
- 社区新闻通讯 — 管理社区或组织的订阅者列表
- 内容创作者 — 通过自动滴灌序列建立受众群体
要求
- - n8n v2.4+(推荐自托管)
- Google Sheets OAuth2凭证
- SMTP邮件凭证(Gmail、SES或自定义)