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
60
reports under this root
#962,654
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 #962,654.
de24796800c2225c2c1331e05f6b7d4f5f8a2a43212edb8b903f9d10ca859825https://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d de24796800c2225c2c1331e05f6b7d4f5f8a2a43212edb8b903f9d10ca859825 crawlcheck-2026-08-15.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 60 digests as plain text, one per line; the first 20:
009bf5513bb865068573d0f7538ac67be75aa085d416aa89867a427364d2e9de 08cc0c1108c3b99a7cb4765510c9b536fc650fb33e6daa432cf885b01d5bdc9a 0eac11ba6c9b476a976a774ac765c76169d5ce88ecbeca5336cffd9c4c93fde3 102a32b280b990f7da7d3f1a50258b5eb566ce5d9792a1fadb79b436a7a4f9b3 12046f3dd25a6caed089e356caf06d392f6d446105e86d01f5ab8230a22f31e3 132fcea6dc7705cca5b68ef5f520b60f87a8b67b30b0c19f8dfb4afe18a8cff8 13a000487ad8381e7c598aa2d329ddbf739ce80764a8dd5120020b335075b388 1c3f1a224172b6b6797262c3bdd78bd74e42d96c4baafecd815a86caca6a0ac7 1f9d1c35b4cf57ea0368925f746e49d17f9c2fa292f076320f5d4dd0c9d625c1 20fd229d349a5e5ee5a55abb12e5ea5ec0718a51b51a15f5ec955e9a1de292ea 25c38c3d634440e8df9d15b4d53b6814d85cd4d4aa98ae9204ba7164763f9f70 26a335090563642f7e74b474dfc966a1dc1e36945ade2775298a67a71fc2ca34 2bc46fcfbe5c95c7c4fc4c90d58c17885829e22f96ebf131da24dccb5efe24b3 3401ecaf190345710b989034b41849f89f18853b154ff521e91083086f22f877 37ed355d2d8f95b9ef5f434a908b2c1271abb92a728e0bd88d70b91efbd69110 3d0f3cf0d539243a9761b3b1c2c295f16143127bd2e3e67d22b8f3267d68f0fb 3ec7bb230f63f60505fd6924d8f32ebe9d30dd9922da3ee8244ac799a36a418a 3f43027c27f762fc2916d3d61554a3fd4db5ff1bc4d28b4e8de7dc3f1bce1b49 424aca2dd6ba9d1ce203ea874d0904b22b1dcd6e82f8fde3e9785a605f5830f8 465b84d5136669b6946d92942e4b32f20183c1fbd41766d9ea8fd6b692afc44d