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
#963,657
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,657.
14c59c7b20abf69d8a7e80b9df60dca0cb5f6c72cdce2c62ca9b8f9238ab333ahttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 14c59c7b20abf69d8a7e80b9df60dca0cb5f6c72cdce2c62ca9b8f9238ab333a crawlcheck-2026-08-22.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:
04e728c8647c08216fcf2fb2a187d50a07d5b1dd762f16d4499671ab1052bd80 05db9aae30a5910722ca4dfbe960980c115db0c50fc63be24066240f4958610e 078d96faa998bf1dfc735e2de710539d6ca5b4e0ff4cefc56d384f7469902272 0fa1040ac57cd0df5753fa0ccae93dd71ef581638ac149d6e7b4a1383ba7a09c 13f5f67b95aff0a06039e8f93f6817a7d4a402e44903444937c49256dabafe5c 1f79451d0193e89d735cebb854749f07baa8fadb72f6ba2d2b09e387c963fb45 20e29fad2739bfe11503dbdd67d59f3fedd0744cfff983e2bfc7b32e6b74aff3 2976382473b3ad86f453271ac475baba4897d93862f94b82dd361d6df941f533 2a1334b5aeefbc49bdc4c3b97d3cfc1aec5d0ef3ebfa4cf34c63c36463ccb2c9 2aa01aa0bc0f11cac94f35774bb0c89703b93aee55c519a8784d2658371e88b3 2f6b0bfb60d2acc6f14803eec9c4c614e401969e81dcae99f67b080a6aaa0b24 361297cb9386da7b493d9fb8ae724450742d7c50d4579ed78b493b11e219624a 42444e1583e19ac37e3e8da522a453b16ac1643f064a24f979f8937553ab1a84 469876b05a9d9ca4937dd44da995df0f078440866217d72571efad5c59f98c44 4ee4b4e680284335b515f83c372ce0b6bb23a564e69551f20f6149b6008debb5 5b3e1d1bf474b0e773ffb8a6e0e56cc7bd9b3968970c29179c7a78a12c4f7313 5e026c60c8c4bbc40d97a83a7576feef07b5a2dc1c29c8b22dfba24a15018c5c 634c52e6e4ce2b4600efe7c78876a1429aae0caab944215192414ce30b4e2c97 6a0702c8454f5abe926e1db7d1550d5348177f21db642c75ed72ed7324f2aca3 70952c6a62455ccf7119618b1d1bb4011c4f171c59cecfa2e52f73373b399441