Career Ops
Hiring broke: 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.
Applying faster is what caused the pile-up, so Career Ops goes the other way. It never writes or submits anything. It narrows down which roles deserve your time.
What it does
- Reads about twelve thousand postings a morning and throws away almost all of them.
- Works out what happened to every application by reading my mail, so I record nothing by hand.
- Keeps the record straight: what I sent, what came back, and when.
What it doesn't do
- It never writes or submits an application. Applying still happens in a browser.
- It doesn't guess. Roughly half of what it reads, it won't judge. It hands those to me.
- It won't get you a job. The bottleneck is how many people can read applications, and nothing here changes that.
The demo below shows what it produces. Filter it, sort it, open any row.
Demo Synthetic data. Every company, role and application below is invented.
Filter, sort, open any row.
Every morning it reads about twelve thousand postings across 103 boards, cheaply throws away almost all of them, and leaves a handful to read properly. That part is easy to build, and easy to trust for about a week.
Then it starts getting things wrong without telling you. A rule written in March stops matching the mail that arrives in September, nothing errors, and the dashboard still looks fine. Mine filed a live interview invitation as a routine acknowledgement.
So most of my time went into checking it. There are 886 real emails I labeled by
hand that every change has to pass, and a command called drift that
goes back through everything already stored and reports where the data and the
rules that produced it no longer agree. I can tell you what it still gets wrong.
Most tools like this can't, because they were demoed once and never measured
again.
Fixes apply backwards too. When I repair a rule, it repairs the next email and a year of old records, so the history gets more accurate the longer it runs. It's also why 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 real output. The one open finding is staying open, because the stored title is the better of the two.
What the 886 means, and what it doesn't. It's a regression gate. It doesn't measure accuracy. I labeled those messages myself after seeing what the classifier made of them, and fixed the code until the two agreed, so it reports 100% by design. It shows that a change didn't break something that used to work. It can't tell me how often it's right about mail it has never seen. I don't have that number yet. Getting it means labeling a held-out sample blind, before looking at the verdict. That's an afternoon's work and the next thing I'll do. Until then, the gate is all I'm claiming.
It doesn't fix the real problem, and nothing on the candidate's side can. The hard bugs all had the same cause: software saying something untrue with total confidence, and being believed. Most of the work was teaching it to say when it doesn't know.
Application volume: Ashby, 100M+ submissions. Interview-rate decline: ZipRecruiter 2026 talent acquisition survey.
Take it if it's useful. There's a two-minute path with no credentials, and a full setup that reads your Gmail locally. Your mail never leaves your machine. Steps are in the README.
Technical summary (PDF) View on GitHub