A case study in edition-level data quality
The problem with "good enough" book data
Seekquel is a social reading app: readers track books, build shelves, follow series, find their next read. None of that works without a catalog readers trust. And book metadata is one of the messiest data problems on the open web.
Open datasets get you most of the way: a title, an author, usually a cover. They fall down exactly where readers notice.
A book has no page count, or a low-res cover, or none at all. The paperback, hardcover, and audiobook of one novel show up as three unrelated entries. Or they collapse into one with the wrong details. The edition a reader is holding isn't there.
These aren't cosmetic gaps. Scan a barcode and you expect the exact edition. Browse a series and you expect every volume, in every format, in order. Get this wrong and you lose the reader's trust in the whole product.
That's the gap ISBNdb fills for us.
ISBNdb as the quality layer
Seekquel ingests a book from open data sources, then runs it through ISBNdb as an enrichment and verification pass. ISBNdb is the quality layer over our base catalog. It corrects and completes what the open sources leave rough.
ISBNdb powers four things readers touch every day.
Barcode scanning that resolves. When a reader scans an ISBN, ISBNdb is the first source we hit after our own database. One lookup returns the exact edition: right cover, right page count, right binding. The book in your hand resolves to the book in your hand, not a near-match.
Every edition of a title. From one ISBN, ISBNdb's related-edition data gives us the full family of editions: hardcover, paperback, international printings, reissues. Readers browse them all and pick the one they own. That turns a flat catalog into one that respects how books actually exist.
Filling the gaps. When a book arrives with holes, ISBNdb fills them: page count, format, language, publication date, edition name, dimensions, publisher, MSRP. We even recover series placement from its long-form titles. Every enriched field gets an audit trail, so we always know what came from where.
Better covers. A book with no cover, or a poor one, gets ISBNdb's image. Covers are the visual language of a reading app. Shelves, recommendations, the whole browse experience build on them, so this one fix lifts the feel of the product.
The outcome
The result holds up under the scrutiny readers actually apply. Scan a barcode, get the right book. Open a title, see every edition. Browse a series, find it complete and in order.
No catalog is perfect, and ours isn't either. Book metadata on the open web is too vast and messy for any source to get fully right. ISBNdb just comes closer than anything else we've tried, and that's how a populated catalog becomes a trusted one.
Technical sidebar: how it's built
For the engineers reading, here's the shape of the integration.
Clean adapter boundary. ISBNdb sits behind a single IsbnEnricher contract, implemented by an ISBNdbAdapter service. No third-party HTTP details leak into business logic, and config toggles the integration. A NullIsbnEnricher stands in when it's off, so swapping the source is a one-file change.
Asynchronous, queued enrichment. Enrichment never blocks a user request. Discovery and enrichment run as jobs on a named isbndb queue. Discovery pulls related editions from a seed ISBN. Enrichment batch-fetches up to 25 editions per work in one POST /books call, then gap-fills fields and upgrades covers.
Built for ISBNdb's rate limits. We track daily usage in Redis against a configurable ceiling. When the budget runs out, jobs defer instead of failing and resume the next window. Queue middleware respects per-minute limits, and we read ISBNdb's rate-limit headers to time our backoff.
Resilient to outages. A circuit breaker (five failures, then a cooldown) stops us hammering the API during an incident. Failures degrade softly instead of cascading into the product.
Cached at the boundary. We cache ISBN lookups for 24 hours and searches for an hour. Repeat reads cost nothing, and we stay well inside quota.
Audited. Every field ISBNdb changes goes to a per-edition changelog, so provenance stays inspectable. That matters when you're merging sources into one trusted record.
