Skip to content

Hardcover Sync

Hardcover sync pushes BookOrbit reading data into a user’s Hardcover account. It can update read status, reading dates, progress, rating, and privacy for books that BookOrbit can match to Hardcover. You can also pull read status back from Hardcover to fill in blank BookOrbit entries.

The integration is user-scoped. Each BookOrbit user connects their own Hardcover API token, chooses which changes should trigger sync, and gets their own cached match state.

User permission editor with Hardcover sync enabled

Start by giving the user the hardcover_sync permission. That permission opens Settings > Integrations > Hardcover and allows that user to call the Hardcover sync endpoints.

Hardcover settings page showing connection status, API token, book sync scope, and sync trigger toggles

Paste the user’s Hardcover API token from hardcover.app/account/api, optionally validate it, then save. BookOrbit strips a leading Bearer prefix if you paste one. The token is stored for that user and is not shown back in the UI.

SettingBehavior
Book sync scopeAll eligible books syncs everything unless a book is individually excluded. Selected books only opts in per book and skips everything else.
Enable syncPauses or resumes this user’s Hardcover integration without deleting the token.
Sync on status changeQueues sync when a book status changes.
Sync on progress updateQueues sync when BookOrbit progress changes or a reading session is saved. KOReader progress enters through this path after it updates BookOrbit.
Sync on rating changeQueues sync when the user’s BookOrbit rating changes.
PrivacySends Public, Followers only, or Private as the default visibility for synced Hardcover books.

Sync is effectively enabled only when the user is active, has hardcover_sync, has a saved token, and Enable sync is on.

Only books with a non-Unread BookOrbit status are eligible. This keeps untouched library inventory from creating Hardcover entries.

BookOrbit dataHardcover update
StatusMaps Want to Read, Reading, Rereading, On Hold, Read, Skimmed, and Abandoned to Hardcover statuses.
ProgressConverts percentage to Hardcover progress pages when the matched Hardcover edition has a page count.
Reading datesSends started and finished dates when BookOrbit has them.
RatingSends the user’s BookOrbit star rating when one is set.
PrivacyApplies the privacy setting saved in Hardcover settings.

Progress depends on pages. If BookOrbit matches a Hardcover book but cannot find an edition page count, status, dates, rating, and privacy can still sync, but progress waits until a usable edition is available.

BookOrbit has to identify the Hardcover book before it can update anything. Matching is attempted in this order:

  1. A cached previous Hardcover match, unless that match is marked with an error.
  2. The saved Hardcover provider ID in BookOrbit metadata. This can be a numeric Hardcover book ID or a Hardcover slug.
  3. ISBN-13.
  4. ISBN-10.
  5. Title plus first author.

ISBN and title matching are useful fallbacks, but they are still guesses. For books you care about, the best anchor is a verified Hardcover result saved through the normal metadata workflow.

To save that anchor, open the book, go to Edit Metadata, use Search online, choose the correct Hardcover result, apply it, and save. For the full metadata workflow, see Book Details, Editing, and Viewer and Metadata.

Automatic sync listens to BookOrbit activity and runs only when the matching trigger is enabled.

TriggerWhat queues sync
StatusA BookOrbit status change for a non-Unread book.
ProgressWeb reader progress, a saved reading session, or KOReader progress after it lands in BookOrbit.
RatingA BookOrbit rating change for one or more books.

Changes for the same user and book are debounced briefly, then serialized per user. If progress and status change together, BookOrbit folds them into one sync attempt instead of sending separate updates.

Hardcover manual sync card showing pending count and Sync now button

Manual sync is the catch-up button. Use it after first setup, after importing a library, after fixing metadata matches, or after turning sync back on.

The pending count is local: it counts eligible books whose BookOrbit status, progress, rating, or dates differ from the last recorded sync attempt. It is not a matching report. A book can fail with no_match, stop appearing as pending because nothing changed afterward, then become pending again after you save a correct Hardcover ID.

Manual sync streams progress while it runs and can be cancelled from the settings page.

Pull read status card showing preview summary with Ready, Review, Conflicts, Unmatched, and Skipped counts and Import ready button

Pull read status is the reverse direction: it reads your Hardcover library and fills in blank or Unread BookOrbit statuses. Books that already have a non-Unread BookOrbit status are never overwritten.

Tap Preview to run a dry-run match against Hardcover. BookOrbit shows a summary of how many books fall into each category before anything is imported.

CategoryMeaning
ReadyExact match found. Safe to import without review.
ReviewTitle and author match found. Confirm the match before importing.
ConflictsA matching BookOrbit book was found but already has a non-Unread status. The existing status is kept.
UnmatchedNo matching BookOrbit book found for this Hardcover entry.
SkippedHardcover book has a status BookOrbit does not import (such as Ignored), or multiple BookOrbit books matched the same Hardcover entry.

After the preview, Import ready applies all Ready matches immediately. Review matches opens the full import dialog where you can inspect each match, filter by category, and select individual books before importing.

Hardcover import review dialog showing matched books with Hardcover status, BookOrbit status, and progress columns

The review dialog shows each book’s title and author, the Hardcover status that would be applied, the current BookOrbit status, and how much progress would be imported. The Import progress checkbox controls whether reading progress is pulled alongside status. Select the books you want, then tap Import selected.

KOReader does not talk to Hardcover directly. The path is:

KOReader -> BookOrbit progress -> Hardcover sync

After KOReader updates BookOrbit, Hardcover uses the same matching rules, progress conversion, and trigger settings as any other progress update. A saved BookOrbit percentage proves KOReader sync arrived; it does not prove BookOrbit found the right Hardcover record or page count.

SymptomCheck
Hardcover page is missingConfirm the user has hardcover_sync.
Token validation failsConfirm the token came from hardcover.app/account/api and belongs to the intended Hardcover account.
Manual sync is unavailableConfirm a token is saved, Enable sync is on, the user still has permission, and there are pending books.
No eligible booksHardcover sync ignores books with the Unread status. Mark a book Want to Read, Reading, Read, or another mapped status first.
Progress does not updateConfirm the book has a Hardcover match and the matched edition has pages.
Rating does not appearConfirm Sync on rating change is enabled and the BookOrbit book has a star rating set.
Book logs or stores no_matchSave the correct Hardcover provider ID from metadata search, then sync again.
Wrong Hardcover book is usedReplace the saved Hardcover provider ID with the correct result and run manual sync.
Pending count looks wrongPending means local data differs from the last sync attempt, not every book that ever failed.
A book syncs when it should notIf Book sync scope is set to Selected books only, confirm the book is not individually included. If set to All eligible books, exclude it from the book’s settings.
Pull read status preview shows no Ready booksMost books may already have a non-Unread status in BookOrbit (Conflicts) or no Hardcover match (Unmatched). Check the Conflicts and Unmatched tabs for details.
Pull read status imports wrong statusUse Review matches before importing to confirm each match. Conflicts are never imported automatically.