From MailChimp to Sendy – how I saved $2,400/year on my email list

From MailChimp to Sendy – how I saved $2,400/year on my email list

UPDATE: In Sendy 3 they have added list segmentation!


I absolutely love MailChimp but as my email list starts to grow, I'm finding the monthly payment too expensive. With a list of my size, I was paying about $2500 per year. Since I don't send out a regular or weekly email, I was pretty much paying $200+ a month to hold onto email addresses.

After a listen to this codepen radio podcast on how they use a transactional email provider to send their emails, I went looking for other solutions.

This is when I stumbled upon Sendy - a self-hosted PHP-based solution that is just the right amount of work to replace my MailChimp needs all together. It works by hooking into Amazon's SES (or another transactional email provider like SendGrid or Madrill via SMTP) to send your emails out. You pay $65 once for Sendy and then $1 per 10,000 emails sent via SES.

So - I decided to give it a shot. It's far from a perfect replacement for a heavy MailChimp user, but for someone who is somewhat technical and knows a little bit about email, it's totally worth putting a few hours into getting it setup.


Sendy isn't a service - it's just a codebase that you run yourself on your own server - kind of like running your own WordPress. You'll need your own PHP server for this - I run mine on a cheap Bluehost account.

The setup was really easy, just like WordPress you put your username, password and database info into a config file.Then, they have little popups telling you what to do next and how to get Amazon SES setup. The only snag I hit was setting up a cron task to check for emails to send every 5 mins, It wasn't in the instructions but this page details how to do it on most hosts with cpanel.

List Size

Your server doesn't actually do the sending of the email - it pings the SES API and let's amazon send the email. This is crucial for your emails actually showing up in users inbox rather than getting marked as spam.

By default amazon gives you 200 emails per day for free. You have to request more sending space - I asked for 20,000 / day and they gave me 50,000. If you have a need for more than that, Amazon will increase it once you have proven you have a low bounce + spam reporting rate. I've heard it needs to be less than 1% which should be easy to hit if you are following all email newsletter best practices.

Editing the code

Another good/bad things about this is that you can edit the code. There were a few spots where I wanted to customize the dashboard with a daily tally of signups - this was easy enough to do by cracking open the codebase and making a few changes myself. The code is pretty simple, but feels crufty.

API Endpoints

When replacing MailChimp, I had to swap out all my ajax endpoints from hitting MailChimp to my own. Sendy has an API to do this, but it doesn't support JSON, JSONP or CORS in addition to just spitting out a plaintext response. This is a problem if you want to use JavaScript to hit the API endpoint. A quick fix of adding header("Access-Control-Allow-Origin: *"); at the top of the subscribe php file fixed this and allowed me to do cross-domain API calls.


The last, and probably most important thing is that there is no service making sure your data is safe from server crashes. If your database goes missing or gets corrupt, you are pooched. There are many ways to do automated backups of a database, I've opted for a pretty simple email script that dumps the database and emails it to me daily. In my email I've got a rule that automatically archives them.


One feature that Sendy is missing is the ability to segment your list. If you want to email just male users who live in Canada and have bought 2+ items, you have to export your list, do a little excel magic, and import those subscribers into a new list. Not the end of the world, but definitely a feature I'd like to see.

Final Thoughts

As you can see, it's not a 1:1 replacement of MailChimp, but if you look at your needs, Sendy might be a really nice option. I've put probably about 2 hours of work into getting it running and it's been running without a hitch for 3+ months. I'd definitely recommend it!

Find an issue with this post? Think you could clarify, update or add something?

All my posts are available to edit on Github. Any fix, little or small, is appreciated!

Edit on Github

Syntax Podcast

Hold on — I'm grabbin' the last one.

Listen Now →
Syntax Podcast

@wesbos Instant Grams

Beginner JavaScript

Beginner JavaScript

A fun, exercise heavy approach to learning Modern JavaScript from scratch. This is a course for absolute beginners or anyone looking to brush up on their fundamentals. Start here if you are new to JS or programming in general!
I post videos on and code on

Wes Bos © 1999 — 2024

Terms × Privacy Policy