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

55

reports under this root

#962,812

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

Confirmed in Bitcoin block #962,812.

Merkle root
c4ade7dbad3c32fd0305f24674c6dd3e07cf50d638a6541c4e13e4212d77d256
Reports covered
55
Sealed
2026-08-17T01:17:22.018Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #962,812

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

Verify it yourself

ots verify -d c4ade7dbad3c32fd0305f24674c6dd3e07cf50d638a6541c4e13e4212d77d256 crawlcheck-2026-08-16.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 55 digests sealed under this root

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

0a355c93fdd2b3d29a59710f682bd73a0257113fda42d71dc29d2e5aa6798c01
0cde9581049d722f56c7d9749dce559337f04c268b556e2c8776192a2a9f984f
0e7650014a168cf6c93af2ef190cfa15463ff138fee38fd16a64b21ce79726c5
1af1f504c1bb9aafeeac30624b27e4ea2fae9abe652f39f5af083d0e427fd099
1e6a2e8310385c626037ca889117a90eee11361cdceaff94bb3547a51111b0eb
262cc3097c00800aff4e75d4a98d714db387c9b6f4bcdfb0d9e123645c8def52
26f35c23699bbb8cdd4120067ffe293d53ec4ed2efc0605182294cdffbd46da9
289b369a6edf738faf6f75b78b27dff2a57e1d31deaca565f1b6f3b0443673c8
3c87816e44d75c4fabdf6218017a9e4c0b085d9f26a73571751ac414c576f7ec
3e8676aea61b5e1cfe329b68f80f04a9f96d446de95114b5dc6d335a60032295
46a242143017c3a0d55c53fcedff2d123ec8d011080debed1251f89cb500cbfa
541af4b5b956dfe270953391abb679c4b7d7deb519053e25f4e998cca9508d65
57bc9756216124716f71ecf4dd85cd593a28af706ccea902ed4c36cad0883b40
5e13f2bd26e5bd3c108247290f01a36854fe55b82bbf4e5268007d56deff81c2
62b178e38ef35c4a270d08964d72a62d86aab861584efd7559cee84b4cb4ec0e
6399afc397a580f3b191feee5090a48a0fa906a97c6155f3b093f1b2b9df967e
63b36abd9a2deef009bf4d1fddd65f4a4b0438f83c6925141adbac5d6c6deb87
660004506434262777d4683ecf8d80a97f5ccc9293087007b5e2efae3bbf4b82
6926ff69be423fa1a691864f39c9d75aec1604f0451bffce485e2caecf26c5c4
73520c1a61befb4eb643306f21ff0f353553289c99d4bd1bd0045d16ad7d8a14

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.