1 · Reports
Sealed and anchored to Bitcoin
Each report’s measurements are hashed; each day’s hashes become one root, committed to a Bitcoin block through OpenTimestamps.
Proves the report existed in exactly this form by that day.
An agent that acts on what CrawlCheck measured should not have to take our word for it. Every report is fingerprinted and each day anchored to Bitcoin; every answer an agent acts on is signed; every signed answer is entered in a log that a witness we run on GitHub, outside our servers, re-checks. Each of the three is checked on the reader’s own machine.
Proves
A report with this digest existed in exactly this form by that day, and has not been edited since.
Does not prove
That the measurement was correct. Only the first claim can be settled by mathematics.
90
sealed days
153
reports under this root
#966,435
bitcoin block
Each check runs on the reader’s own machine, from files that are published and can be kept.
1 · Reports
Each report’s measurements are hashed; each day’s hashes become one root, committed to a Bitcoin block through OpenTimestamps.
Proves the report existed in exactly this form by that day.
2 · Answers
Every Resolve answer an agent receives before it reads, cites, connects or transacts carries a signature over its canonical content.
Proves the answer came from CrawlCheck and was not altered in transit or afterwards.
3 · History
Every signed answer names its leaf in an append-only Merkle log. Each signed tree head chains to the one before, and a witness we run on GitHub, outside our servers, re-checks and co-signs it. It is our own workflow: it proves the log was not rewritten on our servers, not that an independent party checked it.
Proves an answer was not rewritten or removed after it was logged.
No wallet, no fee, no key held by us. The proof is a file, not a coin.
Host, timestamp, section scores, every path and status fetched, every crawler identity and what it received, the citation state. Wording and layout are excluded, so an editorial change never breaks a proof.
Canonicalised with sorted keys and hashed with SHA-256.
Digests sorted and folded into a Merkle tree: parent = SHA256(left || right), an odd node paired with itself. Arrival order cannot change the root.
The root goes to the OpenTimestamps calendars, which commit it into a Bitcoin transaction.
Confirmed in Bitcoin block #966,435.
b70be949fdd8762d8b4a3aa03c643a8c1e84d7d2ff3011ed0edd56797819e44dhttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d b70be949fdd8762d8b4a3aa03c643a8c1e84d7d2ff3011ed0edd56797819e44d crawlcheck-2026-09-10.otsThe reference client checks the file against a Bitcoin node or a public calendar. No CrawlCheck server is needed, or trusted. A fresh seal reads pending confirmation until the next Bitcoin transaction confirms; ots upgrade then stores the block attestation in the file for good.
90 days anchored. Each links to its own root and proof file. Days are sealed once and never recomputed.
All 153 digests as plain text, one per line; the first 20:
0138a8b0d39aadfba4b473f93adaab693f83fa1a85a488571ac524af55f0a964 02b2f50a4819018293ec1a500646d54ac1a89055f9ac9e8ce94499dd7ebf3ee8 036013e1980f0dcf87ae3d88bd7d6fec3027cf76d5076d5499b778dc2286a3a5 0417fc890114913a319a9cfd43612693bd129907f5665c257819758a577493f8 0467b05e53186c0f4a44e01c7fb5c3622352b38f530d7f609db85bb2f124bb69 07e590de4357f57c2418bcbb44d9002d6b1b028d501d9a82c5e989562331c2d4 0a871168e5c2e337bf7ffba26153324a433317e73ad88ebf10694485d3a69606 0bb0323047561739f1f9843232ece715bdf75facc154270ea51d387cd86aec2b 0d01e3cabc2784cd35cc6afb03e92fd94fef7904c08cebab32e35c750da906db 11f167449834f639684d2020ce0c253c1657047e21d621f8afd60cb37854a44d 1274e876eddfc24eeac2afa9fec71ac44904e37277250e2f5339445436bfade1 16e2992b8b9e6b90d84840be5af13409b7b43ca23ae7f5cd6e57b7f6ca5657ac 17ca7b1ca83a60840a40e01934fa47f7a4d7b058e4f9ec66f2e160a4fa49f835 1cd3e26b359b56348633b1d8d61e826fb6d6433f1ff96752ba09b543314f9dd7 2041fe627650c5095473eb7d1dd3bfcfd04b70714ae376209df462c0032dc330 23fb81187333c684de3fcb18d5f9305827cd33ef991810bfb70045fabb880e39 260b75470eb781bee274efffd0e40d743cce3af601387e1bf5bf91085bfeecaf 28ff6e36d046f1ecd87ac21a09bcb538a84217f8a52f250d33e770be113bdb18 2bff6744340390685518e1c70efe80b7c82771381575681e494b8350843bcc3e 2c2f1d34f48f901634ee1993ddc5645d6af79e662d27822fd63673aa2a4d7035