Job search engine with AI agents
An agent system that collects job openings from several sites, scores them against a profile with explicit criteria and keeps a record of every application.
The problem
A job search is, operationally, a data problem: hundreds of openings spread across several sites, a minority that fit the profile, and a CV that has to be adapted for each application.
With a full-time job, going through listing sites every night wasn't viable. I treated it as what it is, a data funnel, and automated the repetitive part.
Foundation of the system
The foundation is ai-job-search, an open framework by Mads Lorentzen built for the Danish market. I took it and adapted it to Chile:
- Translated the instructions, criteria and templates into Spanish.
- Switched CVs from LaTeX to Word, which is what recruiters here ask for.
- Wrote my own scrapers for Empleos Públicos, Chile's public-sector job board (through a JSON endpoint the site uses internally), and for research centers and think tanks.
- Added a rule I care about: every application stores the exact job ad and what I declared, so no agent ever invents experience.
From job ad to PDF
- /scrapeSearchSaved searches in five groups: data and BI, public sector, applied and academic research.
- seenSkip repeatsAnything already seen goes into seen_jobs.json and is skipped next time.
- 0–100ScoreFirst a quick fit rating (high, medium, low), then a detailed score.
- /applyApplyOne agent drafts a tailored CV and cover letter; another reviews them. LibreOffice converts them to PDF and the CV can’t exceed two pages.
- csvTrackOne record per opening, a tracking sheet and interview prep notes.
- pushPublishA script merges everything into JSON and updates my viewer on GitHub Pages.
How is an opening scored?
Above 75 is a "strong fit". Having a number forces me to drop openings that excite me but aren’t right for me.
The pieces
job-scraperTen weeks in numbers
From July 6 to September 15, 2026.
How many actually fit
Fewer than one in six openings is a good fit. Without the filter, I would have spent most of my time on applications going nowhere.
What I learned
- AI writes fast, but it has to be tied to facts. That's why every application stores the job ad and what I declared, and a second agent checks the CV against my real profile.
- An explicit score organizes decisions. When fewer than one in six openings fits, the filter is what saves the most time.
- Adapting beats inventing. Taking a good open framework and fitting it to my context was faster and better than starting from zero.
- Automating the repetitive part frees time for what matters, like preparing properly for each interview.
If you arrived from one of those applications, this page shows how I work: explicit criteria, a record of every decision and verification before sending.