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

98

reports under this root

#966,592

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

Confirmed in Bitcoin block #966,592.

Merkle root
b593a4b77622d379cdd51e92403d005fa71fc877decaeceeef01fb07a14b403a
Reports covered
98
Sealed
2026-09-12T01:18:00.644Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #966,592

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

Verify it yourself

ots verify -d b593a4b77622d379cdd51e92403d005fa71fc877decaeceeef01fb07a14b403a crawlcheck-2026-09-11.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 98 digests sealed under this root

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

09954cb4ed0132abf4803f0bf53d36098707372ecb173fb3022c2dffc37a29cf
0bf1010fdba0cb0db5131ce7e99887c3d0b4e4d236c2a39117a3dd365bb8cecd
12144739dafbe58f8332dbcb43fa73c4bcffda246fe9df39233f9553a0a610b7
137051bbfd41cf9d5a0f7f3bba9ec94b301639bfabc8e72b474f0aa7d8fbfe89
14123c7c177e8ac7ba893ce3481ea804e257db726353653f78e2996af54f0484
157d5ddd9254ac350ace16ab5537ab094b1929da695f2ca22d72295004f0f7d2
174eae36ede13ad2b3167af4c4ba84cafc3d300d649ac66da19ebd72ec63e9df
19bebd90558d43c8b662bb9168c251a2328d63a7dfbbce7f81965d23c05c5a15
29d3cdce6cf7af7c389defc661d172e26a9610bc63206e4c77fa3ea2e7dbc611
2a95345b60841fbaf6197ee31e78b0e2ef765f46ccbd71f930b946ad03c4447c
2c990470636ab99fbdc164317b50a7f93a027bdf0567ea3a138d07abd2ac49aa
2d586146d244b6bc21e9630f88f94495e6649925496b20b203110331cf4c16fe
2f874ad612aa7b4f436ccae03c43665b47ef11a717741817f67a3a0339ebe9e0
37b971c0afffdb9e9b39ddecb1ee9a38c1cc1626355ff4b00b7e8227043f238c
3850095d0869c4848922a7bda480ce587f066d0845ab9cd88f18a598a86075b8
3e586579c7def57f8c018047cb1ced6cb6ed36a37f1623e99833d5722bb4618a
400e7b9cfd46556652f8b20b9e22150a9d3c9279bc64c112ec77fd542f72c783
41cd6c06417311f55e3856104dabe8025663029e5caa63dff9ad031e8b872aa2
42e092e1f2dee3b95be3a55b4d7435bdd92f4d1bf689449fb07900bb11a54418
44da37c90d72189857daa7562529da525c2bce8d2f33d7045ad207b91fe71418

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.