Newsletter Automation
Complete newsletter management system with subscriber signup (double opt-in), automated welcome drip sequence, broadcast sender, and subscriber analytics. 4...
Description
name: newsletter-automation description: Complete newsletter management system with subscriber signup (double opt-in), automated welcome drip sequence, broadcast sender, and subscriber analytics. 4 production-ready n8n workflows with Google Sheets backend. tags: [newsletter, email, subscribers, drip, automation, marketing, n8n, google-sheets] author: mhmalvi version: 1.2.0 license: CC BY-NC-SA 4.0 metadata: clawdbot: emoji: "\U0001F4EC" requires: n8nCredentials: [google-sheets-oauth2, smtp] env: [NEWSLETTER_ADMIN_EMAIL, NEWSLETTER_BASE_URL, NEWSLETTER_SECRET] os: [linux, darwin, win32]
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
- 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 | 01-subscriber-signup.json |
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
Signup Form (website)
|
v
Workflow 01: Subscriber Signup
|
+-> Validate email
+-> Save to Google Sheets (status: pending)
+-> Send confirmation email (double opt-in)
+-> Return success response
User clicks confirmation link
|
v
Update Sheets (status: confirmed)
Scheduled (every 6 hours):
|
v
Workflow 02: Welcome Drip Sequence
+-> Read confirmed subscribers
+-> Check drip schedule (Day 0/3/7)
+-> Send appropriate email
+-> Update last_drip_day in Sheets
API Trigger:
|
v
Workflow 03: Broadcast Sender
+-> Validate request + auth
+-> Fetch confirmed subscribers
+-> Send broadcast email to each
+-> Include unsubscribe link
Daily Schedule:
|
v
Workflow 04: Subscriber Analytics
+-> Read all subscribers
+-> Calculate metrics (total, growth, rates)
+-> Email report to admin
Required n8n Credentials
| Credential Type | Used For | Placeholder in JSON |
|---|---|---|
| Google Sheets OAuth2 | Subscriber storage | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
| SMTP (Gmail or custom) | All emails (confirmation, drip, broadcast, reports) | YOUR_SMTP_CREDENTIAL_ID |
Environment Variables
# Required
NEWSLETTER_ADMIN_EMAIL=admin@yourbusiness.com
NEWSLETTER_BASE_URL=https://yourdomain.com
NEWSLETTER_SECRET=your-broadcast-api-secret
Configuration Placeholders
| Placeholder | Description |
|---|---|
YOUR_SUBSCRIBERS_SHEET_ID |
Google Sheet ID for subscriber data |
YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
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 |
|---|---|---|
| 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_drip_day | number | Last drip sent (0, 3, or 7) |
| last_drip_at | 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
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. Test Broadcast
curl -X POST https://your-n8n.com/webhook/newsletter/broadcast \
-H "Content-Type: application/json" \
-d '{
"_secret": "your-newsletter-secret",
"subject": "Test Broadcast",
"content": "<p>This is a test broadcast.</p>"
}'
Use Cases
- 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)
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!