The problem
AI and analytics jobs don't have consistent titles. The same work is an "Analytics Engineer" at one company and an "AI Automation Lead" at another, so searching by title misses most of them. I wanted to search by what the job involves.
How it works
- Collect70 boards across five job-board systems
- FilterKeywords in the full description, location and pay
- Score0–100 against my resume
- TrackNew, saved, applied, likely filled
- ReviewLocal web dashboard
- Collection. It reads the public feeds of Greenhouse, Lever, Ashby, Workday and UKG job boards. No scraping of sites that forbid it, and no logins.
- Two tracks. A posting matches if it names both an AI term and a data term, or if it's a BI or analytics role by title.
- Scoring. Points come from how many of the posting's named tools are on my resume, how central AI or BI is to the role, the title, the level and the pay. Every score shows what counted for and against it.
- Change tracking. A posting has to be missing from two checks in a row before it's marked "likely filled," and a board outage can't close anything.
Results
| Measure | First full run |
|---|---|
| Job boards read | 70 of 70 |
| Postings collected | 7,053 |
| Matches after filtering | 261 |
| Matches in the Cincinnati area | 40 |
| Running cost | $0 |
An insights page also ranks the skills that postings ask for and my resume doesn't list, which told me what to learn next.
A decision I changed
The first version sent each filtered posting to an LLM to score it against my resume. It worked, but it meant paying per job, every day. I replaced it with a rule-based score that runs locally.
The trade-off is real. The rule-based score counts keywords and can't judge what a job involves the way a model can. For a personal tool, a free score I can inspect line by line was the better choice.
Testing
14 automated tests cover salary parsing, location rules, both matching tracks, scoring, the closing logic and backups. They run against a temporary database.