Skip to content

a-asi/libbyscout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LibbyScout

A Chrome extension that checks and surfaces public library eBook availability across all five NYC boroughs directly on Goodreads book pages, via Libby.

libbyscout-demo-final.mp4

LibbyScout in action: Surfacing NYC library availability directly on Goodreads book pages.

What It Does

When you load a book page on Goodreads, LibbyScout automatically pulls the book's details from the page, queries the OverDrive API for the book's availability in the three major Libby-enabled NYC public library systems, and displays that availability in an unobtrusive panel directly on the page itself, so you can see where it's available to borrow or to put on hold...and walk away with an eBook in hand sooner rather than later!

Features

  • Runs automatically on Goodreads pages with results appearing in an unobtrusive UI panel.
  • Simultaneously queries the three Libby-enabled NYC public library systems covering all five boroughs: New York Public Library, Brooklyn Public Library, and Queens Public Library.
  • Displays availability status within each system: Borrow, Hold, Unavailable.
  • For unreleased books, displays a “Not yet released” flag and the expected release date.
  • Includes a settings panel to toggle specific library systems on or off, allowing users to customize LibbyScout to match their active library card memberships.

Why I Built It

I was tired of my scattered TBR pile--across Goodreads, Notion, Google Keep notes and Google Docs pages, the NYTimes "Want to Read" list, good old-fashioned paper notebooks--and even more tired of checking Libby for titles, running the calculus of where books were available and in which systems I had space for holds...all to walk away with a bunch of holds, reminders to recheck certain books later, and no actual eBooks in hand.

After consolidating my TBR on Goodreads (since Googling a book for more info often led me back there, anyways), I built a Python batch-checker to scan availability across my Libby libraries. That still required, however, exporting and re-running the full list every time anything changed. I designed LibbyScout to address that friction, as an extension that lives directly on the Goodreads page, itself.

How It Works

LibbyScout began as a Python script (available in the python-script/ folder): a batch-checker that accepts a Goodreads TBR export and generates a CSV listing availability across three Libby-enabled public library systems. The Python script became the proof of concept for the search logic that powers the Chrome extension.

The core of that logic is a two-query search with a three-pass author validation funnel. First, LibbyScout runs a strict search using both title and author; if that fails, it falls back to a title-only search with subtitles truncated, then validates the result against the expected author before accepting it. That second step was implemented because a permissive title search returns a lot of false positives. Catching such false positives and accounting for edge cases, while working with AI coding assistance, required domain knowledge, critical thinking, and the judgment to push back against inaccurate results.

The author validation itself handles several modes of messiness in library metadata: punctuation inconsistencies (K.J. vs. K. J.), missing middle initials, transliterations (Knausgård vs. Knausgaard), and authors with short last names (e.g. Yiyun Li) that simpler matching logic would filter out. Multi-volume graphic novels are a known limitation--see below.

The full development story, covering quality control through domain knowledge and systematic testing, as well as the additional edge cases that emerged when translating the Python script into a Chrome extension, is documented in the case study (coming soon).

How to Get Started

Currently, LibbyScout is only available for manual installation. You can run it on any Chromium-based browser (Google Chrome, Brave, Edge).

Step 1: Get the Code

  1. Visit the LibbyScout project repository at github.com/a-asi/libbyscout.
  2. Download the codebase by clicking the green "Code" button at the top right of the page and selecting "Download ZIP".
  3. Extract the downloaded ZIP file to a folder on your computer.

Step 2: Add to Chrome

  1. Open your browser and navigate to the Extensions page by typing "chrome://extensions/" into the address bar.
  2. In the top right corner of the page, toggle Developer mode "ON".
  3. A few new buttons should appear. Click "Load unpacked".
  4. In the file browser that pops up, open the extracted folder and navigate to the "extension" folder (this is the folder containing the manifest.json file). Click "Select Folder".

Step 3: Find Your Next Read!

  1. The LibbyScout icon should now appear in your browser's extension list.
  2. Navigate to any book page on Goodreads.com.
  3. The extension will run automatically--no clicking required. Look for the LibbyScout availability card to seamlessly render on the page.
  4. To toggle a library system on or off, right-click the LibbyScout icon in your browser toolbar and select "Options." Use the panel that appears to enable or disable individual library systems, then click "Save."

Limitations

  • LibbyScout uses the undocumented Thunder OverDrive API (which underlies Libby), and so is fragile. Changes made by OverDrive to the API could break the extension without warning.
  • Multi-volume graphic novels are a known edge case. Inconsistent volume cataloging standards across Goodreads and library systems make reliable matching difficult without introducing false positives elsewhere.

Future Directions

  • Clickable book titles that open a direct Libby search, for closer-to-one-tap borrowing.
  • Audiobook availability displayed alongside eBook results.
  • Support for additional browsers.
  • A zip code lookup in settings, to allow users to find, query, and display library systems beyond the three NYC-based systems in the current version.
  • A fallback link that routes book details to a Bookshop.org search when a book is unavailable across all queried libraries, providing a path to supporting local, independent bookstores.

Case Study

Coming soon.

License

The source code in this repository is licensed under the MIT License.

The LibbyScout logo, extension icons, and all visual brand assets are the exclusive copyright of Ahmed Asi and are expressly excluded from the MIT License. They may not be reused, modified, or distributed without explicit written permission.

About

A Chrome extension that checks and surfaces public library eBook availability across all five NYC boroughs directly on Goodreads book pages, via the OverDrive API.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors