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
51
reports under this root
#964,079
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 #964,079.
47f4b0c2910d55c0bd7fe85b098228c9ca7714298f620de62ca3ee77bb05870ahttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 47f4b0c2910d55c0bd7fe85b098228c9ca7714298f620de62ca3ee77bb05870a crawlcheck-2026-08-25.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 51 digests as plain text, one per line; the first 20:
0d1334a699ecc72c5defac03fc30433ca761c6cdad04c9e4d34b79e7a3533b6d 14d6d323c84aadd9ea5b7344e65fe1559836fad315e0f17f2ae6814d3a967d27 1e9785493188e25a6fcb4b3ab0b61f9053ad9a37a69f7bc13d806abf72bfeac0 21373d00555e781934d1cb4cf4c880f8f1051075c7a05ef55deb24d20271b08e 271505f5c8fde0066f2d9683760cf77817ffe2c4d5c893994351accbe0b225d6 2f159d61568b96a1a1e32f9b8a7ea1c0fc1abda7fab425e8e3240e9c486a35a8 393b57d26e6cc5e1414d13605fdae00cccd30667af41b0fd13e092cee14ae493 3be2c76884c5880d65a4471e8271f55b215bc41477deaea0540656388dee30cc 3fe3afceae7f44195da06113ae2b5c7a2b0295a26e0c89ccb732d40861d1f031 4028d810fcd3bdaf61fd95740adc44dd891ccc3515ecee1bdd48d3aa003ac698 4193b064a474cbdafeb4e4cbcbb4c698ecc6aac44f9d1e64f89d5a6c80169348 4c9e83f59e3ee846cc69bab24702b794a144bfec8c7fa4ceca0dc9f8ed1eaa0b 4d26d24a371f32d9c3536558034e1be0cef4e26e7361b6d0b48eb9d0a8c79566 4e85b4999229d7ac88a8dcda9b88aab7bac6f416d9c344f2d1e980636ac75da3 553ff556af7a4973f5fd8979d2252831ab61fc88e36b25a4e675c42cc045307e 5ba94db534b213482e85b9fb04106464c27f11e7125577e3ccd1c9935b5a1655 5cf1ad8db8fa28db40608b6b1aede66f0850bbd5309cee33fd23cd1324281b7d 5e559ff2f01b43ee98de1f01d68c05557fdcf5f244162a27a563f277c574a0eb 628959cc9ea0ce554d3e28fbd9a7748ee88b1d33fb236c6432cc99ad00278c14 68cbd8c33109879358d5367d14543f4414467af226436a7970b8845ace1b0deb