Mailcow After Week One: The Real Bill for Self-Hosted Email at a 10-Person Shop
The pitch for self-hosted email is simple: pay $12 a month for a VPS, install Mailcow, and kiss Google Workspace goodbye. We wanted to know what that pitch looks like after the first week, when the DNS records are set and the novelty wears off. So we moved a 10-person shop in the Midwest off Google Workspace and ran Mailcow for 60 days. We tracked every hour, every invoice, and every weird deliverability hiccup. This is not a migration guide. It is a bill of materials for the version of self-hosted email that happens after week one.
The Setup: A $12 VPS and a Lot of DNS
The shop had 10 mailboxes, shared calendars, and a habit of forwarding invoices. We used Mailcow on a 2 vCPU/4GB VPS in a US datacenter. Cash cost: $12/mo. We added Backblaze B2 for restic backups at $5/mo, and reused an existing Uptime Kuma instance for monitoring. SPF, DKIM, DMARC, rDNS, and a clean IP were table stakes. The first surprise: the IP that came with the cheap VPS had a mediocre reputation. We spent two days checking blocklists and requesting delisting from one. That was free in cash and expensive in time.
Deliverability: Gmail and Outlook Have Different Personalities
We sent 300 controlled test messages over 60 days to Gmail and Outlook accounts, mixing plain text, PDF attachments, and links. After warmup, Gmail put 93% in the inbox, 5% in spam, and lost 2% entirely. Outlook was less forgiving: 88% inbox, 9% spam, 3% missing. Week one was worse: Gmail inbox rate was 74% before we fixed a missing DKIM selector and slowed our sending. The lesson is not that Mailcow cannot deliver. It is that deliverability is a reputation product, and a $12 VPS does not come with a reputation manager. We also learned that Microsoft's filtering does not care that you followed all the guides. It wants consistency, low complaint rates, and time.
Spam: The False Positive Tax
Inbound volume was about 1,200 messages over 60 days. Rspamd caught the obvious junk, but we logged 37 false positives, roughly 3.1% of legitimate mail. Most were invoices, one was a signed PDF from a vendor, and two were newsletters the owner actually read. Tuning took 4.5 hours: adjusting scores, whitelisting a domain, and turning off greylisting for one forwarder that delayed time-sensitive quote requests. Greylisting was effective, but it made the shop look slow to customers. If you run Mailcow, budget for spam tuning as a recurring chore, not a one-time checkbox.
Backups and Restore: The 2 a.m. Test
Backups are where free email gets honest. We ran nightly restic backups to B2. The Mailcow volume was 22GB after two months. A full restore to a fresh VPS took 38 minutes, including DNS cutover and a final mail queue check. That is a good number, but it only happened because we tested it. The first restore attempt failed because we had backed up the mail store but not the Mailcow config volume. We fixed the script and added a monthly restore drill. Cash cost: $5/mo. Time cost: 3 hours to build and verify, plus 45 minutes per drill. If nobody owns that drill, the backup is a rumor.
The Admin Tax
We logged 11.5 hours of admin time in the first two weeks: migration, DNS, user password resets, mobile sync issues, and one Outlook profile that refused to autodiscover. After that, it settled to about 2.3 hours per week. Add 4.5 hours of spam tuning and 3 hours of backup work, and month one landed near 18 hours. Month two was 9.2 hours. At an internal rate of $75/hour, that is about $1,350 in month one and $690 in month two. Cash costs stayed at $17/mo. Google Workspace for 10 users was around $70/mo on the plan the shop used. On a cash basis, Mailcow wins easily. On an owner-time basis, the math depends on whether those hours come out of billable work, family time, or sleep.
| Item | Month 1 | Month 2 |
|---|---|---|
| VPS | $12 | $12 |
| Backup storage | $5 | $5 |
| Migration labor | 9 hrs | 0 |
| Tuning and restore testing | 6.5 hrs | 3 hrs |
| Ongoing admin | 2.3 hrs/wk | 2.3 hrs/wk |
| Cash total | $17 | $17 |
| Labor at $75/hr | $1,350 | $690 |
What We'd Do Differently
Use a VPS provider with a known-good IP and a reputation dashboard. Set up DMARC reporting before the migration, not after. Move shared calendars last, because that is where users get loud. And write the restore script before the first mailbox exists.
The Bottom Line
Mailcow is real software. It worked for 60 days, delivered most mail, and cost $17 a month in cash. It also demanded about 18 hours in month one and 9 hours in month two. For a 10-person shop, that is not free. It is a trade: subscription dollars for owner hours and operational risk. If you have a tinkerer who enjoys DNS and has a restore drill, self-hosted email can pencil out. If your idea of a good weekend is not debugging autodiscover, Google Workspace is still the cheaper bill in the way that matters.