How I Manage My Reading List with Org-Mode
Table of Contents
The moment I discovered org-mode, I felt an instant connection and an overwhelming urge to shift my entire life into it—my notes, TODOs, you name it. Yes, even my reading list, which was comfortably managed in Goodreads. To my surprise, integrating it with my other org files has been as seamless as transitioning it from Goodreads.
Capturing a Book #
No fancy capture template, just a basic capture template to my inbox file that will get refiled into my reading list file (books.org
) every week.
(setq org-capture-templates '(("i" "📥 Inbox" entry (file "~/org/agenda/inbox_desktop.org") "* %?\n %i\n" :prepend t)
("j" "📔 Journal" entry (file+datetree "~/org/agenda/journal.org") "* %? %^G\nEntered on %U\n %i\n")
("b" "📑 Bookmark" entry (file "~/org/agenda/bookmarks.org") "* %? %^g\n %i\n" :prepend t)
("s" "🛒 Shopping List" entry (file+headline "~/org/agenda/shoppinglist.org" "SHOPPING LIST") "* TODO %?\n %i\n" :prepend t)))
The unique thing about capturing a book item, compared to other items, into my inbox is that I use org-cliplink
1 to grab the book title. For instance, when I stumble upon a gem like “The Martian” by Andy Weir—my all-time favorite sci-fi!—I just head to its Goodreads page2, copy the link, and paste it into my inbox using org-cliplink
. That way, it ends up looking something like this:
* [[https://www.goodreads.com/book/show/18007564-the-martian][The Martian by Andy Weir | Goodreads]]

Reviewing a Book #
When I’m reading a book, I mark it as NEXT
. And when I’m done devouring every page, I mark it as DONE
(or in other case, when I cannot finish it—looking at you, IT by Stephen King, I mark it as CANC
) and jot down a short review in the content.

Rating a book #
#+TITLE: 📖 Reading List
#+CATEGORY: Books
#+TODO: NEXT(n) TODO(t) | CANC(c) DONE(d)
#+PROPERTY: Rating_ALL nil 0 1 2 3 4 5
#+COLUMNS: %TODO %91ITEM %5Rating %TAGS
As you noticed in my in-file settings above, I set predefined values for Rating
property and customize my column view for efficient book rating. When it’s time to rate a book, I activate column view, C-c C-x C-c by default, navigate to the relevant Rating
cell and start assigning ratings using org-columns-next-allowed-value
or org-columns-edit-value
.

Initially, I experimented with using star (⭐) emojis for Rating_ALL
values (as depicted below), but I found it more practical to use numbers 1-5. With this setup, I can simply type the rating value using org-columns-edit-value
.
#+PROPERTY: Rating_ALL nil ⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐

Migrating My Existing Reading List from Goodreads #
It was as simple as exporting CSV file from Goodreads export tool page3, write a small python script and voila! That wraps it all!