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

60

reports under this root

#962,654

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

Confirmed in Bitcoin block #962,654.

Merkle root
de24796800c2225c2c1331e05f6b7d4f5f8a2a43212edb8b903f9d10ca859825
Reports covered
60
Sealed
2026-08-16T01:17:44.681Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #962,654

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

Verify it yourself

ots verify -d de24796800c2225c2c1331e05f6b7d4f5f8a2a43212edb8b903f9d10ca859825 crawlcheck-2026-08-15.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 60 digests sealed under this root

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

009bf5513bb865068573d0f7538ac67be75aa085d416aa89867a427364d2e9de
08cc0c1108c3b99a7cb4765510c9b536fc650fb33e6daa432cf885b01d5bdc9a
0eac11ba6c9b476a976a774ac765c76169d5ce88ecbeca5336cffd9c4c93fde3
102a32b280b990f7da7d3f1a50258b5eb566ce5d9792a1fadb79b436a7a4f9b3
12046f3dd25a6caed089e356caf06d392f6d446105e86d01f5ab8230a22f31e3
132fcea6dc7705cca5b68ef5f520b60f87a8b67b30b0c19f8dfb4afe18a8cff8
13a000487ad8381e7c598aa2d329ddbf739ce80764a8dd5120020b335075b388
1c3f1a224172b6b6797262c3bdd78bd74e42d96c4baafecd815a86caca6a0ac7
1f9d1c35b4cf57ea0368925f746e49d17f9c2fa292f076320f5d4dd0c9d625c1
20fd229d349a5e5ee5a55abb12e5ea5ec0718a51b51a15f5ec955e9a1de292ea
25c38c3d634440e8df9d15b4d53b6814d85cd4d4aa98ae9204ba7164763f9f70
26a335090563642f7e74b474dfc966a1dc1e36945ade2775298a67a71fc2ca34
2bc46fcfbe5c95c7c4fc4c90d58c17885829e22f96ebf131da24dccb5efe24b3
3401ecaf190345710b989034b41849f89f18853b154ff521e91083086f22f877
37ed355d2d8f95b9ef5f434a908b2c1271abb92a728e0bd88d70b91efbd69110
3d0f3cf0d539243a9761b3b1c2c295f16143127bd2e3e67d22b8f3267d68f0fb
3ec7bb230f63f60505fd6924d8f32ebe9d30dd9922da3ee8244ac799a36a418a
3f43027c27f762fc2916d3d61554a3fd4db5ff1bc4d28b4e8de7dc3f1bce1b49
424aca2dd6ba9d1ce203ea874d0904b22b1dcd6e82f8fde3e9785a605f5830f8
465b84d5136669b6946d92942e4b32f20183c1fbd41766d9ea8fd6b692afc44d

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.