Glenn 2.0

How to Import Your GoodReads List Into WordPress, for free

Here are the steps I took in order to get all of my GoodReads books/reviews over into my IndieWeb-ified Wordpress:


  • A GoodReads account with a decent amount of books reviewed and/or starred
  • A self-hosted WordPress site
  • Export from GoodReads > csv file
    • My Books > Import/Export > Export Library
    • Clean up CSV file - spreadsheet is good, be sure to save it back as text/csv (not xls or odt)
      • remove un-needed/unwanted columns
      • relabel columns to match WordPress fields (Important!)
        • post_type column - all should be set to post
        • post_title column - for book titles
        • post_content column - for the actual content of your review
        • post_excerpt column - for the actual content of your review excerpt (if any)
        • Add column for post_kind - set it to read (not sure if this will work)
        • Change any additional column headers to whatever you want - these will become custom fields on import
  • Install Really Simple CSV Importer plugin
    • Yes, it's old, but it still works!
    • Run import (Tools > Import > CSV-Run Importer)
    • The posts should automatically be set to draft status
    • On import, it seems to take the post date from the 'date read' column, which is ideal
    • Once you hit publish, the date is reset to the current day and is irretrievably lost!
      • Possible workaround is to use SQL to copy the date from the date-read custom field back to the publish date (haven't done this yet)
    • If the post kind isn't set you'll need to use an SQL query in PHPMyAdmin

After import you'll need to add some PHP and CSS to display the new custom fields, most likely inside the_loop - where this is will depend on your theme. For Twenty Seventeen I did the officially recommended child theme and am inserting my code there under Template Parts > Post > content.php - here is my code, just to give you an example. This php statement pulls in the number of pages, which is one of the columns I imported:

$pages = get_post_meta($post->ID, 'pages', true);

Your pages will now be assigned to the '$pages' variable, which you can use to display that number like this:

if ($pages) { ?>
<p class="book-meta">Pages: <? echo $pages; ?></p>
<?php } 
// do nothing; } 

One thing that does not get imported from GoodReads is book cover images. However, if you have the isbn or isbn13 number, I found a way to hotlink to book cover images using Open Library. They are specifically set up for just that purpose. Here is my code to assign the isbn to a variable:

$isbn13 = get_post_meta($post->ID, 'isbn13', true);

And here is how to structure the html to display a medium-sized book cover image:

if ($isbn13) { ?>
<a href="<?php echo $isbn13; ?>
"><img align="right" src="
<?php echo $isbn13; ?>-M.jpg"></a>
else { 
// do nothing; 


No mentions yet.

Latest 3 Posts

  1. Giving up on IndieWeb - Again! notes

    I have a long, tortured history with the IndieWeb. It's like social media - each time I think I'm over it I rage-quit and then I later return. I forget all the bad things and remember only the good and I tell myself this time it will be different. In other words, I never...READ MORE

  2. Reconnected with notes

    Finished with the basic migration to eleventy and adding Indieweb microformats and webmentions. I think I have all this working now. Time to connect back to and test it out!READ MORE

  3. Built with Eleventy Eleventy Netlify

    I'll write up the details later, but this site is now being created/parsed/compiled, etc. using Eleventy. I'm still pushing it to GitHub, and Netlify is grabbing it and serving it. That part's the same. Just different under the hood. Also a new design/theme, and redoing...READ MORE

More posts can be found in the archive.

← Home