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
92
reports under this root
#965,865
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,865.
90b4f3a88e2aaa02070a5b4d7f235ec5fb0cacb883370d0e7b4e0a5a76cffc1ehttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 90b4f3a88e2aaa02070a5b4d7f235ec5fb0cacb883370d0e7b4e0a5a76cffc1e crawlcheck-2026-09-06.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 92 digests as plain text, one per line; the first 20:
0031ab23633b81dd8ebca2f5636bcd6b9749e82d09d587b8c1b1c8ee66db95d4 00a8f0243463c1d7d5ffd8b38aba74c4df08e1b2f356332e05956bebb1447180 06e95fa3f604054253fad6544efc258cd525200fe915e01aae75078141d1e6ad 07ae939c17e4598c20bf50a2dd324667164c4ba587a0653db882c7f6cbea27eb 08f0dd191059f41af566fe5f541af721ff6f16bf67f23604940a6402a10e85b0 0ada12a9351e9a20bcd138339d8eef9ed5a8e96af6788be3a6738f8f2b0b4ed4 0d88e83f3334571427190e5ecbde22f0ff6f4dc88834ec3dbde73158f5c65d2a 114c13bc48e54b6a341314dd84537b428c5a8087382a754508bc4329e94d325d 12f4f805072100706ab8f54899d88b408b5f49623f8fe6070588c10985ce4a41 1523bdcd32dcc644eaf3c4e076d30d3f8a21aad1f9ca70f680c2cd66bc68bbd4 15d934e87f6417c57e963600bdec55f194a7217c28165f5cee9066a61c93a88c 162b21e1e5cda706085af0a74a03d7cbc36b23c2e9ef072b67af8db393c1358b 1bad8f3bd52796b2b4528b1d3c5d7f493bd3f46afa449c33d406919532349ff6 214905b0baa204d551a382b0982dde01e02b91455359d5555690abc42273e48b 21dafc4b555049ecf97b4a3dc3617a1aece12dbe6a1514aa1fc3b0f26646e4ac 25650226ef897e69883d1285b9da20df414890a27b6219b9e701cad62191ab2c 29583d36e7aa19a10d7dcd9801c2063c792db1da07d869498f031a2bb104db54 2b2f07e8f81539532534132a3795fd2855a5e2f8b026934da76fe362c76ce652 2f42d294b2cd99a5910e75035c1040707a52241885fe5e3945fb242e56043c3e 2f5cb8d01067151d69d7f6e01f783c19c18307f63c59394ffdd4a247e31d66b8