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

94

reports under this root

#965,410

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

Confirmed in Bitcoin block #965,410.

Merkle root
9fe4272df0d17b27cc7af0505426ef49cebe1593a1afc6edf687f29091cb0d87
Reports covered
94
Sealed
2026-09-04T01:17:01.632Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #965,410

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

Verify it yourself

ots verify -d 9fe4272df0d17b27cc7af0505426ef49cebe1593a1afc6edf687f29091cb0d87 crawlcheck-2026-09-03.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 94 digests sealed under this root

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

0163fc0c696a22590c5af73ee13efbc42097debac385ebf401a030d91179e972
0260ccce9c2fc59b90fe57a84b7b6fea9bcadcffd3593d6016c601c4c39b142a
043492659fd56d9aba50e5746502707d53fc5674168617d2d379038fc1cf9fac
07343dc3a5165f11fa90e337d502e2793cf72bf62fc5b723aa5ee3925b54c4d5
085c1c370baa9b5c1d2c3460d0ccdd1f471ac422c812a53ecc19df020e1a0789
08f4a2eb5917c5218cc53d1c9bf34f249d9639e7faef2f323c9cae1c2ab121d7
0ca533b357f93653b66bbba7ec9f62c62b04a45b340231b8ef6f864697f77199
0e86894cf3103634d93cda57b7cc0c92352a1691942ee1284e72becd5ad1c8b9
10853a8ed2737a48aa3966c530c655206e538a2eca341ecdda33752451ea4e1c
12cdc926b1707bb0d6522dba546fa33ca1bed7c39deee19e92164c69a0af6e48
161043ff9bc25202e1d1d364c74d3be7e79124b5f997fc3109281e9ca32de950
17a1695322467626b3c56cb743e7d59b2d5fb74221cfcc116065dd29a7db85c8
1ce668975d220a2a8ea6dd6eaaf62592a5a89347e49a0ec02363ec44118c7bb7
1d23ce8ca1f56830b7e2653d8dd205be8672d3f5d30ba64a602c9dd8cea57a47
208309a2b6947da07907f2a60e3662c581565897eea9873ad961cfa3bd943762
20cfb65d89df1cdbf448f0ddd05a611d9846706cd2eeaadcd0f76aa3a35d693b
2229a0fead293ecf899b568c3216f60661c749b068faca16925dc6425d585f98
25b318877c54f70a8e91dbeca723cb7cc2789813cb4a210490876f41b3e83e4a
26b015dd9c6601b69dbc50f9aac5a1c9353149da16dad594daea27b6e5553fee
2a4431f3ac1324b1da4ed0ba6a2da498b6040f18ac3a1aea68825442c5c84bc7

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.