marketing-content
Mailchimp logo

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-even3.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
listmonk running from the boot-verified compose file
listmonk, running from the compose file on this page — screenshot from our verified instance, not marketing material.

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.

knadh/listmonk · ★ 22,699 · last commit 0d ago · AGPL-3.0

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.