Library portrait
A clean summary card based on the current filter.
Upload a Goodreads library export to examine your reading pace, ratings, publication years, authors, shelves, backlog, reviews, rereads, comparisons, and records. The CSV is read in your browser and is not uploaded to this site.
Need the file? In Goodreads, open My Books, find Import/Export near the bottom of the left sidebar, then click Export Library. Goodreads will work for a bit before it gives you a download link.
Open Goodreads Import/Export ↗The counts here use the current filter. Blank fields stay blank. Goodreads exports a rating of 0 for unrated books; this tool treats 0 as missing, not as a zero-star rating.
A clean summary card based on the current filter.
What the parser recognized, plus missing-value counts for fields used in the report.
Repeated Book IDs and repeated title + author pairs. This is diagnostic; nothing is deleted unless you change the duplicate setting above.
A few checks that can change how much confidence to put in a chart.
Goodreads' exclusive shelf field: read, to-read, currently-reading, and anything else in the export.
Coverage of the fields that power most of the analysis. Missing data is common in Goodreads exports.
Compare two date ranges or two saved views. The same definitions and missing-value rules are used on both sides, so the deltas mean something.
Uses the midpoint of the available read years.
Date-range comparisons keep the current non-date filters.
A, B, and the difference. Percentage changes are omitted where the starting value is zero.
Books and pages, with pages shown in thousands so both measures fit on one chart.
New-author rate, review rate, reread-title share, and repeat-author share.
The five most common custom shelves on each side.
Finished dates drive these charts. Books without a Date Read are left out instead of being assigned to Date Added or guessed into a year.
One book counts once, using Date Read.
Only books with both Date Read and Number of Pages are counted.
All years combined. Useful for spotting seasonal reading habits without pretending January 2022 and January 2026 were the same year.
This is the weekday attached to Date Read. Goodreads does not tell us what hour the book was finished.
Books finished by calendar day. Darker squares mean more finishes on that date. Pick a year with the report filters if the full history gets dense.
At each month end, this counts books finished during the previous 90 days.
Average personal rating for books with both a rating and Date Read.
Each cell is a finish count for that calendar month. Darker cells had more finishes within the current view.
Your ratings and Goodreads' Average Rating can disagree in useful ways. The scatterplot keeps every rated book as a point; the tables call out the largest gaps.
Unrated books are excluded.
A year needs at least two rated books to appear.
Each point is a book. The diagonal line is exact agreement.
Your rating minus Goodreads' average. Positive means you liked it more than the crowd.
Sorted by absolute difference between your rating and Goodreads' average rating.
Count, share of rated books, and cumulative percentile for each rating.
Share of rated books in four bands. Years with fewer than three ratings are omitted.
The lines at 3.5 divide higher and lower ratings. This is a plain four-way split, not a claim about objective quality.
Counts and the strongest disagreement inside each quadrant.
Original Publication Year is used when available. Negative years are kept as BCE values instead of being handed to JavaScript's Date object and mangled into something ridiculous.
Modern books use decades. Older material is grouped into wider buckets so a handful of ancient works do not flatten the chart.
Book age is estimated from read year minus original publication year.
A point far to the left is an older work read recently. BCE books use negative x-values.
Original publication year, not the edition year.
Same-year books through 1,000+ year-old works, based on age when read.
Book count, average rating, and median page count by age at reading.
Page counts come straight from the export. Missing page counts stay missing. No heroic attempt is made to infer Kindle pages from vibes.
Buckets widen after 600 pages so long books remain visible without owning the x-axis.
Only books with a page count and your rating appear.
The big ones. At least according to the page count Goodreads exported.
Percentiles come from page counts in the current view. No universal definition of a "long book" is imposed.
Primary authors drive the charts. Additional Authors are still counted in the library summary, but they do not quietly inflate every author ranking.
Number of books in the current view.
Authors need at least three rated books in this view.
For each read year, a primary author is "new" if no earlier dated book in the export has that author.
Books, rated books, average rating, pages, and first/last dated read.
A book counts as familiar when its primary author had appeared in an earlier dated read.
Cumulative share of books as more authors are included, starting with the most-read authors.
Largest gap between two dated reads by the same primary author.
Your shelf names are taken literally. The tool does not try to decide that "mystery" is a genre while "summer-project" is merely a personal problem.
Custom shelves only. Exclusive status shelves are omitted here.
Shelves need at least five rated books to appear.
Pairs that appear together on the same books most often.
Book count, rated count, average rating, and pages for each shelf.
Top shelves are placed around a circle. Thicker lines mean more books carry both shelf labels.
Shared-book counts among the ten most-used shelves.
Near-matching names and shelf pairs with very high membership overlap. These are suggestions to inspect, not automatic merges.
Date Added and Date Read let us measure the wait between shelving a book and finishing it. For unread books, the waiting clock runs through today.
Negative intervals, usually caused by odd historical imports, are ignored.
Books on to-read or otherwise not marked read, when a Date Added exists.
The books that have been waiting longest.
Read books sorted by elapsed time between Date Added and Date Read.
Date Added and Date Read are counted independently. A year where additions outrun finishes usually grows the backlog.
Kaplan-Meier estimate of the share still unread after a book is added. Unread books are treated as censored observations.
For each Date Added year: books added, share eventually read, and median wait among books that were read.
Binding labels get a small amount of cleanup so trivial capitalization differences do not become separate categories. Publisher names are left alone; collapsing imprints automatically would require assumptions the CSV cannot support.
Hardcover, paperback, Kindle, ebook, audiobook, and whatever else Goodreads exported.
Exact publisher strings from the export.
Publishers with at least two books rise to the top; singletons still remain in the table.
Review word counts are calculated after HTML tags are stripped. Read Count is used for rereads; the export does not contain a separate date for each individual read.
Average review word count for reviewed books at each star rating.
How many books were read once, twice, three times, and so on.
Word count only. The review text itself stays out of this table.
Sorted by Read Count, then title.
Common English stopwords are removed. Size reflects frequency; this is descriptive word counting, not sentiment analysis.
Most common content words and adjacent two-word phrases.
Deterministic counts: words, vocabulary, and punctuation. No attempt is made to guess mood or personality.
Uses exported Read Count. Goodreads does not give a separate rating for each read.
Shelves with at least two reread titles rise to the top.
The extremes are recalculated for the current view. A record is only shown when the fields needed to calculate it are present.
A table version of the records, with the book or period that holds each one.
Your Goodreads library has a lot more to say than the number of books on your Read shelf. Upload your Goodreads library export and this free analysis tool turns years of reading history into charts, tables, comparisons, records, and statistics you can actually explore.
See how your reading pace has changed, which authors keep pulling you back, how your ratings compare with the Goodreads average, what eras you read most, how long books sit on your to-read shelf, and which months or years were unusually busy. Filters let you zero in on one slice of the library, while the comparison tools make it easy to put two periods of your reading life side by side.
When you find something worth keeping, download individual charts or build a shareable Goodreads library report from your favorite findings. There is plenty here for a quick annual reading recap, and enough depth for the person who would happily spend an hour investigating exactly how strange their bookshelf has become.
Choose which CSV column belongs to each field. The mapping is remembered in this browser for this header set.
| Tool field | CSV column |
|---|