Daniel Morgan

Breaking free from Substack; a Howto guide for Medium Technical People

Maybe you don't want to continue using Substack because they platforms Nazis, or maybe you just want more control over your newsletter platform. Either way, here's what I would do to break free.


Websites are a continually evolving thing. Software that serves them needs to be updated frequently for security, and you also want a webhost that keeps things updated. To keep our sanity, we want to take advantage of frequent updates and security audits by the open source community, and we also want to provide a bit of a buffer between our web server and the wider web for speed & security. There are whole ecosystems growing up around solving the problem of hosting+mailing+managing newsletters. The platform outlined below is what I'm most comfortable with as a Wordpress + PHP-centric person.

|        Domain       |
|     (iwantmyname)   |
       DNS Setup
|   Web Hosting       |
|   (any php host)    |
    Install Wordpress
|   Content Migration |
| Substack -> Wordpress|
    Install Sendy
|    Email System     |
| (Sendgrid/Mailjet/  |
| Amazon SES + Sendy) |
    Cloudflare Setup
|   Frontend Cache    |
|    (Cloudflare)     |

You are your own island.

There's definitely a way to accomplish this with your CMS of choice, but it will require that you get your posts into whatever HTML/MD format your CMS of choice wants.

Steps for a Wordpress + Sendy + Cloudflare Substack Replacement

  1. Export your subscribers from Substack (you'll get a CSV file).
  2. Export your posts: visit YOURUSERNAME.substack.com/publish/settings#exports. You will receive a zip file containing your posts.
  3. Make a temporary Wordpress.com website. Choose their free plan because they have the best Substack importer. You can then export an XML file for importing into a self-hosted Wordpress site.
  4. Buy a domain. You can search for available domains on domai.nr.
  5. Purchase web hosting for approximately $3/month on Hostinger.
  6. Install Wordpress on your web host.
  7. Import your exported XML file using the Wordpress importer. This will also import your images.
  8. Install 'Sendy' on the same web host. Sendy has a one-time cost of $69 with free updates.
  9. Sign up for Sendgrid, Mailjet, or Amazon SES. This account will handle the routing of your emails. Sendy will handle the sending, email, and list management. Note that sending email from your own domain and ensuring reliable delivery can be challenging due to Google's policies. You can read more about this here and here.
  10. Configure the necessary DNS records in your DNS setup to enable sending emails from your domain using the service you chose in the previous step.
  11. Sign up for Cloudflare for your domain (after setting up your DNS records) to further improve page load speed. It's worth noting that Cloudflare is committed to being a zero-carbon company, as mentioned in their press release.
  12. Choose a theme you like for Wordpress.
  13. Embed your Subscribe form in an 'HTML' code block somewhere in your theme. Sendy will generate this code for you.
  14. If you want to charge users for access to member-only content, you can use this free plugin to accept credit card payments via Stripe.

🎊 You did it: You have a new website + a system that sends emails through your own domain.

Who are you relying on?

  1. Your webhost to keep the lights on
  2. Wordpress automatic updates
  3. Sendy software updates (list management & your email editor)
  4. Amazon or Sendgrid to deliver your emails at the price of about 10 CENTS per 1,000.
  5. Cloudflare (this is set it and forget it and free)

What is your Post + email flow?

  1. Write your post in Wordpress. Hit Publish
  2. Copy + Paste your published post into Sendy's editor. Hit Send.

Bonus: You can have any newly published post sent automatically to all subscribers with a quickie automation.

Bonus Round:

Want to break free from Google and avoid using Google Analytics or any third-party tracking? Matomo, formerly known is PIWIKis what you want. If it's good enough for the U.N. and Amnesty International, it's good enough for us.

by Daniel Morgan, tagged with: