Well, it's been over two years since I last generated a post so I had to do some sleuthing to figure out how to do this. So that was fun.

I'm so glad that I wrote docs about how I did this. </sarcasm>

But anyways, here's the paltry list of books that I read this year.

For the record (and by record I mean myself), here's how I generated this list (this year):

Export

First export books out of GoodReads using their export functionaltiy to a csv.

Duckdb to the rescue

Then I used the most excellet duckdb to export the data to markdown format:

duckdb <<'SQL' | pbcopy
.mode list
.headers off

WITH cleaned AS (
  SELECT
    Title,
    Author,
    "My Rating",
    trim(
      replace(
        replace(ISBN, '="', ''),
        '"',
        ''
      )
    ) AS clean_isbn,
    "Date Read"
  FROM '~/Downloads/goodreads_library_export.csv'
)
SELECT
  '* [' || Title || '](' ||
  CASE
    WHEN clean_isbn IS NOT NULL AND clean_isbn <> '' THEN
      'https://openlibrary.org/isbn/' || clean_isbn
    ELSE
      'https://openlibrary.org/search?q=' ||
      replace(trim(Title || ' ' || Author), ' ', '+')
  END
  || ') by ' || Author || ' (' || "My Rating" || ' stars).'
FROM cleaned
WHERE "Date Read" >= '2025-01-01'
  AND "Date Read" < '2026-01-01'
ORDER BY "Date Read" ASC;
SQL

The damn robots helped me with some formatting issues because the data coming out of GoodReads is utter crap.

You can see the other years here in case you missed them.