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

34

reports under this root

#963,937

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

Confirmed in Bitcoin block #963,937.

Merkle root
7644633ea3c78c66f76615c63d3aaf37dbef05d62ca7b25155df62cca6e11c17
Reports covered
34
Sealed
2026-08-25T01:17:35.766Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #963,937

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

Verify it yourself

ots verify -d 7644633ea3c78c66f76615c63d3aaf37dbef05d62ca7b25155df62cca6e11c17 crawlcheck-2026-08-24.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 34 digests sealed under this root

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

0213ba6e4a2f78fb587534eb934037147b7194fb85b4a59fc90d2a998ddef9f8
07d86fe6c8a3a8337eb77657c548e7faa534d181240993b6dea6e9855742c611
1c5ddf014ca0db15c7fda46a895781b9cd04d82806e5e7f2393b7aa0d621003c
2716aaa34dbcd32598e40736371963636e8cc47af105d510f6e179ebb2d5d4f6
2c47171bdc3099940b2835499b969c8bba7a9a17db94c6f1d0bcac91a69de0aa
42a12e90ed91a93ce8a3d047ed2a2da9a791d5986f1c725aa084bd8130481a0c
42b8526cd1793083a66616b8689d5608df4142590f5f65dcd76372464f3f4180
57969612b57c74e3147807fca5fbffc13c678eaa61fbbc670896dfb86163ca7e
59d1f14b02ecc38b13bb821e24a754b8479487e31fe3f9b90335e4ea012be81d
5b1cd56dc519671798caccbad5b738dc8bc07ad3e9a970393b6fede1c68d5ad5
667dbc18ae067157d40f698f448bac771fbadd9624430c2b6dc087053a9b4d86
698446c15235af3eb81a1683899b6b91d30b9823a5e1b119a31bcfd672451b36
7ae84495217625dac6edbfcdbbb61d632cb62ebb66b67f9e8d58842a280f1d0e
87d569d179551da0adda780a55e955fae2bc2f497332cca6bc6f1dfc05bc5191
8ebde9c7780bc02f906b5958637b8d8ab8a16a935e9daf71196fcef323fefd77
91f77ffdb4445501b16fc9a9566be212e2cd9651c28af265a02e306b45abd1d9
93a901cea1f51da8246537552117adf337617d1b810af3d79ee6d10bca46d664
9c4a87a6d9f173ee7d240bfa5759371852be16c65df5500fe07fece48079eca3
ada95f4a7b1cd37eb9ef8b5f71f41751ec676964fa7b3c7d17851f44ad1970a0
bd2bcb56f54106cbc32caf5bf6665243ba90782edb8b7bce6189374e67db7e75

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.