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

73

reports under this root

#967,051

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

Confirmed in Bitcoin block #967,051.

Merkle root
ced033890114195bb259d7ffb9344294d4da487d0a01c99d77a27018a02db38b
Reports covered
73
Sealed
2026-09-15T01:17:45.363Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #967,051

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

Verify it yourself

ots verify -d ced033890114195bb259d7ffb9344294d4da487d0a01c99d77a27018a02db38b crawlcheck-2026-09-14.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 73 digests sealed under this root

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

005509d4809426c5522023aac48d50e47543a6d170247240711043e56112670c
09512d2ad018d372abacf64497c5c56ddf5f45930b04ec8e493ee152d88182d0
0d49edd23ac533578879af52af0324f39f866059b2c386bb3de1ee45b4c0bcb5
0e00953a8d4e02ebdd323381cd70e582e434a0451ad45c4b962b95dad2e39882
1175151e188ab85943d7672e408cf836a20e9414cef2af0f17733aff77133176
12a28d276d90ba66e4c764bb93f1f6b6b612dc41cab3e033796a2ae1b28343cb
13b85568fdffdf586c8de596f2b6495fe841ae12fd8987156d4ec6e903f2b645
17abeb2035a1397b3f85032ca902285337d7353b583399089a76b270638958cc
185f719525c4c7aa9b50d136bc96041c330359047a960ee73b90e5581ab35880
1ab87dbc381abc91026c15d3cc272424266a5ab62b2a2ccc716aff9dbd3a4a60
1c689e390afe70f462a0a8e379c7b34454320cdc1be47e6c388acebb9f9adf0f
2b93b96f8360cf731c4cef4696e43de38c9ad0b6aa486ec2158b57596c11f20f
2d94c4dec59c9e9faef33b6302871ab344edf868afb9f23a05f93e2174e0ef09
312a3b310c7b9ebae1cb5390ba476c7dfd4b8b0a56f8d4bf0466d0e56f802602
35c486ba1f3099e000cd632fe1e1a48f3cbb9d009c263d12597afcbc54894f22
35f4e3251fe7665b50edb3eafdbf8de17830398232248a805faa9d3ff38ab360
38d7754ffbd4585fdcc8423aa2c77d1578db99a5e8644cf179bab739a3dc484b
3dabe7dd6cbd2b7086642d9d9ba577c054b20c66cacd08c1b6e82cd67cd30ef0
44ee45f2c79324136bc900118bd9b644b3fe701555fce45d7ff0dbf1a4fb8880
46e2c352e018e63b98a28734d83e45e8b173c337e872528238490eb191b24ddf

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.