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
281
reports under this root
#965,241
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,241.
3e9891f1c6cd4f8d56de7cbbb535ba23a3b67552d4394482065b191d1049509chttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d 3e9891f1c6cd4f8d56de7cbbb535ba23a3b67552d4394482065b191d1049509c crawlcheck-2026-09-02.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 281 digests as plain text, one per line; the first 20:
0035931da50960e05351b91cbd54d82eb7e90a93325e4a5df3e3d3ebe4c26fbc 00da6f035330cafa0f0f0e20c46cf6775672171dde8091865af8e79881502707 00f8cf9b9c53a0d73d75d483e289ed665ad355f0939a7bf5ff5c1dd163b6f948 011e4ec920e3203dded0a918625ecdbc1d4eb62e39d976c6226c51da95b8fa37 012be5a9d6de07403cf2beac4cb2b29118619a4d8171e42b96078106db699fea 02848d8d590e8614adcc91eea5dcdf96ee99733456e24660048fd416144034aa 043472247a171bbb59a871cae263d9f1aa91f9898319d91fc0cf4085adf9fb5a 04a614e2a45144ce46e10c353dfc66e7e33f056be2fe8a0bf57375ba12e4dfb0 099e79915fd5cceabf6da24e85d93174e3158978c20d1db8da4efc1559905986 0a33cc7aeb2686b07097ce85e98f1914b1f6719df3a543b81861cc361b01e201 0bb3627a2ba9e48534845cf5437d7d7104ac716f3d24af34fb52255d79b53e2a 0c85bce8e2bfa207672324918624cc4aa0ddd3326cac250610bd5abfafb3f9e1 0e65a51ae64725d1d88989aa7c8e3dcf66ad819c85e9cc60007b28579dcd458f 1079bed66d1a9504c597b1ec006e693af8018723ace81c98b1bb3089b9c8d69f 10e39cebf80ee07b24af98a1a292a3318774fcb59c819bebdfbcd2b4392377ec 121ae2eea5d1c2b20173fe4ec21434a9dd4a4ddaf59e202614c0d82479c5ce3c 14ed8c96c813432808a201f4488930031640f431ce14a96f5f125ed68870d145 165cbbda339f3f69d1559fde963198f4e563e067d89d567da5e5143b14f1684a 16b580cfd53197dd2e5f481cd8ab310803e0fd17fdc529dda9c78cb86f10c215 1771838e08d8cbf3322bd7ddd784f5d9411fc84f811ce8f94206bb9dc5eed592