ZAM

Replacing Mailchimp with a Newsletter We Own

Mailchimp sells segmentation, A/B testing, and a drag-and-drop builder. We only ever used a subscriber list and a send button, so we built those two things and let the subscription go.

The bill

Email marketing platforms like Mailchimp and ConvertKit sell you a lot more than "send an email." Audience segmentation, A/B testing on subject lines, a drag-and-drop template builder, behavioral automation flows that trigger off clicks and opens, and an analytics dashboard to watch all of it. The price scales with your list size, so the bill climbs every time someone new signs up, whether or not you ever touch half of what you're paying for. Everyone pays it anyway because building your own feels like a project, not a task.

What we actually used

Almost nobody uses the whole product, and we didn't either. Strip it down and we were using exactly two things: a list of people who had confirmed they wanted to hear from us, and a way to send them one email when something new went out. That's it. No segments, no automation flows, no subject line testing. The product was built for ten jobs and we were only ever doing two of them. That gap is the whole reason this was worth owning.

How we built it

Subscribers are records in the same Airtable base that runs the rest of the business, not a separate audience tool. Each one has a Status field, Confirmed is the only status that gets emailed, and its own Token for a personal, working unsubscribe link. Someone signs up, gets a confirmation email with a one-click link, and only flips to Confirmed once they click it. That double opt-in step is the only thing standing between a sign-up form and your actual mailing list.

A daily Vercel cron function checks whether today's auto-drafted blog post landed, and if it did, it builds a short digest, subject line, a one-paragraph summary of what's new, and a link, and sends it through Resend to every confirmed subscriber. The function is fail-closed behind a bearer-token check against CRON_SECRET, so a missing secret refuses every caller instead of quietly leaving the door open.

The part that actually matters is the idempotency: a flag in the same database records the date the newsletter last went out, and the function refuses to send again for that date unless you force it. That one flag is the difference between "sent once" and "sent to the whole list twice because a cron fired twice." There's also a dry-run mode that reports exactly who would get emailed without sending anything, which is how we test changes without finding out the hard way.

Every email carries our mailing address and a working unsubscribe link baked into the template, both required by law and both things a vendor used to handle for us without us thinking about it. The send loop pauses 700 milliseconds between emails, a small, deliberate throttle so a sudden spike in subscriber count doesn't trip another provider's rate limit.

The trade-offs

Two of these are real, and pretending otherwise would not be honest.

  • There is no segmentation. Every confirmed subscriber gets the same email. If you need to send different content to different groups, this does not do that, and building it would be real engineering, not a setting.
  • There is no open-rate or click-rate dashboard. We are not tracking who opened what. A marketing team that lives by those numbers would feel that loss immediately.
  • The mailing address requirement is a safety feature, but it looks like a bug the first time you hit it: forget to set the address in config and the newsletter silently refuses to send that day rather than going out without it.

What we would still pay for

If you run real segments, multiple lists, drip sequences, or you're actively testing subject lines against each other, keep paying for Mailchimp or ConvertKit. That's genuine software solving a genuinely different problem than ours. The same goes if marketing, not engineering, owns your email program day to day; a visual builder and a dashboard are worth real money to a non-technical team.

What changed for us wasn't really the subscription fee. It's that the subscriber list, the send history, and the confirmation flow all live in the same base as everything else we run, instead of behind a vendor's login with its own export format the day we'd want to leave. This is one of the 21 subscriptions we've replaced this way, while rebuilding the operating system for a roughly 200-employee business across 16 departments, now running on 25+ AI agents and $0 ongoing software cost. Knowing which tools to kill is the same skill as knowing which ones to keep. This one, for how we tell people we published something, we didn't need to keep renting.

Frequently asked questions

What does Mailchimp actually sell beyond sending an email?
Audience segmentation, A/B testing on subject lines, a drag-and-drop template builder, behavioral automation flows triggered off clicks and opens, and an analytics dashboard, priced on list size so the bill climbs as the list grows.
What is the minimum a small business actually needs from a newsletter tool?
Two things: a list of subscribers who confirmed they want to hear from you, and a way to send them one email when something new goes out. Everything else in a typical email marketing platform is built for jobs most small teams never do.
How do you stop a newsletter from accidentally sending twice?
A flag in the same database records the date the newsletter last went out, and the send function refuses to run again for that date unless forced. That single flag is what prevents a duplicate cron trigger from emailing the whole list twice.
Is a physical mailing address legally required in a marketing email?
Yes. The FTC's CAN-SPAM Act requires every commercial email to include a valid physical postal address and a working opt-out mechanism. A self-built sender has to implement both explicitly instead of getting them from a vendor by default.
When should a business keep paying for Mailchimp or ConvertKit instead of building its own sender?
If you run real audience segments, multiple lists, drip sequences, or actively test subject lines against each other, or if marketing rather than engineering owns the email program day to day, a vendor's visual builder and dashboard are worth paying for.