Install
openclaw skills install newsletter-automationComplete 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.
openclaw skills install newsletter-automationA 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.
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.
| # | 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 |
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
| 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 |
# Required
NEWSLETTER_ADMIN_EMAIL=admin@yourbusiness.com
NEWSLETTER_BASE_URL=https://yourdomain.com
NEWSLETTER_SECRET=your-broadcast-api-secret
| 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) |
| 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 |
Create a Google Sheet with the columns above. Name the sheet tab "Subscribers".
Import all 4 JSON files into n8n. Replace all YOUR_* placeholders.
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"}'
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>"
}'