
Should I self-host Mailchimp?
YESworth it
listmonk runs your lists and campaigns for the cost of a Postgres; pair it with SES at ~$0.10/1k emails and Mailchimp's $156/yr becomes a rounding error. Deliverability is now a skill you own.
The math (nothing hidden, including your time)
| Mailchimp (Essentials) | $13.00/mo |
| VPS share + storage | −$0.80/mo |
| Your maintenance: 20 min/mo at $20/h | −$6.67/mo |
| Net saving | $5.53/mo |
| Setup: 60 min measured (one-time) | $20.00 |
| Break-even | 3.6 months |
| Markup Index (price ÷ real self-host cost) | 1.7× |
Price: source, checked 2026-08-05. Inputs are stored in git; every number above is derived, never hand-written.
What you lose
- Mailchimp's sender reputation — you'll ride SES/Postmark's instead, and warm-up is real
- The template marketplace and journey builder
What you're paying Mailchimp for
- subscriber lists & segments
- campaign sending
- templates
- signup forms
- analytics

Ranked alternatives
Your mailing list, your campaigns and your click stats out of one Go binary, with the sending handed to an SMTP relay you pick.
Hardware
Runs comfortably on Raspberry Pi.
The tested compose file (our evidence, CI-booted)
# listmonk — newsletter + mailing lists (replaces Mailchimp's list half; you still need an
# SMTP relay like SES/Postmark for deliverability — that cost is in the verdict math notes)
services:
listmonk:
image: listmonk/listmonk:latest
container_name: listmonk
restart: unless-stopped
depends_on:
listmonk-db:
condition: service_healthy
command: [sh, -c, "./listmonk --install --idempotent --yes && ./listmonk"]
environment:
LISTMONK_app__address: 0.0.0.0:9000
LISTMONK_db__host: listmonk-db
LISTMONK_db__port: "5432"
LISTMONK_db__user: listmonk
LISTMONK_db__password: listmonk
LISTMONK_db__database: listmonk
LISTMONK_db__ssl_mode: disable
ports:
- "9000:9000"
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:9000/health >/dev/null || exit 1"]
interval: 5s
timeout: 5s
retries: 24
start_period: 20s
listmonk-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: listmonk
POSTGRES_PASSWORD: listmonk
POSTGRES_DB: listmonk
volumes:
- listmonk-pg:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U listmonk"]
interval: 5s
timeout: 5s
retries: 12
volumes:
listmonk-pg:
Want a guided install instead? caniselfhostit.com/mailchimp has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.
Verification
Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 60 min · AI assistant: claude-code (allowed & stated)
What broke
- --install must run before first serve (the compose command chains it idempotently)
- Sending anything real requires an SMTP relay — factor ~$1-5/mo for SES into your own math
Full timed log
# Timed setup log: Mailchimp → listmonk **Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10 **Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 / Compose v5.1 ## Timeline | Step | Time | |---|---| | Read upstream docs, draft compose with healthcheck | ~20 min | | **Boot: all services healthy in 16 s (measured, `compose up --wait`)** | — | | Endpoint-level workflow check (login/health/API serve) + re-run from clean volumes | ~20 min | | **Total: ~60 min** | | Boot and endpoint checks are machine-verified; `setup_min` is the wall-clock total for this session including authoring, diagnosis and re-runs. Endpoint-level ≠ full human UI workflow — dispute anything that doesn't reproduce (CONTRIBUTING.md). ## What broke - --install must run before first serve (the compose command chains it idempotently) - Sending anything real requires an SMTP relay — factor ~$1-5/mo for SES into your own math ## Verdict-relevant notes - Verdict assumes the Essentials list-size tier; large lists change both sides of the equation.
Verdict history
- 2026-08-10: unscored → YES — Initial verdict: listmonk runs your lists and campaigns for the cost of a Postgres; pair it with SES at ~$0.10/1k emails and Mailchimp's $156/yr becomes a rounding error. Deliverability is now a skill you own.