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
186
reports under this root
#963,370
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,370.
66672fa45b11ee0bf160071d55fc544f7599e4086ad56b024b5841aef1c9867ehttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 66672fa45b11ee0bf160071d55fc544f7599e4086ad56b024b5841aef1c9867e crawlcheck-2026-08-20.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 186 digests as plain text, one per line; the first 20:
015af268d08a24bc184310131a0a240af275a6a342e5a25dfa1b47ccb2aaca88 02f8e2f18568b25c858509d121baaeda0d12bdc78e1a3690e31e5f77c6a0ebce 0379657ee7f11cb6d779c53c2e9bc663857594058f7ecb61fe765bb16d34a03c 04c2f0d1222cf5bbecc4366c5f10b7cdaaf5f1d3db6a398ca32d2983b562aed7 0529a7b1680e8d5d46ec7386b9c9917c4e5a750a0687446e5a86dce2180efdb4 062f34581964600eb4543bcb5f0c565b9e1b109436e224f05bdf5769e008aae9 0a9b3d5e1e1eb7c719fc4cda78e913c4cb8dace53db0689b9cdb40e09b4399ae 0afd869cc11565fdfb038abd07aebe61e3b706b285c52647ed32528eb05e01fe 0bad560bcdca9a97b53d1ed5e8849ef9e6dd5df8737b3849d89d30fbfa5fae8c 0cdaa951b450f656a00ed72dd39a8a2962a4b4c626d345f3798736bfcacb54c3 11c9f61486e163883076abd9f254c3427b17594f385479d7e34bbb7d2958d188 1275076d7e1e6382b4af2bf546c7d22123cfdc993d2b8fc2616a4093764e38ae 13638d0ca74cff80554e9fd44708e19d247c1afd04556710b81318505e797649 13841502c186b1da8e866ebc76ec294ca234ce307b4bbf4c38102fd20e6d0982 16c1d1d699bf4194e11c90e9d7b572a3d346f66b7bb8088cb98ed6fb41a3b146 18e569e76a90ccd1e6341cd6a559d78350199e7cd0d95836a70371c937c5b903 1b2d9ef3dfbd0756f706dee6bd68cee7931aed9fc2c08ae65edf5b68521fd191 1c78af34d51c0a4caa6d6ce26dc5acbb26bda0cd3f2623f0959b5cfa3e17b0a1 1c8d944f4a95da6771846780db0d17c8f6d8fd3b0d601a8d35c96b4242cba36e 1dba72729d09fde7086ed3cea80556b82111985ce668407dcd0b5b3d1c50c649