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

97

reports under this root

#964,656

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

Confirmed in Bitcoin block #964,656.

Merkle root
d858a0f2a63447b9ec1ad137f04d598f8373ede98c2e68fd984af453884dabb2
Reports covered
97
Sealed
2026-08-30T01:17:47.132Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #964,656

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

Verify it yourself

ots verify -d d858a0f2a63447b9ec1ad137f04d598f8373ede98c2e68fd984af453884dabb2 crawlcheck-2026-08-29.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 97 digests sealed under this root

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

010a499be1deb8032ab0ca6dc71385590fab9b8c9bca580ea6837f1504f9a25b
07895e7c68afc15714b2b3c2f8a17d6457f5031c1f3aaa7021593479250157ec
07ce3cd9776ca9bfa75dfb4c547ff366bb70055cda8512a0774fdd359d566233
0853bdaa5ec14e0ba0926a13951806fcd08f2e67107c5a2c791573da663f2929
086f308f247386c49706955c4634044214a4acc7f8392dc4150fbfaace01e77c
091915f7cef16602f950b6fdb80dfdbef8b70eabb1ee416d40429e794aa5d7b7
0d920e710b54e27b3f63dbcf38fb7cb42dca3c6b5eb4876d55eb4890f4285276
1165ff1d04847c1dc48c40982f3ac9eb8b47694f83469192dab18561296e6845
13c747dce4438bc0c1efbf31b9ed007e07e1277140e3327f9a13af8fdb8f6d69
160dccf9e5de646ddd410a94da778b9e1f89a0f3af5801d629bf442872502be2
198f608f2683b7e2925a463ee494e38c76f39e7c8667000a7185f648714775fd
1f1011838934691ec3e9e25fd2a386590ea840682fbe41942a46f5d42f02cf14
22cf27cf3aa60c5fa63dfea26c0353629d1803767cc6444316bca61963892ff4
23e9a1452f69d2bb66e8460038b0df6b519afb21192c2de9a08225f18994a05c
265e6a8d2c95bd75ad87bbf94e9fba6cfccb58dedcb2f75c6a57237d9765c336
2670679d82ac78f6ab34edcf6f536af853421961c8c69e5f84fc8843d78d0181
2894e641853edd4bee96b5fd6c90fd5a8bc61a49667d27a7efe8b46192d1e5ec
2c75eec576680eb6a2c49a726dc88d1493661f19112cb16dac02c528aaf81bc9
2f482f527a194685e9b152353f99fee8fef7eb5af77aab607e5c80bdf0f012e6
3157dd0e6df5e0dc468c004d93951dd368e6a7be07cb0249dc97ae4851a30681

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.