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

98

reports under this root

#964,508

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

Confirmed in Bitcoin block #964,508.

Merkle root
73d9c372f7553967a72493f1a31af77f2a692838ae9c216b1b4784d37b4f2ffe
Reports covered
98
Sealed
2026-08-29T01:17:42.297Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #964,508

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

Verify it yourself

ots verify -d 73d9c372f7553967a72493f1a31af77f2a692838ae9c216b1b4784d37b4f2ffe crawlcheck-2026-08-28.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 98 digests sealed under this root

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

02a5605bcad8c0af1fd0b307616f9309c5971706fcb982748cfba70782dd6375
032fcd4948cf31044a4e5c798ba3fdeb70ae29ec86cb60e63ff5e4003834206b
053cac96199d0971df400317b964afcdd2349e5c483759ca5715f9f70b1c7aef
074f68844d3c8f0732b3fd627b94fcc64ddc40e8a512accfd9c9dbc30cdce81e
08d210a4681e898557df1cc5362a443712252b1854eff4b49588d2d83c99cb2b
0f2878ef132d4a749d5c74889c5a9c28f1a76bba67b462c61bba2c93c176e0b4
145b9ae6054d868d07594fc281f1a4e585756cc3facd4e17ae4435e85d13e27c
152d8299abe7066f39dcb1bb98c9504bf7742d192987f249d5b67441ee49df67
16a56101cf8fdde260a69fbbf90b411a361cc5375d4fb7d2fb08ea723b94423a
1878fb997dc3ad623ebe177de80f67e1e7ad277f24f5f4b30c2a47513a5bd162
1ac2ef0f31d2381c55b149cdcdca4c080fef351425a7b90193b74cbfcf50de31
1fb78f35d52568bb2af063799e802d972c165974007df2d618f0e05133cc646c
2022a2f61491f6f62d3e39da637d05595d44f582d189568dbb3cca5f569a0aba
2eeaebd995548d5572c39520e332c7f9ddd71bee3613d4a69f5e920c0d99a4ec
3147235b697f16a3ff6f5716303f1ecb62ca72eba31f3cef682b33921dcd1762
3539dc58d4806526d47ec796c3f5da26e548e3584321eb010b7bb45054031d54
38857b7b59584dfb1e64e0ed0f8d5e08d7be8245bdd5d39bee97db3d2522894e
39faaa2f9b7218e048718a037cce64b16b1b6182b3ef904091549272a293b1e2
3c1eb51bf72c211bd80f79970e9d011c7092979f7a8518a1fdc32a124ea89f24
3c9f4b8de1b5a9b887dbbc8a12159f2432723feef07d2b0438150ea84a937ecf

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.