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
94
reports under this root
#965,410
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,410.
9fe4272df0d17b27cc7af0505426ef49cebe1593a1afc6edf687f29091cb0d87https://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 9fe4272df0d17b27cc7af0505426ef49cebe1593a1afc6edf687f29091cb0d87 crawlcheck-2026-09-03.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 94 digests as plain text, one per line; the first 20:
0163fc0c696a22590c5af73ee13efbc42097debac385ebf401a030d91179e972 0260ccce9c2fc59b90fe57a84b7b6fea9bcadcffd3593d6016c601c4c39b142a 043492659fd56d9aba50e5746502707d53fc5674168617d2d379038fc1cf9fac 07343dc3a5165f11fa90e337d502e2793cf72bf62fc5b723aa5ee3925b54c4d5 085c1c370baa9b5c1d2c3460d0ccdd1f471ac422c812a53ecc19df020e1a0789 08f4a2eb5917c5218cc53d1c9bf34f249d9639e7faef2f323c9cae1c2ab121d7 0ca533b357f93653b66bbba7ec9f62c62b04a45b340231b8ef6f864697f77199 0e86894cf3103634d93cda57b7cc0c92352a1691942ee1284e72becd5ad1c8b9 10853a8ed2737a48aa3966c530c655206e538a2eca341ecdda33752451ea4e1c 12cdc926b1707bb0d6522dba546fa33ca1bed7c39deee19e92164c69a0af6e48 161043ff9bc25202e1d1d364c74d3be7e79124b5f997fc3109281e9ca32de950 17a1695322467626b3c56cb743e7d59b2d5fb74221cfcc116065dd29a7db85c8 1ce668975d220a2a8ea6dd6eaaf62592a5a89347e49a0ec02363ec44118c7bb7 1d23ce8ca1f56830b7e2653d8dd205be8672d3f5d30ba64a602c9dd8cea57a47 208309a2b6947da07907f2a60e3662c581565897eea9873ad961cfa3bd943762 20cfb65d89df1cdbf448f0ddd05a611d9846706cd2eeaadcd0f76aa3a35d693b 2229a0fead293ecf899b568c3216f60661c749b068faca16925dc6425d585f98 25b318877c54f70a8e91dbeca723cb7cc2789813cb4a210490876f41b3e83e4a 26b015dd9c6601b69dbc50f9aac5a1c9353149da16dad594daea27b6e5553fee 2a4431f3ac1324b1da4ed0ba6a2da498b6040f18ac3a1aea68825442c5c84bc7