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
1,819
reports under this root
#972,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 #972,410.
341c45f386d4718c0e64205491d73769c0acfe852da1a053d596f76debb21de5https://a.pool.opentimestamps.orghttps://b.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Sealed late. The scheduled seal for this day did not complete, so this root was sealed on 2026-10-21. The anchor proves these reports existed by then, not by the morning after 2026-10-20.
Verify it yourself
ots verify -d 341c45f386d4718c0e64205491d73769c0acfe852da1a053d596f76debb21de5 crawlcheck-2026-10-20.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 1,819 digests as plain text, one per line; the first 20:
00492b1142a59ade19e48b3170c8682e7b952045d1970b3caddddde53ff469f2 00540c03893acc32cbde727346c1909256dd9add13edb1292619a811c627e4ae 006a5b1c9e65bbe779b2c0b41f70feb35071ca8862fc60b41c2c05b559a428c7 007923e2146ad727c796217b4bea6a817baf5e98c6e9b45b952d70a90b1d6d56 007d54e16a020485ae1fae20583e814c84826687c94b6186cd82419be00acd4d 009bb47c14670f4f636cbb1fd99d39bc30c0ad0ef238b8a20c45ee0f8dd51cc2 00af8ca9ed2876ce80cfde5cb39153de4d53823d81fa2644b0ada889daaacee8 00b00bc201d5d47bade922da69bc6d80e54fd26a9079ff2b37beba3b3ae88387 00b7fc980442cbe4c38330eb32df224637d511486cdad5d31f45cdb91778be39 00bfc97ab01241ea318de89662628b6ae1f57ea4f10f0dca74bf0de9ce34bea9 00c63ba6ad42b7eab3d13db8d0b720958a85be01f3212ccc2361acf583bd4e88 0108da5283731adc08a493e467400bd5b4118b3123d521abf267dc5ba867e78c 012226c7503612dcfb9e36cc88102b87337c03376360ed71fdcc6b8bfa6fc2d5 017543af20f28945e8488a399ccbaa5ac4d6e1a36b5044b03f666e0e9aab2a3c 01ba27f75518fcb53cb672d1b86b8ac6107fadc555bb8a494de243cdd8b3ba38 01bc35089dfac474065b5cbbdc8b45671f1c7346513116e504ac4e96f99975af 01c33ac39bf34e9a9ea29a939769d3f2b2a55f32cf9d45c5ae0016869a7ec16e 01ec1e55fae1dec287f0d31147e33d94ccf2a1d1e00f31f26d2f882f4420f091 0226e862d0e4527a05fae6b9f5bc5b912ac4e61c1bf70d310cef07d0d00b2649 02549c71cfd82cad63ff0630e88389c6d9db673cd74196fdb9c768ae87ea8251