Listmonk
Self-hosted newsletter and mailing list manager — unlimited subscribers, no per-send fees, full data ownership.
Listmonk is a high-performance, self-hosted newsletter and mailing list manager. Unlike SaaS tools (Mailchimp, ConvertKit), there are no per-subscriber fees — you own the data and pay only for the SMTP relay.
What you get
- Unlimited subscribers and lists
- Visual template editor with HTML/plaintext support
- Campaign analytics (opens, clicks, bounces)
- Double opt-in, segments, and subscriber attributes
- REST API for programmatic management
- Bounce and complaint handling
Requirements
| Resource | Minimum | Included on Newsletter plan |
|---|---|---|
| RAM | 1 GB | 1 GB (Plus: dedicated) |
| Storage | 5 GB | 5 GB (Plus: 10 GB) |
| PostgreSQL | Included | Managed for you |
You also need an SMTP relay for sending. Listmonk doesn't send directly — it routes through your ESP.
Install
Deploy from the installer
Control panel → App installer → Listmonk. Assign a domain (e.g.
news.yourdomain.com). Provisioning takes about a minute.Log in
Visit
https://news.yourdomain.com. The admin credentials appear in your control panel after install. Change the password immediately.Configure SMTP
Go to Settings → Messengers → SMTP and enter your relay credentials:
Field Example (Resend) Example (Amazon SES) Host smtp.resend.comemail-smtp.eu-west-1.amazonaws.comPort 465587Auth Login Login Username resendSES SMTP username Password API key SES SMTP password TLS Force TLS STARTTLS Click Test connection to verify before saving.
Add DNS authentication
For good deliverability, add these DNS records (your ESP provides exact values):
- SPF — TXT record including your ESP's sending servers
- DKIM — TXT or CNAME record for message signing
- DMARC —
v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com
Create your first list
Go to Lists → Create list. Set a name, type (public or private), and opt-in mode (double recommended for compliance).
Sending your first campaign
Create a template
Campaigns → Templates → Create. Use the visual editor or paste HTML. Include
{{ .Subscriber.Email }}and an unsubscribe link ({{ .UnsubscribeURL }}).Import subscribers
Subscribers → Import. Upload a CSV with columns:
email,name,attributes(JSON). Or use the API for programmatic subscribe.Compose and send
Campaigns → Create campaign. Choose template, subject line, target lists. Preview, send a test to yourself, then launch.
SMTP providers compared
| Provider | Best for | Free tier | Cost at 50K emails/mo |
|---|---|---|---|
| Resend | Simplicity, great DX | 3,000/mo | ~$20/mo |
| Amazon SES | Cheapest at volume | 62K/mo (EC2) | ~$5/mo |
| Postmark | Transactional mail | 100/mo | ~$50/mo |
| Mailgun | Flexible, good EU support | 5,000/mo (trial) | ~$35/mo |
Listmonk supports multiple SMTP providers simultaneously — route transactional through one and campaigns through another.
Subscriber management
- Segments — filter by attributes (country, signup date, custom fields)
- Double opt-in — sends a confirmation email before adding to list
- Blocklist — permanently remove addresses (GDPR-compliant deletion)
- Webhooks — trigger external systems on subscribe/unsubscribe events
Bounce handling
Configure your ESP to forward bounce notifications back to Listmonk via webhook. This automatically:
- Marks hard bounces as blocklisted
- Tracks soft bounces and retries
- Keeps your list clean and reputation high
Analytics
The dashboard shows per-campaign:
- Send count, delivery rate
- Open rate (via tracking pixel)
- Click-through rate (via link wrapping)
- Bounce and complaint counts
- Unsubscribe rate
Disable tracking if you prefer privacy-first (turns off open/click tracking but keeps delivery metrics).
Backups
Daily automated backups cover the database (subscribers, campaigns, templates) and app configuration. Restore from the panel's Backups screen.
Troubleshooting
| Issue | Fix |
|---|---|
| Emails not sending | Check SMTP config; verify port not blocked; test connection in settings |
| High bounce rate | Clean list before import; enable double opt-in; check SPF/DKIM |
| Slow campaign sending | Increase concurrency in Settings → Performance; upgrade plan for more RAM |
| Subscribers not confirming | Check spam folder; verify From address has valid SPF/DKIM |
| API returns 401 | Regenerate API token in Settings → API |