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

105

reports under this root

#962,505

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

Confirmed in Bitcoin block #962,505.

Merkle root
ae7775b01ab8545fe5f495a61cd7948c60ad0c04054760a2f13ab3056acb0df7
Reports covered
105
Sealed
2026-08-15T01:17:19.578Z
Calendar
https://a.pool.opentimestamps.org
Bitcoin
block #962,505

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

Verify it yourself

ots verify -d ae7775b01ab8545fe5f495a61cd7948c60ad0c04054760a2f13ab3056acb0df7 crawlcheck-2026-08-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 105 digests sealed under this root

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

0139ba6ebdc6bef355ccf39c047ed7215fd6d1a7b9b8174949079d6a79590896
02a2125a6898dc9149215182073ffa0de5ff813ff9a167471cfb0adc30b52239
06befd1a392d01d2d718bbfa6cac528f0804f56d7d1395a9001978f145bc6098
07093705b80a560268f80943b8b869875c6e6dee6dda31e2ce14227c70aa5b64
087317d5ff14cd2224be3194df74fda669fa56db9cb5eda4b235153beed54724
11dcb4e27d62336c88075516e1c4d3532f11f3ee709bc13eace68932df8cbaf6
143db8020001ebeb38f920e5cfea9f97c57982bbe529cdc471a1bea90e370159
1567670914d1691f688088105ff105ae35d2426cebcc82442fe78eea026b181c
163a3ae5c1749a38ccde6b1fc363394d3a5d43b83e45df74e472f01c832a3da4
17f65cd3c384cb4aea89c6a8f67a9bd6b74d559aca865d29ed973a95e123dbbb
180173cd1feaf8bbef1d1e2123074c630d92487df6c8d2d17e8110ca3e76330b
1b51b5582ac28109dca6e154aa1d1a633f48164f5938490c940514989dd5a377
1bd64e52d8a8fdfa8060f81d91b6fe46afe3646ad3d5a1350eb945f3971e9595
1cd73d3ebd5e1fae825bb4a14480ccee4b0f089f3d56a1a56099c67184626695
22890ccd75a314a0d88c3c3321d7191cb61b7db631505ee4410a6bffaa97fa6e
22d07733d3b9007f965fbbeb6fe2796278fe7367529889a490a7153c778381f1
23955bd9c07dbfcbb35827069a108c342b6ec90ce99745faffa3f33c8155c63b
2454dd315256958f3caca25daca5813280ff094e37b3f1892931e9f39d0ace85
2803706abd1f0c7b4903796b8d2f26d7887bc04bf5fb0953b0acc87521de5963
2b2f724415ba98d43ba36555751cc8c56537b17379e0e2d3411887839f3318e8

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.