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

78

reports under this root

#963,512

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

Confirmed in Bitcoin block #963,512.

Merkle root
cd468f5937873fe4ce8e7fa0a19f97ef841eff4762b9e5b90b19fc7e90e63473
Reports covered
78
Sealed
2026-08-22T01:17:41.734Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #963,512

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

Verify it yourself

ots verify -d cd468f5937873fe4ce8e7fa0a19f97ef841eff4762b9e5b90b19fc7e90e63473 crawlcheck-2026-08-21.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 78 digests sealed under this root

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

0322f882136bfd6714148d9607b8dd979be129ed12265df0f7aaa0a98ffe4d87
05477f2e5900032d32fd51bc686f05def435cf06dee748905594ee371022394b
089f7fa0fbdec9285d54124b1e30155ab3b0a339451e60379d721c9ac5ff5e3b
0b7c0cb6da912596a8c54f7ea87fbf3bd26c5e7da266f19e2142da50cf52ca5e
0d23c6d807fef5ca0b4fd67c3abad56b237266ea6fedf735c40666bd13296f02
0d6fe89fb8831223e3fd16d7eaa13d412676db1d8a19632c9cf8ac3abc6daa35
15d0ed7a9edcdcef275a220fc3b26ee2dc7102a9c9268a6e3ead357a87e5b8bf
161b0c9da1ae0a2710655ca4018357d6e82977cda6c202becfa09889e68d213b
1759c57c9cd73a90afc5f851a5b06fb2ba815b6c7b9d7d623c96bc342e01bc9d
184d2e58362575396052b731b14e238fa33e71d7e86f47da72fbd8368695f1e6
1a2fc8c3390999c1e4e7ef264a61de72f089d8f96ea8329319afb8c914cc87a0
1a6478fccbae1841f46e33cc541afdd4f7638db7dc259d52bbffa69ad1a396da
1b84afea15a9c172333969b072fac03314aa8e1d39ddf4d5cd9244382d5fc52f
2324c053fe6ab3a59546521ad4787a014b55af555f03967b02dabfb627475106
23c2b655922ea8d2b9fe486c3a19a2769c6a8e5f878ba8f7c217838008fc553d
244802b01ec28589b45defe6913ab5997f85735ed433bef9ca07704fcbcd192c
29d0c3b197adaa076aea84e7592435daf9b2fd49bc80366f1e95babc99a7a5b1
2d153e42ace1d3529ca2ceb8b252e523f05a71fbe3a026ecfa1c9eb6c5a83d98
2dec635ebe9f5532a0930fad682d9e1f5529bb738ee85af023b8450236805221
2e9144a9c598cd93d52832a32a7011bfdc0b9567e460ac194b7ecd09b39aab8a

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.