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.
91
sealed days
142
reports under this root
#966,293
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,293.
dce9a6c682b44c591254f25ecbc3c39009d9941699c1f9cdffff1f963a8841d9https://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d dce9a6c682b44c591254f25ecbc3c39009d9941699c1f9cdffff1f963a8841d9 crawlcheck-2026-09-09.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.
91 days anchored. Each links to its own root and proof file. Days are sealed once and never recomputed.
All 142 digests as plain text, one per line; the first 20:
005c313dfaa3eb80af49e71976fbb649c179f20ab0f023c75d933c787634dc22 007398d0a192935fc3bf699202f964ab6b1b001f8b4adf7a1fe780951b8dff44 01f46ac37baf187894dcfee4320b0e0e8fc507c040b58e02a265c69ad3127ae6 046d0fa41bee6217f94c62b403060039878588cf76fbbe8ab554b5210de9533a 050f331d32bb5766d93054318b3f574fd6a5b0d99a5d9a7b16058d2e76901f18 0620de0619ff792653eebd1fd4dbd20a2117c067d428b56b74f464d11e1bf13c 069d36bd86cac40444874db724a8e59adb7149b19d02edeec25c5a794a1cf25a 082586a5d9b0867e58bb62d97baa0b5b2e9a202bdb0c40219c4f406554f21615 08deb626f9e5c4daa569df023787f0b93c0dfd9ae536a067997611d746f38d6d 09486aa65a633f052ac78a5e04e42a8809c8d8d885891b403f6ac660df68e4de 0b3373c519392dfa0a3d2de823cb99f8cd936e29202aef9c35cb36c027b77710 0ef648643754061c5518c34135f2e2b6c1f46ec02ca4df9379be215d834f0a20 10047498f552627a5e2ee742fdc1f4517b59078e00f3544c428ca134245320ff 145e9397516b969b23ccfc9d6fd8f39bd4597d5b58e137eff452a1825abbd601 162d321dfb661f79e45e065c98db8dcf3dfde0b3aa92fd01670b650f0df0cb01 1814f36bdc61e2e7b8601de20f51017d62558efaeae2be3d998ec926f72c02af 1f1654d1eddb6d4690d9a88f4b5f358934a56f08e33313b8b7cd5aac147ddb7b 218f6e3d1af116cedb3d0076edc7c71e776210d07da75d2bd20e67a8455fc902 2276d1a550b83237120f3424d0050cee45f8d2205b6658cb3b7dafedea57f8ee 22f92971c204abef440fd886cd80d0ad3a38c0b52fcd9df0e22f6574be5d223f