Bates numbering is a legal requirement with no room for interpretation: before a production goes to opposing counsel or the court, every page gets a unique sequential number, continuous across the whole set — file 1 ends at ABC-000231, file 2 starts at ABC-000232, no gaps, no duplicates.
The usual ways to do it are an Acrobat subscription, $99-and-up Windows-only desktop software, or uploading the whole set to a website. For documents under a protective order, the third one is not available.
BatesKit does it in the tab. pdf-lib parses and rewrites each PDF locally, one document at a time, writing finished files into a folder you pick via the File System Access API. Every stamp is a real text object in a standard-14 font, so Ctrl+F finds it and a review platform indexes it. A manifest CSV records relative path, filename, page count, BegBates, EndBates and the output SHA-256 per file, with a Summation-style load.dat alongside.
Before the set ships, five read-only checks run on the same files, all on your device: metadata, redaction (dark regions, white/light covers, invisible ink), privileged or sensitive content, production QA (numbering gaps, duplicates, mixed page geometry), and your index or privilege log reconciled against the assigned ranges. It checks instead of performing.
No server is in the path. The only requests the page ever makes are six ~30-byte counters (page view, batch finished, check run finished, checkout opened, key verified, error type). No cookie, no identifier, no filename, no page count. Load it once, go offline, and a batch still runs.
Free is one file up to 25 pages with every feature enabled. Unlimited is $19 once — an Ed25519-signed key verified offline against a public key compiled into the page. No account, no subscription.









