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
127
reports under this root
#965,700
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,700.
12793e8b01ed407fc45b38bce1f4d3350347fc554364f5d3178a5af65acfc231https://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 12793e8b01ed407fc45b38bce1f4d3350347fc554364f5d3178a5af65acfc231 crawlcheck-2026-09-05.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 127 digests as plain text, one per line; the first 20:
00a0b6c017515efe9b169a80f9421c9e4f70d8c080a571936dc620f1a70c0058 063df1d99f43c6a0587b81ece98101aba2bedaa44c21e2d3c35847ae927eeb6d 077e6863174d24c984b2a0b2bc30672e11e81f94ae0ad9c5125b9970f474a081 078c57c449109dc9ff6c26ba49cbc2f532a05aadbd1ffff028bac1ad005d9800 083a9ba8e4569952b3666d3bf88702af607ea6e44b1a6e084843ad66921c7d98 08bf7d237358166ae7586a19568e53f5821f6a37e9d9b5a86b4411fd7cd70cf3 0b7d8591a1c2fe53572aa675528eafb24e4f554bfdab1c72bb4b95d0829acdd4 0d21ff1bdc049177b0c6e0d5fa7235a2fb62e52a87fc169653c9c78c60f4df83 110dc537661fbeee7b220e46879f38cb4dc1a99b0e2a12df71c66aec2c9f0900 117913a6005f3ef66a12ef707287c0ffafffb0a176b70ef06a7370d4295016da 13e011ed24ed2612abd2e6e1c97b2bd945c2114da5cd1d3a25b31184d554772d 177d3716e2f88248761603922b83a1ccebfd9367c9fb4103925ba5ceac7fd64a 17ee204cb1ceabb8992c5677b7a1aa27c75f1fe411e6cc7ee73e1a75c4a2d1d8 19751bcfd4a23c0608570736cec39a1f697678a9a1792b91417ab3cca1b98821 19b2724ae0776f50ef84422f29607d027e6fcb8ea24f0363d2e892af82663047 19e21e9c85488a88e8f3bdb15a65230ca3c47565419caed4b984678dfc18d969 1a585183dd27ab537786d5ccc24db2887897aa2eb478d73cfacdebd122093151 1b31f11a59971b954ae5187ec542af315e3257b9481fe0c1d8b28d5effa7f97e 1d2b1b6223f2ee953777eeea9dc56c6b34a8621f2a525d4494bac34cd947a9f3 1d64e58cf2c8ec1510f4e6c68d7d74739f2e0ea5a18f5c0c3acc996bb2def6d8