How this works
We read comment threads from a hand-picked set of book-adjacent subreddits, pull out the titles people mention, and order each list by tracked mention count in that list's scope. Comment scores help select useful excerpts, while sentiment describes only the published excerpts that have been scored; neither changes rank. Pages are built from cached archive extracts, not live Reddit. Published excerpts link to their source threads, while aggregate counts trace to versioned source batches rather than a public comment-level ledger.
The numbers
- 7,260,699 — cached comment rows processed
- 183,704 — book mentions extracted
- 497 — books published
- 38 — subreddits covered
- 275 — source windows (21 bounded partials)
- 2,763 — quotes sentiment-scored
- 2019 → 2026 — window
The pipeline processed 7.3 million score-filtered archive rows from versioned batches covering 2019 through 2026. Coverage varies by subreddit and batch; this is an evolving set of reviewed extracts, not one immutable site-wide snapshot. Each subreddit uses an evidence floor chosen for its size and noise level, so this samples visible discussion rather than everything typed into it. Rows came from the Arctic Shift archive. Selected windows do not overlap within a subreddit, and the release rebuild rejects repeated comment IDs across selected caches. Processing volume is still a count of selected archive rows, not a count of Reddit users. The published catalog currently reports 183,704 tracked mentions across 497 book pages.
Extraction: deterministic before clever
Most mentions are found by a curated table of titles, author surface forms, and abbreviations matched with word-boundary regular expressions, plus known book identifiers in URLs. Some long-tail source batches use a model-assisted residue pass with cached, schema-checked output. The extractor is reproducible from its source batches and code, but the public dataset publishes book-level aggregates and breakdowns only. It excludes source excerpts and comment-level matches. Its separate privacy-safe source coverage ledger exposes only filenames, windows, thresholds, selected counts, recovery evidence, and digests.
Precision is the design constraint. Titles that double as ordinary phrases
(Refactoring, Accelerate) only count when the comment also names the
author or says "the book" nearby. Deleted or removed bodies, deleted authors, very short
comments, and comments from a documented exact set of generated-content accounts are
dropped. Subreddit-scoped *-ModTeam accounts are also excluded. We avoid a
generic username rule because strings such as “bot” can occur in human account names.
The second layer is URL identifiers: when a comment links to a known Amazon ASIN, Goodreads ID, Open Library work, or Bookshop.org ISBN, that counts as a mention of the work even if the title was never typed. Links we can't resolve go into a discovery queue — they're how new books enter the catalog, on editorial review rather than autocrawl.
Ranking
A book's page shows total mentions, a distinct-account field, complete stored per-subreddit and per-month breakdowns, and selected high-scoring quotes. Rankings sort by mention count for the stated scope, using the title as a deterministic tie-breaker; there is no hand-tuned score and no pay-for-placement. Trending uses the latest six observed months in the data, not the build date.
The unique_commenters field is a case-insensitive union of Reddit account
identifiers across all selected source windows for that book. It is a release-wide
distinct-account count, not a count of distinct people, and it does not affect rank.
Stored per-subreddit, per-month, and subreddit-by-month rows reconcile exactly to
total_mentions. Book pages may hide one-off subreddit rows from the visual
chip list; the downloadable aggregate data retains them.
Sentiment
Two books with the same tracked mention count can have very differently toned published evidence. A language model can score a displayed excerpt from −1 (pan) to +1 (praise); per-sub and per-book averages include only excerpts with a score. Unscored excerpts are marked “Not scored” and are excluded from averages rather than treated as neutral. Scores are cached and reused between refreshes, and the scope is deliberately bounded: we score selected published excerpts, not the full mention population. Read the averages as a directional signal for that scored excerpt sample, not a measurement of all mentions or a star rating.
Editorial synthesis
The per-book write-ups (tagline, themes, common praise and criticism, who it's for) are drafted by a language model that is grounded in the same stats and quotes the page already displays — it summarizes the evidence shown, it doesn't add outside opinions. Everything else on the site is plain code.
Quality gate
Scoped mention count is the ranking signal, but it isn't a free pass. A small exclusion registry drops books everywhere — extraction, merge, and page generation — when a book is discredited pseudoscience or hate material. The bar is deliberately high: contested-but-legitimate books stay on the site with the controversy named in their criticism section instead. A regression test enforces that nothing tagged ever leaks back in.
What this misses
Unknown titles are invisible. A mention we don't recognize stays uncounted until the title lands in the alias table. Long-tail and very recent books are underweighted; the discovery loop closes that gap, but it runs on a human cadence.
The score floors bias toward visible discussion. Thresholds vary by subreddit: lower floors preserve signal in book-centric or smaller communities, while higher floors control noise in very large ones. Quiet-but-good recommendations can still miss the cut, and raw totals should not be treated as a measure of community size. That's a trade we made for precision and cost.
Some source units are partial. High-volume archive walks can stop at a documented page cap, so their totals describe the covered portion of a window rather than the complete period. The aggregate JSON identifies every bounded unit and its requested and covered windows. Matching the legacy comment count confirms count equality only; it does not establish historical content equivalence with the original partial archive. A reviewed accepted mismatch pins repeatedly confirmed, stable current archive content; equivalence with the historical legacy partial remains unknown. The published hashes are evidence about the selected archive snapshot, not substitutes for raw comments or a claim that the historical and current comment sets are identical. 256 selected legacy result files predate explicit result-level coverage metadata, while 254 selected uncapped legacy caches rely on the documented complete-cache namespace invariant.
Reddit is not everyone. These rankings reflect what selected, score-filtered comments in Reddit communities mention — which skews technical, English-speaking, and toward whoever posts there. Treat “most mentioned in this corpus” as exactly that, not “the best.”
Coverage is the current sub list. Whatever's in the index is what we measured. Other verticals show up when we have the data to back them, not before. Ingest is batched, so a thread that's hot today won't appear until the next run.
The page is the receipt
Every displayed quote permalinks to the original Reddit thread. The page shows the aggregate used for ordering and a selected evidence sample; it does not claim to expose every contributing comment. The public dataset supplies machine-readable aggregate fields, reconciliation notes, and the privacy-safe partial-unit coverage ledger, but not displayed excerpts, usernames, raw comments, or comment-level matches.