How I automated the "bookshelf" on my site with Kindle, Zapier, Goodreads, and Ghost
A bit ago, a nice guy by the name of Joel (and the CEO of Buffer, neat!) reached out to me on Threads and said he liked my website, particularly the Bookshelf section, and was curious how it worked. Then, a handful of folks in the comments seemed to like that interaction, so I decided to write up a simple guide here on how to do that!
TLDR: Goodreads has an RSS feed that you can do things with. Zapier can turn RSS feeds into other things. Go wild.
Quick tangent: since I don't run any kind of analytics on my site, and have no idea if anyone is actually ever checking it out, getting comments like that on social media is super cool to me. So thank you, Joel, and the other kind folk who went to view my site and left comments in Threads about it.
Additionally: I don't love that Goodreads is the primary data source for this. I'm looking into other options like Storygraph, which is promising. I'm very forgetful, though, and will probably forget to update what I'm currently reading - that's where I like my dumb Kindle and the Goodreads integration: it automatically marks it for me. Okay, carrying on.
Okay, let's get into the guide.
Getting started
To make this work I use these four services and things:
- A Kindle (for where the reading happens)
- A Goodreads account (to update what I'm currently reading, and for it's RSS feed of that)
- Zapier zaps (to sync the RSS feed to Ghost)
- Ghost (to display the stuff)
Step by step
1) Connect your Kindle to Goodreads. You can follow this help article from Goodreads to get that done: https://help.goodreads.com/s/article/Auto-updates-How-do-I-automatically-update-my-reading-status-when-I-start-reading-a-book-on-Kindle-1555343060548 and mark whatever book you're reading as "Currently Reading" from your Kindle.
2) Head into Zapier, make an account, and then make a Zap. At some point, Zapier introduced a little "beta" feature that helps you make zaps based on natural language - I'd just pop in "RSS to Ghost" in there and then hit "Try itβ.
From there, you'll plug the Goodreads Currently Reading RSS feed URL into the "Feed URL" box in the Zap. After that, you'll need to connect Ghost and Zapier together via the prompts in Zapier or Ghost. The real crux of this automation, as I mentioned in the TLDR up above, is that Goodreads produces an RSS feed for your currently reading. You can get that by heading to your Goodreads account and navigating to your "Currently Reading" page - there'll be a little RSS icon you can tap:
Once you have that RSS feed, you can really go wild with whatever automation you'd like. There are plenty of ways to consume an RSS feed and turn it into something for you to show somewhere. But I'll show you what I did with mine.
Setting it up with Ghost
So, my blog uses Ghost - which is a great CMS that allows you to make your own themes (if you self-host, or are on an advanced plan) with Handlebars as its primary language. Here's the main crux of what I did:
{{#get "posts" limit="all" filter="featured:true+primary_tag:bookshelf"}}
Basically, in Handlebars, that's a little tag that says "go get all of my posts, but then filter them by some extra details like if it's featured, and what its tag is" β so in this case it's "Get posts tagged bookshelf, but only ones I've set to be "featured" β and that's how you get the "Currently Reading" part of my bookshelf.
Beyond that, you can just adjust the scope of your little filter to get other posts. I have (probably brittle) ones that go and grab posts between certain dates like so:
{{#get "posts" limit="all" filter="featured:false+primary_tag:bookshelf+published_at:>='2024-01-01'+published_at:<='2024-12-31'"}}
That's what kicks out that Past Reads section for 2024. Now, there's more to it, of course. This little snippet makes a "loop" that you can then manipulate to look however you want. This isn't really meant to be an article about how to code, and more just how to set something up so you can do whatever you want with it. If you're looking for how to make this happen in Ghost, I'd suggest you hit the docs; they'll explain it way better than I could.
So there you have it, to summarize:
- Track your reading on Goodreads by whatever means you can: manual, automatic, it doesn't matter.
- Take the RSS feed from Goodreads and shove it into Zapier, then take that feed and do tech magic with it elsewhere.