← All work

IL-01 / Live

Tributary

A monthly change feed for SEC-registered investment advisers, built from the SEC's Form ADV bulk files.

1k5k10k’24’25’26April: annual amendments, ~10×no datatypical

How it runs

  1. 31 rostersSEC rostermonthly bulk file
  2. Fetchheals missing months
  3. Dedupeidentical re-posts skipped
  4. ~900 events / moDiffvs. the month before
  5. Rankwhat actually matters
  6. Static sitea page per firm
  • source
  • step
  • check: nothing passes unless it holds
  • output

The SEC publishes a roster of every registered investment adviser each month. It’s a big spreadsheet, and nobody looks at the differences between one month and the next. Those differences are where the interesting stuff is: firms registering, firms leaving, firms changing custodians, headcount jumps.

Tributary downloads each month’s roster, compares it to the last one, ranks what changed, and publishes the result as a static site.

How it works

  • A GitHub Actions workflow runs a few times a month, pulls the new roster, and rebuilds the site. No server.
  • Rosters before December 2025 are .xlsx, later ones are CSV. I wrote a small stdlib-only xlsx reader so the pipeline has no dependencies.
  • The fetch step heals itself. It grabs the newest months plus any month since January 2024 that’s missing a snapshot, so a fresh run rebuilds the whole history.
  • The SEC sometimes re-posts a month byte-for-byte, and some months have no data at all. The build skips duplicates and labels gaps instead of inventing a change.
  • Every firm gets its own timeline page. There’s also an A–Z directory and a page per “buying window.”

What I learned

April is noisy. Annual amendments push the event count to roughly ten times a normal month, so “typical” on the site means the median, not the average.

From the log