Benjamin J. Sunter
← Selected work Pipeline tooling

Career Ops

Built 2026 · Open source

Hiring broke in a way you can measure. The average open role gets more than 300 applications now, up from about 100 in 2021. AI made applying almost free. It did nothing for the people who have to read them.

Since applying faster is what caused the pile-up, Career Ops goes the other way. It never writes or submits anything. What it does is cut down how many roles are worth your time in the first place.

HOW A ROLE REACHES THE LIST 103 job boards four ATS APIs Ranked, then read cheap filters first Banded by age freshest first Do next what to open Greenhouse, Ashby, Lever and Workday. Each row arrives with pay band, employee sentiment and your history with that company attached. Status comes from your mail. A req with 300 applicants is read in arrival order, so week one beats a better score in week six.
Why this one holds up

Every morning it reads about twelve thousand postings across 103 boards, throws away almost all of them for almost nothing, and leaves a handful worth reading properly. That much is easy to build, and easy to trust for about a week.

Then it quietly starts lying to you. A rule written in March stops matching the mail that arrives in September, nothing errors, and the dashboard still looks perfectly healthy. Mine filed a live interview invitation as a routine acknowledgement.

So most of the work went into making it doubt itself. There are 886 real emails I labeled by hand that every change has to clear, and a command called drift that goes back through everything already stored and reports where the data and the rules that produced it have come apart. I can tell you what it still gets wrong. Most of these can't, because they were demoed once and never measured again.

Fixes travel backwards too. Repairing a rule repairs a year of old records rather than just the next email, so the history gets more accurate the longer it runs. Which is the same reason I wouldn't trust a dashboard nobody has reconciled against the source in six months.

$ careerops corpus
checked 886: 886 agree, 0 drift, 0 regressions

$ careerops drift
OK   event type                 OK   title without a role
--   event role: 1              OK   outreach-only application
OK   unread pay band            OK   flat scoring signal
OK   unapplied alias

     468  stored   "Operational Excellence Program Manager"
          derived  "Program Manager"

Both of those are actual output. The one open finding is staying open, because the stored title happens to be the better of the two.

It doesn't fix the real problem, and nothing on the candidate's side can. The bottleneck is how many humans can read. The hard bugs all came down to one thing: software saying something untrue with total confidence and being believed. Most of the work was teaching it to admit when it doesn't know.

Application volume: Ashby, 100M+ submissions. Interview-rate decline: ZipRecruiter 2026 talent acquisition survey.

PythonSQLiteGmail API Anthropic APIEvent sourcingOpen source

Demo Synthetic data. Every company, role and application below is invented.

Filter, sort, open any row.

Take it if it's useful. There's a two-minute path with no credentials, and a full setup that reads your Gmail locally. Nothing leaves your machine. Steps are in the README.

View on GitHub