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
113
reports under this root
#966,892
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 #966,892.
1ea5af9306b4f28aa9af76fc2ee5c96dd0c02e5cf01a92f70b41d9c700b39732https://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 1ea5af9306b4f28aa9af76fc2ee5c96dd0c02e5cf01a92f70b41d9c700b39732 crawlcheck-2026-09-13.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 113 digests as plain text, one per line; the first 20:
069cdc14c74f6585213ae88ea765f707a204aca44a1e2452b2e066a4d4ef6e7d 06e0d62a3db53d042198d0329b5f22e810591a1d8ca8cf6ce268f70346b062fb 0dff95bf21350c95dd0281d68e2ba7cfd27392b7a48141ee000bd98e9afd8d05 0ef773609b430f942af7c68a0b07422d10060ecec0e15736cf06bacab3a87a2b 125a5c7135d80b109e7585f3295b8d86216ef592272d51ea3ccdbfc1b029486a 12ee5ad09cb17ce731f8abffe0a88e3ddab1db4452be77330b0e62aa2a941218 15081d2562573c87cd74f57ce4ea1af7b93187100782809a632b99de285ff830 182fa4be37c0f669bc46cb1b727d93ff4741257066210166e1f54f708654f85c 1b17a3b63e597cd99f6dd78de8c530bd194f2b32ea6fd130c0254b16af4508a6 1f5945eb06430baa6e88dee57427535518dd31ecd6483ecd0ee88745185c7ce4 219c0dc2b581f42aea7befadb79756e551911481354983848f86f9483be5ad94 2255ba7a2c7b44310b0b2eb2f117a9e30925fd7c19f87c27d3e5eba3a83a3f27 24e3e7ff18aefd68dfdd121fd1bbdc7e1faf27f62158a25502b53689da25b8fe 258d1e03be628368e9a5e36a739d4731b21ad747c64938007cae0bcc1a5b07ce 278544eea52206815212c798ab500688fa274d4b21a27f66454c8542396fab6f 284755d579cbf9b583b630fce8254772eb6bf6d9393e39ec730c3e8bdee2ad60 298aee08bf78245efc37ab5b898a888454264fcea0954b27d8e3ae36377df3da 2a4829b736d7f36a7c341ce9f11bcaba51dd89d4f2b2c5df2db67d1cdc88f144 2b27293fd57bde34dac9f969ad0bca5608c011d8ed91bd8b7e4e1fa11c6028e4 2e97d40a27b944c1ea11f7e6e8de2a0b786de662d1af70f6caf96bc5a2bd70e1