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
87
reports under this root
#965,547
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,547.
c9ee422fff056f87f03a59534b1ac51a2f6ae8808c3dfbfc25ff746d018dc74bhttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d c9ee422fff056f87f03a59534b1ac51a2f6ae8808c3dfbfc25ff746d018dc74b crawlcheck-2026-09-04.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 87 digests as plain text, one per line; the first 20:
0367f52413d572dd08ad299023a3c2454c026be083a15b76917588b52be21a4d 05e5ab80579a923bd5937863ee4f7de64d912fe1928f5e9045d98a5ed86dcd17 08895ddd73eb6092ec709b4d28901e85fce9e8f8ca8bf73a888498c1b3595e88 0c9b87de7b9b1837e97264dd1b7820e597bf1198e1647696d367cd0b0b7704d6 0d89168d04f4a9c5c9fff3256e2f20724760672457868e5f4775b3207ea12b7b 100c10e7ba31e8dd2dcb06e68f88df9b40238cc1df1af17749779515b08da1c8 115018257d8fb449ef040731910f772c5b5d13f6b11078d09afcd2205a8dbb50 11ce622dd27abcdf328fc960920b277495a584d56c1b0fbf92c1500d5d5bdfdc 14c96a5da948498a0df109bcae412bcfc085dfa3ebca1d3bce8b6e3f9c684dc7 170bcdb9ebd9343bd878a60850ea857f7cfe1f59373a939f7026d075539d0e8d 1a63cf7c9a89b58eca58033d7560bcff0ef36bb47178bca1cb5b7869a4d6bc6d 1f656cdd5bc0a3177f85242d6d12e4c6aa2e3416ab44efa4d34f2fd489a62c76 1ffd55a7dcb1e80e8efbe98c6ab1d0dfc63b6da15b8f20ae7425d60a77927d56 24d0aca0835417f5f01d605a4accdd9b1c6b28e13b2e692c2ef7b934d3ee4bf7 2cebade96af4c8e121c971210115d5d5eeb0387d926a2d4ef753618329534203 2f28af47901b36a772ca5132ab08f788f1cce0d60693ce6d2300e9ee1fd0f472 312d9d48ec42690d767515bf4062e0617a3eb5cfebfaf36f46bf88e70c10cc6f 34332807b27c192ba9603798c816ca0091f8dec27568ad8858b17f237ea0447b 35f1974c844d56c9af1bd812082793cd6ff159688ca989c2fe1204b94a619c01 38673b58a098a85a7d7e660851bd63ed1e93514a5728f8c4420863efbd019756