← All work

IL-04 / Building

Ditchrider

A nightly archive of Western water-rights filings, turned into a ranked feed of what changed.

18891896190419122026new appropriationchange of usenonuseheadgate + priority year

How it runs

  1. nightlyState sourcesUT · ID · CO · MT
  2. SnapshotGitHub Actions
  3. Archivestored by content hash
  4. Parseincl. court PDFs
  5. 1,044 / 30 daysRankrule-based v0
  6. Feedwhat changed
  • source
  • step
  • output

Out here, water rights move land deals. New appropriations, changes of use, transfers, abandonment. States publish all of it, but each in its own format, and almost none of them keep history. If you didn’t grab a snapshot yesterday, yesterday is gone.

So Ditchrider started with the boring part: an archive.

How it works

  • There’s one adapter per state. Utah has table dumps, Idaho and Montana have public map services, and Colorado has a REST API plus monthly water court resumes as PDFs.
  • A nightly GitHub Actions job snapshots each source to a data branch. Big documents are stored once each, by content hash, so the archive doesn’t blow past GitHub’s limits.
  • A parser pulls applicants, structures, amounts, and priorities out of the Colorado resume PDFs, going back to 2021.
  • A first, rule-based ranker scores each event so the important ones float to the top.

Since then

  • Wyoming. The State Engineer’s permit search sits behind a login, so for now Ditchrider archives the Board of Control index.
  • Abstractor. Give it a Montana parcel and it finds the water rights tied to it, reads the state’s abstract for each one and the Water Court’s basin notices and objection lists, and flags what a buyer should ask about: implied claims, corrected points of diversion, rights not in a decree, open court deadlines, objections on file.
  • A readable digest. The weekly Basin Digest now has a version written in plain sentences, with no scores, that’s safe to email.

Why the archive matters

Almost no state publishes daily or weekly history. An archive started today is worth more every month it keeps running. I set a kill test before building: at least 200 rankable events in a month, or stop. The first 30 days had 1,044.

From the log