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
78
reports under this root
#963,512
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 #963,512.
cd468f5937873fe4ce8e7fa0a19f97ef841eff4762b9e5b90b19fc7e90e63473https://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d cd468f5937873fe4ce8e7fa0a19f97ef841eff4762b9e5b90b19fc7e90e63473 crawlcheck-2026-08-21.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 78 digests as plain text, one per line; the first 20:
0322f882136bfd6714148d9607b8dd979be129ed12265df0f7aaa0a98ffe4d87 05477f2e5900032d32fd51bc686f05def435cf06dee748905594ee371022394b 089f7fa0fbdec9285d54124b1e30155ab3b0a339451e60379d721c9ac5ff5e3b 0b7c0cb6da912596a8c54f7ea87fbf3bd26c5e7da266f19e2142da50cf52ca5e 0d23c6d807fef5ca0b4fd67c3abad56b237266ea6fedf735c40666bd13296f02 0d6fe89fb8831223e3fd16d7eaa13d412676db1d8a19632c9cf8ac3abc6daa35 15d0ed7a9edcdcef275a220fc3b26ee2dc7102a9c9268a6e3ead357a87e5b8bf 161b0c9da1ae0a2710655ca4018357d6e82977cda6c202becfa09889e68d213b 1759c57c9cd73a90afc5f851a5b06fb2ba815b6c7b9d7d623c96bc342e01bc9d 184d2e58362575396052b731b14e238fa33e71d7e86f47da72fbd8368695f1e6 1a2fc8c3390999c1e4e7ef264a61de72f089d8f96ea8329319afb8c914cc87a0 1a6478fccbae1841f46e33cc541afdd4f7638db7dc259d52bbffa69ad1a396da 1b84afea15a9c172333969b072fac03314aa8e1d39ddf4d5cd9244382d5fc52f 2324c053fe6ab3a59546521ad4787a014b55af555f03967b02dabfb627475106 23c2b655922ea8d2b9fe486c3a19a2769c6a8e5f878ba8f7c217838008fc553d 244802b01ec28589b45defe6913ab5997f85735ed433bef9ca07704fcbcd192c 29d0c3b197adaa076aea84e7592435daf9b2fd49bc80366f1e95babc99a7a5b1 2d153e42ace1d3529ca2ceb8b252e523f05a71fbe3a026ecfa1c9eb6c5a83d98 2dec635ebe9f5532a0930fad682d9e1f5529bb738ee85af023b8450236805221 2e9144a9c598cd93d52832a32a7011bfdc0b9567e460ac194b7ecd09b39aab8a