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
47
reports under this root
#964,812
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 #964,812.
d4b7c1a85836e3e38c5931ffa120fb8c73de6ac308e1e8641f78c0ee933274aahttps://a.pool.opentimestamps.orgDownload the .ots proofOne report’s receipt as a single file →
Verify it yourself
ots verify -d d4b7c1a85836e3e38c5931ffa120fb8c73de6ac308e1e8641f78c0ee933274aa crawlcheck-2026-08-30.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 47 digests as plain text, one per line; the first 20:
10949576a6d2fa850bdf81b20b37dc72ce79eff7682e76a1c99653e600518018 14ad923c09e56bfe34d7350664b1ebb97792b5df403bb9696512b9331cbe1e8a 15e77b417edf7ee14179f02116195155832b819e3327df852f5b5d0ab8f0ec7d 2499ffee675605918601693405592c95363dccc023e0fe2e67807b9d5c9e17d1 36bf14c4e87d2379e2718994c85c27feb68199282a5f5ee86e7e60fd6565a8c9 39ffd6a83d5a87192cc660a0e44a6f4e8175c76db431b631c97420b499a8cd1f 3b77b68324d20b6c4ec481822cf22fcacc53dc7941c404dfdf396adc5727ff02 3c558982bc110bba515b035649b1119391adfb165bb5e3f310e7d70ec02076da 3f6a5820e03e064d271e8dec5a2a5f337457907b922ce5179e73ae0b748d995f 4413b722b20b1a49e769f3738aafbb9118442854c9c3167ea4758d1eabca7690 47e043b583bf6bbda2b56b4c10dbec9a098d4f1a1e67f8a344a38b6d3465eb72 4b585f63d4d2f44fd260b3fa367e1b9a24f491b04ea75499275c3ba57fc73453 600f87b33136c157ffadc26e25198e4139c57e9d08197360864aa4e941fa4877 63927e8a5b2b4186db00e44c39c35cff87f4cb1a649a9ab023c4cf92003884ca 65865a7d181ebe647be9bf6e805a54988cfdcaa14cd20edd42eb4db6b55f3f85 67d3e0d1a7ce5bae1a20f8dc08d8f739dfebf2fb5f0a4353ab929edbbf4050f3 7b3e0ae11ae141cddeb1795ce04789e6cf95510cd18cd4739c59084a78d36e2f 7ecbc2f2f5673c9596983a14cd6df996bcd029d8f0d24d51671b48e5e32d3025 81b8e04de78151c2eae82682e2c2fd81d927fdfa2c27d2b0b1c0913019b12df1 82039eafe995f3c1dec454040d0e91f023a555e9a0358191eeb072be55870d7d