Book hangovers are the worst. By book hangover, I mean that feeling you get at the end of a book when you come up for air and don’t know what you’re going to read next. In general, or because you have to ‘world switch’ from one type of book or one genre or one era to another (my most common cause), or because you don’t have any books picked out to read next.
I get this feeling, a lot, because I read a lot (hundreds of books per year). I also listen to a lot of audiobooks when I’m out doing long distance activities that take several hours (e.g. ultrarunning, hiking, or cross country skiing). So while I read 5x more books than I listen to audiobooks, I still consume several audiobooks per month, too, but I’m picky about what I like to read versus what I like for audiobook content. I regularly and periodically peruse catalog additions to my various* libraries’ digital collections under genres I like to read and under audiobook categories, putting things on hold so I always have a pipeline of things ready to read or listen to. But, this relies on me periodically doing so, and sometimes the influx of new things to read based on those effort dries up and I have fewer books on hand than I would like, especially when I know I’m going to be reading more (e.g. I have some downtime from not feeling well and will be reading more than normal or when I’m traveling/on vacation).
It occurred to me the other day that it would be nice to be able to automatically check authors I have read for new books and to be able to put those books on hold. The problem is that I read a lot. I have dozens if not hundreds of authors I like, and while I remember a few to check, I don’t have a good way to do this systematically. My brain finally put 2 and 2 together this week when it occurred to me that if Libby (the e-book/reading app now used by most of my libraries) allowed me to export my data, I could systematically list and look up authors and check for recent/new additions to their catalog. Ooooh.
Like most things now, there are usually ways to export or access all sorts of data whenever you’re ready to use it. Libby actually now makes it easy in the app to do this, without having to request or log in to the web portal or do any obnoxious behaviors. Tap Shelf>Timeline>look at “Actions” button in the top right. It gives you not one but THREE ways to export your data, wahoo! If I have the data, what could I do with it?
(TL;DR the rest of this: in less than a day, I built a tool that I call BookPilot which allows me to take the Libby data, parse it for the books & authors I have read, check those authors for every book they’ve ever written, then display it for me. BookPilot solves the ‘what should I read next?’ problem by systematically finding all unread books from authors I have already read. I can then easily mark off books I’ve read elsewhere (e.g. read before my Libby history started or in physical format), kick out books I know I don’t want to read, and otherwise have an awesome list of books ready to go the next time I want to spend some time checking out books and/or putting more things on hold! It works really well and that’s just on the authors I’ve already read – I plan to also add recommendations for new authors that match my favorite authors, genres, etc. There is a web dashboard where you can view and interact with the recommendations as well as the ability to work with this data via the command line.)
The whole goal was to help fuel my book pipeline and to be able to recommend books that are highly probable that I want to read, based on my past reads, but to automatically filter by what I’ve already read. (That’s a problem with asking chatbots or using other tools: it’ll show you ‘books like this’ but when you read hundreds per year, you don’t remember the covers or names of all the books you’ve read so you spend a lot of time re-checking things you’ve in fact already read.)
I started by taking the Libby data export (you can get it as CSV, json, or html) and having Cursor write a script to pull the book title and author for everything I’ve read in my export. This is about 800 books and ~350 or so authors from the last 2.75 years (when I switched from Overdrive to Libby and it started recording my history; before I wasn’t having it log my reads). It then takes every single author on the list, queries the Open Library API to find the author’s Open Library ID, then fetches all their works (up to 100 books per author at a time) using the author’s works endpoint; it then supplements this data with Google Books API queries. All API responses are cached locally to avoid rate limits, and requests include built-in rate limiting delays between calls. It stores all books by each author with metadata: title, ISBN, publication date, series information, categories/genres, format availability. It then cross-references catalog books with my reading history to mark read/unread status, attempts to filter out duplicates and non-English versions (e.g. “Anne of Green Gables” and “Anne of Green Gables (German Edition)” versus Anne of Green Gables in the actual german language title and also “Anne of Green Gables / Anne of Avonlea (Box Set)” etc). It takes a while if you have hundreds of authors but the script is set up so you can start/stop it and it will pick up where you left off. The next time you check, it will check and only add books that are more recently published (customizable thresholds, of course) so future catalog checks will be quick to look for recent additions.
Then I have a dashboard that sorts and shows me all these books, ordered by series (when series info is available) so I can see a) series I have not read from authors I have already read and b) any books in a series that I have partially read; I can also sort by author’s name or highest count of the books I haven’t read, e.g. maybe I’ve read one book from an author but they have another 30 books to consider!
(On first pass, I still need to go through and mark books that I have read from >=3 years ago digitally and/or in physical form. But a quick look has already shown that this system works great and I’ve already been able to instantly add a bunch of books to my to-read list and holds already!)
I added a thumbs up feature which automatically ports a book to my “books to read” tab, which answers my “what should I read next?” question. If I thumbs down a book, it goes away from the dashboard. I can also tag “already read” (also disappears it), “not in English” (e.g. my filters missed that this is a non-English version on the first pass) or “duplicate” for duplicate titles that have somehow crept into the listing.
I have separate recommendation lists for authors I’ve listened to (audiobooks) versus authors I’ve read (ebooks), so I can also have a good queue to fill for similar audiobook content.
I have a ton (hundreds of audiobooks, thousands of ebooks) to review, based on my ~800 books read in the last <3 years, from 350+ distinct authors. It’s delightfully overwhelming to have this many recommendations! There is nothing worse than a book hangover combined with having nothing in the reading queue and having to fight the book hangover and having to simultaneously search for what’s available and what you want to read next. (It’s like feeling hangry…book hangover hangry?) This system now means I won’t have that combination problem again: I will always have books lined up to read and if not I can quickly and more easily identify off this list from my known authors where they’ve added books or they have additional series or I can (eventually) find series from the same “era”/”genre”/”world” to continue reading and pick up where my brain left off.
Eventually, I’m going to add some recommendations for new authors that ‘match’ my most-read authors in different categories. But I don’t have to, yet, because I have so many high-ROI options based on my current author list! And the next time I drop in an updated Libby export, it will add the new authors I’ve read *and* automatically remove books from my “books to read” list that appear in my reading history.
I haven’t open-sourced BookPilot yet, but I can – if this sounds like something you’d like to use, let me know and I can put it on Github for others to use. (You’d be able to download it and run it on the command line and/or in your browser like a website, and drop your export of Libby data into the folder for it to use). (And did I use AI to help build this? Yes. Could you one-shot a duplicate of this yourself? Maybe, or otherwise yes you could in several hours replicate this on your own. In fact, it would be a great project to try yourself – then you could design the interface YOU prefer and make it look exactly how you want and optimize for the features you care about!) Update: I have heard from several folks already that they might be interested, so I have on my list to tidy this up a bit and push it to Github! If you want me to ping you once it goes up, drop a comment below or email me or ping me on Twitter or BlueSky.
* Pro tip: if you live in Washington state, most county libraries have “reciprocal” agreements if their counties offer services to each other. This means that because I lived in Seattle and have a SPL card and a King County (KCLS) card, I can also get Pierce County, Sno-Isle, etc etc etc…. It’s mainly digital collection access, but this is amazing because you can have all of these library cards added to your Libby account and when you want to go get a book, you can check ALL of your catalogs. Sometimes a book is on most of these systems and I can get on the hold list for the one with the shortest wait time. Other times, it’s only in ONE catalog and I wouldn’t have been able to get it without these reciprocal county cards because it wasn’t in SPL or KCLS (my primary local libraries)! And even when books are not in any collection yet you can add a smart tag and be notified automatically whenever something IS added to *any* of your libraries. It’s amazing. Not sure if other states or areas have these types of setups but you should look to see if you can access other catalogs/get cards, and if you live in Washington and love to read, definitely do this!
What else have I built that you might like to check out? If you use iOS, check out Carb Pilot to help get AI-generated estimates (or enter manual data, if you know it) to track carbs or protein etc and only see which macronutrients you want to see. If you have EPI (exocrine pancreatic insufficiency, also called PEI), check out “PERT Pilot” either on iOS or Android to help you track your pancreatic enzyme replacement therapy.
Recent Comments