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

72

reports under this root

#965,998

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-09-07

Confirmed in Bitcoin block #965,998.

Merkle root
c9631a946c4ccae818241e52029bd63fa02467888b0d77128146535465da5855
Reports covered
72
Sealed
2026-09-08T01:17:53.497Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #965,998

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

Verify it yourself

ots verify -d c9631a946c4ccae818241e52029bd63fa02467888b0d77128146535465da5855 crawlcheck-2026-09-07.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 72 digests sealed under this root

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

019dd7af37a9b351dffe87b63a0b843e8c3d33b7dfb1ae244098d63a9dd75c94
02058d53e9124d4b8a3c443ad03b939c227604fa11a9626b9b63300e7e055ae0
02446d95e1ac0d236e1ea75a91caec156f8cacbc22581d7d8817294db1e6ee6c
04ef35d06a676c213ac72ba4fa306054954c0f74d28959b436852940285141e2
05497a342f0de89730d09cc7f9e7af8fbf3e78fe9d2b77138687ae2bc41425d2
0a6d13a0a28a09cda881fee05f9282dd60dd4c46f51d6138c3d46d22188fb9cc
0cad5a883925dc144d2196bb497c5f37231b8d50299e8643181e19d8ab49b4cd
13a33b898972d7d86f3286fa99fb8d259425bab106b925d65b5f062e60d136d4
165fd63ad33ceea2d0d598196fb0cc0bfc97888e8213b859093d0ddd106f27d6
171df355f6a95a39027ea55f23191070cf10cfb213f78a0641ffc3dc3baa16d3
180c23d4d305c89cbfde38c2aed38abaa89df1d4790ec5ea02ed96a587500765
1c0a56a2cc55f8c0850cdb82dbaef7d0385521d94485d69afe36671920d41e42
1d11a749a7995d191b4dde2246a6fe28e752df41ae45a63ae6d0365916480400
27bbbf7579bf0e5a97764604fcc01115ccf5d40c804a1683529345c689078422
27c2205f8eec73d90cd2ee382869be61bc3067cdeb0b6c9b6872e98e24fd87df
2a9ad2d8201c816cae7bac7735b3bac8faed7375bf3c943f69bfe46a3054d3c2
2b4ad670114d6eb8f73a457f1d0439ae46cfa0d84682602919beec3e5e9b8945
2b6fa45dd33a4de744ec28856b87ba23182301db478f2e2547703793c3f8ce53
2f91b21965a4bbdcd8cdcd7b620b988d03456553c1d2502472aa25a5e9ff0c85
32b24961e467a7649790b53c28aa632f814b61fbddf8bbb78f2f0afc07a84722

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.