Moving my blog to Notion

Moving my blog to Notion

Published on January 22, 2023

The problem

Once a year, I do a really deep dive into how much I’m spending on subscriptions, and either shop around for better deals, or try to cut out anything I’m not using. One thing I was spending a lot on was hosting and domains (about 50$ a month on average!). I wanted to bring this number down.
I cancelled a bunch of domains that I don’t plan on using anymore (sorry 🥲), but there was still the hosting to deal with. My plan was to use GitHub Pages to host most of my projects for free, but the blog would be a bit trickier to migrate. It used WordPress as a CMS, which you can’t run on GitHub Pages.
At the same time I’d been toying with the idea of using Notion as the CMS for a while now, since I use it for everything and find it really pleasant to write with. I knew that it could be done, since Notion has a public API, and this was the perfect opportunity to give it a go!
The old blog site, built with WordPress
The old blog site, built with WordPress


The first step was to do some research, so I looked up how other people were sites using Notion as a backend. They seemed to fall into 3 big categories:
  • Hosting on Github Pages
  • Hosting on Vercel using NextJS
  • Using a paid service to set up the Notion blog.

First try

The first tool I tried with some success was notion-website-template. It was a tool that used another tool (loconotion ) to run a python script that would turn any Notion page (and all their sub-pages) into a static site. The site would then be hosted on GitHub Pages. It was pretty easy to set up, and the flow to publish content on it was simple enough:
  • Update your blog posts on Notion
  • Manually run a script with GitHub Actions that would create an updated static site, and deploy it.
Unfortunately, the script would fail about 50% of the time (but not before building a new site for 5-10 minutes!). This was a little too fickle for me, so I looked at some of the other solutions out there.

Second try

I really wanted to use GitHub Pages for hosting, but most of the well supported tools that I was finding were built using Vercel and NextJS.
“How hard can it be?”
I asked myself, and tried out wr8, a NextJS / Vercel blog template with very easy to follow instructions. It was 4$, but it seemed worth it given how well documented it was.
It was easy to set up, I’ll give it that, and the publishing flow was even better:
  • Update your blog posts on Notion
  • A script runs automatically on Vercel to update the content.
However, I ran into problems once I started adding pages to the blog. I had copy/pasted 72 blog posts into Notion pages, but suddenly, nothing was updating, unless I ran a build manually.
Turns out, the script to update the blog automatically couldn’t handle more than a few pages of content before failing (and racking up a ton of usage on Vercel 😬). It was a shame, since otherwise it was working perfectly, but I had to try something else.

Third try

This time I went back to the drawing board. The first 2 tools had a lot of dependencies; they both used big and popular libraries that converted Notion pages into static sites, and then repackaged them in a simpler to install form. What if I used one of these libraries directly?
The one that seemed the easiest to understand was loconotion, since it was literally just a python script that output a static site. I’d have to figure out how to deploy that site myself, but at least we were in familiar waters. Well, except for using Python… but how hard can it be? 😆
It went really well! I had a few hangups with Python, (python3? what is that?) but my boyfriend helped me out a lot with that part, and once I got the script running it was smooth sailing! The publishing flow, however, was a bit heavy:
  • Update your blog posts on Notion
  • Manually run a python script locally to build a new static site (10 minutes)
  • Push the new site to GitHub
  • A script runs to publish the site to GitHub Pages.
It just seemed like a lot of steps each time I wanted to update a blog post, and the rich preview links weren’t that great. It worked, but I wasn’t super happy with it.

Last try

I was feeling a bit discouraged, but I wrote to the creator of wr8, seeing if they could help me out. The next day they wrote me back and let me know which parts of the project controlled the automated scripts. I took out those lines, crossed my fingers, AND IT WORKED!
The automated scripts that were burning through my free Vercel usage had stopped. As a result, the blog wouldn’t update itself automatically, but it’s one step to update it in Vercel, and I can handle that.
Next I did a bunch of styling, and pointed my domain to Vercel and I was DONE! ✅
I cancelled my GoDaddy Hosting 4 days before renewal, and ended up saving 21.50$/month 😌

Final thoughts

Honestly, this was a lot of work. It would have been much easier to transfer my Wordpress site to a 3$/month hosting service I found, but I really wanted to dip my feet in the world of Notion blogs!
As for the final result, I have mixed feelings. It is free, and I love writing in Notion, but I’m also limited by the layouts and styles that are possible in Notion. I was also limited on WordPress, since I was using a pre-made theme, so that isn’t new, but I see this as a stepping stone more than a destination.