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.

91

sealed days

47

reports under this root

#964,812

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-30

Confirmed in Bitcoin block #964,812.

Merkle root
d4b7c1a85836e3e38c5931ffa120fb8c73de6ac308e1e8641f78c0ee933274aa
Reports covered
47
Sealed
2026-08-31T01:17:21.792Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #964,812

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

Verify it yourself

ots verify -d d4b7c1a85836e3e38c5931ffa120fb8c73de6ac308e1e8641f78c0ee933274aa crawlcheck-2026-08-30.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

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

The 47 digests sealed under this root

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

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.