CrawlCheck
Proof

Proof an agent can check without trusting us.

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

51

reports under this root

#964,079

bitcoin block

Three proofs

What each record proves, and how to check it

Each check runs on the reader’s own machine, from files that are published and can be kept.

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.

The latest sealHow it is built

2 · Answers

Signed with Ed25519

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.

The signing keysThe offline verifierWhat an answer holds

3 · History

Logged, chained and witnessed

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.

The log headThe latest witness

Method

How a report becomes a proof

No wallet, no fee, no key held by us. The proof is a file, not a coin.

1Reportmeasurements only2SHA-256one digest3Merkle rootone per day4OpenTimestampstwo calendars5Bitcoin blockpermanent
  1. 1

    Measurements only

    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.

  2. 2

    One digest

    Canonicalised with sorted keys and hashed with SHA-256.

  3. 3

    One root a day

    Digests sorted and folded into a Merkle tree: parent = SHA256(left || right), an odd node paired with itself. Arrival order cannot change the root.

  4. 4

    Anchored

    The root goes to the OpenTimestamps calendars, which commit it into a Bitcoin transaction.

The seal

2026-08-25

Confirmed in Bitcoin block #964,079.

Merkle root
47f4b0c2910d55c0bd7fe85b098228c9ca7714298f620de62ca3ee77bb05870a
Reports covered
51
Sealed
2026-08-26T01:17:36.172Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #964,079

Download the .ots proofOne report’s receipt as a single file →

Verify it yourself

ots verify -d 47f4b0c2910d55c0bd7fe85b098228c9ca7714298f620de62ca3ee77bb05870a crawlcheck-2026-08-25.ots

The 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.

Ledger

Every sealed day

90 days anchored. Each links to its own root and proof file. Days are sealed once and never recomputed.

The 51 digests sealed under this root

All 51 digests as plain text, one per line; the first 20:

0d1334a699ecc72c5defac03fc30433ca761c6cdad04c9e4d34b79e7a3533b6d
14d6d323c84aadd9ea5b7344e65fe1559836fad315e0f17f2ae6814d3a967d27
1e9785493188e25a6fcb4b3ab0b61f9053ad9a37a69f7bc13d806abf72bfeac0
21373d00555e781934d1cb4cf4c880f8f1051075c7a05ef55deb24d20271b08e
271505f5c8fde0066f2d9683760cf77817ffe2c4d5c893994351accbe0b225d6
2f159d61568b96a1a1e32f9b8a7ea1c0fc1abda7fab425e8e3240e9c486a35a8
393b57d26e6cc5e1414d13605fdae00cccd30667af41b0fd13e092cee14ae493
3be2c76884c5880d65a4471e8271f55b215bc41477deaea0540656388dee30cc
3fe3afceae7f44195da06113ae2b5c7a2b0295a26e0c89ccb732d40861d1f031
4028d810fcd3bdaf61fd95740adc44dd891ccc3515ecee1bdd48d3aa003ac698
4193b064a474cbdafeb4e4cbcbb4c698ecc6aac44f9d1e64f89d5a6c80169348
4c9e83f59e3ee846cc69bab24702b794a144bfec8c7fa4ceca0dc9f8ed1eaa0b
4d26d24a371f32d9c3536558034e1be0cef4e26e7361b6d0b48eb9d0a8c79566
4e85b4999229d7ac88a8dcda9b88aab7bac6f416d9c344f2d1e980636ac75da3
553ff556af7a4973f5fd8979d2252831ab61fc88e36b25a4e675c42cc045307e
5ba94db534b213482e85b9fb04106464c27f11e7125577e3ccd1c9935b5a1655
5cf1ad8db8fa28db40608b6b1aede66f0850bbd5309cee33fd23cd1324281b7d
5e559ff2f01b43ee98de1f01d68c05557fdcf5f244162a27a563f277c574a0eb
628959cc9ea0ce554d3e28fbd9a7748ee88b1d33fb236c6432cc99ad00278c14
68cbd8c33109879358d5367d14543f4414467af226436a7970b8845ace1b0deb

Questions about this page

QWhat does the Bitcoin anchor prove?
That a report with exactly this digest existed no later than the anchored block, and that it has not been edited since. It is a proof about time and integrity, not about correctness.
QHow do I verify a report myself?
Download the day’s .ots proof from this page, recompute the report digest from its JSON record, and verify the proof with the OpenTimestamps client against a Bitcoin node or public calendar. No CrawlCheck server is needed for the check.
QWhy exclude wording and layout from the hash?
So an editorial change never invalidates a measurement. Only the measured fields are hashed; the words around them can be improved without the proof breaking.
QWhich days are anchored?
Every sealed day is listed on this page with its digest and proof file. Days are sealed once, after they end, and never recomputed. A day sealed within the last day or so reads as pending in the reference client: the calendar holds the commitment, and the Bitcoin block confirming it is usually mined within 24 hours. The proof file here is upgraded to carry that block header once it exists, so a pending file is a proof waiting on a block, not a missing seal.