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
98
reports under this root
#966,592
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 #966,592.
b593a4b77622d379cdd51e92403d005fa71fc877decaeceeef01fb07a14b403ahttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d b593a4b77622d379cdd51e92403d005fa71fc877decaeceeef01fb07a14b403a crawlcheck-2026-09-11.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 98 digests as plain text, one per line; the first 20:
09954cb4ed0132abf4803f0bf53d36098707372ecb173fb3022c2dffc37a29cf 0bf1010fdba0cb0db5131ce7e99887c3d0b4e4d236c2a39117a3dd365bb8cecd 12144739dafbe58f8332dbcb43fa73c4bcffda246fe9df39233f9553a0a610b7 137051bbfd41cf9d5a0f7f3bba9ec94b301639bfabc8e72b474f0aa7d8fbfe89 14123c7c177e8ac7ba893ce3481ea804e257db726353653f78e2996af54f0484 157d5ddd9254ac350ace16ab5537ab094b1929da695f2ca22d72295004f0f7d2 174eae36ede13ad2b3167af4c4ba84cafc3d300d649ac66da19ebd72ec63e9df 19bebd90558d43c8b662bb9168c251a2328d63a7dfbbce7f81965d23c05c5a15 29d3cdce6cf7af7c389defc661d172e26a9610bc63206e4c77fa3ea2e7dbc611 2a95345b60841fbaf6197ee31e78b0e2ef765f46ccbd71f930b946ad03c4447c 2c990470636ab99fbdc164317b50a7f93a027bdf0567ea3a138d07abd2ac49aa 2d586146d244b6bc21e9630f88f94495e6649925496b20b203110331cf4c16fe 2f874ad612aa7b4f436ccae03c43665b47ef11a717741817f67a3a0339ebe9e0 37b971c0afffdb9e9b39ddecb1ee9a38c1cc1626355ff4b00b7e8227043f238c 3850095d0869c4848922a7bda480ce587f066d0845ab9cd88f18a598a86075b8 3e586579c7def57f8c018047cb1ced6cb6ed36a37f1623e99833d5722bb4618a 400e7b9cfd46556652f8b20b9e22150a9d3c9279bc64c112ec77fd542f72c783 41cd6c06417311f55e3856104dabe8025663029e5caa63dff9ad031e8b872aa2 42e092e1f2dee3b95be3a55b4d7435bdd92f4d1bf689449fb07900bb11a54418 44da37c90d72189857daa7562529da525c2bce8d2f33d7045ad207b91fe71418