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.

91

sealed days

92

reports under this root

#965,865

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

Confirmed in Bitcoin block #965,865.

Merkle root
90b4f3a88e2aaa02070a5b4d7f235ec5fb0cacb883370d0e7b4e0a5a76cffc1e
Reports covered
92
Sealed
2026-09-07T01:17:53.652Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #965,865

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

Verify it yourself

ots verify -d 90b4f3a88e2aaa02070a5b4d7f235ec5fb0cacb883370d0e7b4e0a5a76cffc1e crawlcheck-2026-09-06.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

91 days anchored. Each links to its own root and proof file. Days are sealed once and never recomputed.

The 92 digests sealed under this root

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

0031ab23633b81dd8ebca2f5636bcd6b9749e82d09d587b8c1b1c8ee66db95d4
00a8f0243463c1d7d5ffd8b38aba74c4df08e1b2f356332e05956bebb1447180
06e95fa3f604054253fad6544efc258cd525200fe915e01aae75078141d1e6ad
07ae939c17e4598c20bf50a2dd324667164c4ba587a0653db882c7f6cbea27eb
08f0dd191059f41af566fe5f541af721ff6f16bf67f23604940a6402a10e85b0
0ada12a9351e9a20bcd138339d8eef9ed5a8e96af6788be3a6738f8f2b0b4ed4
0d88e83f3334571427190e5ecbde22f0ff6f4dc88834ec3dbde73158f5c65d2a
114c13bc48e54b6a341314dd84537b428c5a8087382a754508bc4329e94d325d
12f4f805072100706ab8f54899d88b408b5f49623f8fe6070588c10985ce4a41
1523bdcd32dcc644eaf3c4e076d30d3f8a21aad1f9ca70f680c2cd66bc68bbd4
15d934e87f6417c57e963600bdec55f194a7217c28165f5cee9066a61c93a88c
162b21e1e5cda706085af0a74a03d7cbc36b23c2e9ef072b67af8db393c1358b
1bad8f3bd52796b2b4528b1d3c5d7f493bd3f46afa449c33d406919532349ff6
214905b0baa204d551a382b0982dde01e02b91455359d5555690abc42273e48b
21dafc4b555049ecf97b4a3dc3617a1aece12dbe6a1514aa1fc3b0f26646e4ac
25650226ef897e69883d1285b9da20df414890a27b6219b9e701cad62191ab2c
29583d36e7aa19a10d7dcd9801c2063c792db1da07d869498f031a2bb104db54
2b2f07e8f81539532534132a3795fd2855a5e2f8b026934da76fe362c76ce652
2f42d294b2cd99a5910e75035c1040707a52241885fe5e3945fb242e56043c3e
2f5cb8d01067151d69d7f6e01f783c19c18307f63c59394ffdd4a247e31d66b8

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.