All tools

EPUB Validator & Checker

Free online EPUB checker and validator — no signup. Catch the structural, well-formedness, and reference errors that get books rejected from KDP and Apple Books.

Select EPUB files

or drop EPUBs here

Frequently asked questions

What does the EPUB validator and checker look for?
It checks the structural and content classes that get books rejected from stores: ZIP integrity, the mimetype and META-INF/container.xml, the OPF package (a missing dc:identifier is an error; a missing title or language is flagged), duplicate manifest IDs, broken manifest hrefs, spine entries pointing at missing items, and an EPUB 3 nav document. The default deep scan also reports XHTML that isn't well-formed, broken internal links, missing images, images without alt text, and pages missing a lang attribute. You get a plain error/warning list, not a pass-fail black box.
Is this an online version of EPUBCheck?
No. Epublys is a separate server-side structural checker with a browser interface. It reports package, well-formedness and reference errors, but does not run the full EPUBCheck schema suite or guarantee store acceptance. Use official EPUBCheck and the store preview as your final publishing checks.
Does it fix the errors it finds, or only report them?
Auto-fix can correct a missing or incorrect mimetype, its entry placement, and a missing language value. Missing language is set to en, so change it afterwards if the book uses another language. It cannot regenerate a missing container.xml, fix a compression-only mimetype defect, or rewrite damaged chapter text and references. Repair those in a local EPUB editor.
Can it check both EPUB 2 and EPUB 3?
Yes. It detects the version from the OPF and applies the right checks — for example, the EPUB 3 nav-document requirement only triggers on EPUB 3 files.
Does running the checker change or upload my file?
Checking is read-only and never modifies your EPUB. Auto-fix produces a new downloadable file and leaves your original untouched. Files are processed over HTTPS in memory only — never written to disk or persistent storage — and discarded the moment the response returns.