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

54

reports under this root

#964,965

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

Confirmed in Bitcoin block #964,965.

Merkle root
eeeb2e3ea5e912ab8480c7f57f7b697def0e8d0c03f312437b6cef05829c6b89
Reports covered
54
Sealed
2026-09-01T01:17:22.063Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #964,965

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

Verify it yourself

ots verify -d eeeb2e3ea5e912ab8480c7f57f7b697def0e8d0c03f312437b6cef05829c6b89 crawlcheck-2026-08-31.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 54 digests sealed under this root

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

0119152dec22ccd6dfec13a1b8ed856e53b020e418e6114b4234b15f7a421048
025b2a38772eaf6756f6dff08282360e06353bb6ab40090596a18adb5fd58353
077eb319cc1509dfc4fd138db328129d1a91c42d56371b7cdef8191125d1a24e
09e9369a6cb1928bb93d5557679016dabb4eb81b49a0f38a42b2ef8ced3adbf6
112fcf95383f6b512716a22f3e06f198537d25c046c2d8c286be8d6c6eee926b
186deaec70752435e1bcc0adbe9ded08671230383bfb37c9e692ac4d412642e4
1990037d9dbefa7f4854b959931d69f6408f337520682035834e866605f0a018
19af07dcafbcc2ab12b39a47d2b02b82b439d68d491d77631c811c7dfd3cfc62
2bf2b054ca847dfc196bfa9dbf72b3fb3d704fcacf3e467a191f4915d2b2d094
3fe99848d0134673b62c55aab8ba0f70ac5a1f3940ef925c134564371bf54f81
4d3ea996f817616b1813d16c5c97f77c2dfd95961af5f8437ef162924801b204
5257a1fa65716b15f74dcaa24e4e0cf1023e75200848ddf4b88e02d36a1133c4
5827590dccf47fec492fcac8f3f503c8551d1ed18a9218b47a1bc83deedfe662
5bf63e7310f9ed6bc04529a8d6e8b81212a31fd0701f9e0a3081d67e02de14cb
5c23f5a5e1efb784cdcbecab9bc67e2ac53d869cc34391a79d18244764f9f57b
5c2f3ded3a3615ca26e5ea6366c652cee2d07b9404c190433f6082522da1adb9
5d1027896f22cb102bb770fc4179b142a11d04d6d437070a2414c353a7bbfee3
5db6c6cdb5504bc0e89acca186de07d8d61a2676db0abe3f94f68fe1b5789a34
6129efe65c9c961c7f5bcb061dc34374f53adf2a18dbd8a27d8c1b4bbdf7ff06
66447aaf7a179fb5755193564423653a3198c33a08753df35a6475f78c77391b

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.