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
344
reports under this root
#965,109
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 #965,109.
ae130275fe7f77708ecbca864d4a4ff1be9b22c792ccc9ad64a4c92ea31794f9https://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d ae130275fe7f77708ecbca864d4a4ff1be9b22c792ccc9ad64a4c92ea31794f9 crawlcheck-2026-09-01.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 344 digests as plain text, one per line; the first 20:
0046bf005404e72af6b51443bed2eb1fe8a29aa8c4895c4720fef83287f5937d 0115cef17a7c2350cd6155da8fb869d47c6c096707e633363e00f27a97bf0573 0126c045c1d63f3aabf12a2204178fcd7b9004e9c9839adfee1636fbc6339680 02792d0d5d3fd0ae3f1328b80d77ea2466f5b06ef3be9a27e1a0284597f7fbb6 036218ff8e9ce2d28f94f96ffe2450a8624d90442b0bcff982a6e4915c7ef371 03e9d2ea398410ed7542253f3ad340d9a3a5ac13f48556bdac6925178a07b57f 04a8ce14c2b047791c9dd4c0e0ecbc2ec83686b1b5e0f0e05158bdf0c04e1eb6 04c07cfa79b5ce88b85e7dbbc511c0075da0ebdfe2f320fc93f2350b5f130f5a 05013fd1eabc9c1eeb3ed4e172f93f5733a738a2e51dc049ff66fbba8fcd743e 05357914726b225b66a59e7456458a452d99a1efd62cfdc113aa93b087b95ece 05aa90902476e817d15457d7a79c0e0dc5835ad1a64887d637c99796fbfdacf1 066c5525f16299db35925b62cd4e74fc3f9f58201dd39101b9e99a22db0297a5 06936dc2d2d9bf4f307037dcdbf8677dab3551e8e5e360b8d3647c7516e7a233 06d82e0f5903845789cfe54dc6b23ab2da100c2455dba772c636c73b6509ba59 07131af1ed55c8cd72bdd417d6bdfbf1360e8dc15ae3f41d5fd6d12d6ef79bbe 0784bfa81f9d80e6b838658df1295de3c2c5d10497b42a864fb82912a42b534a 0809c1428b35a9e017569fb23cdcc912a273a5cad284f258a3c9fcdfe5236a67 0936e415f229f3b1240d65d1fa27158024e2a8038a1bd345a98412c1175b957d 098b6b966bb8f4bbb84f46e8eafbf4eb84c7ce43c543f272b314ebda7b2b4897 0b8c6895ae9a083462b085a5d3d9783a3d3db9f3a5426d69bba37455307ea328