Agentic AI Job Hunter With Email Report
Saved 3 hours per day in job search with an AI agent doing the heavy lifting
Problem
Reading and evaluting job postings across dozens of employer pages, job boards, and federal listings can be tedious and repetitive. To free up time focusing on the application process, networking, and preparing for interviews, I built an autonomous AI agent to find best-fit roles for me to apply to.
Note: This is NOT an auto-apply tool. I read every job description and manually apply ONLY if it's a great fit.
Here is how it works:
Summary
Using Anthropic's API, this autonomous AI agent makes my job search more efficient by deciding where to look, evaluating every opening against my profile, and emailing me a ranked shortlist, replacing the daily grind of manually checking dozens of career pages at various companies.
Rather than following a fixed script, the agent lists all configured employer sources, strategically decides which to check first, fetches and scores listings in real time, and stops the moment it has found enough high-priority matches. It pulls from three complementary channels: 1) Greenhouse API for structured job-board data, 2) static HTML careers pages, and 3) the official USAJobs API for federal roles.
Every listing it returns gets a fit score of 0 to 100, a HIGH/MEDIUM/LOW priority, a tailored two-sentence rationale, a skills-gap callout, disqualifier flags (on-call, relocation, salary mismatch), and a direct application link.
A key design decision was keeping all the intelligence in configuration files, not within code. The candidate profile, scoring criteria, and evaluation prompts live entirely in config.yaml, so the agent can be re-pointed at a completely different candidate or job market without modifying a single line of Python. All sensitive information, such as API keys, is stored in a keys.yaml file.
Another design decision to save on costs was to implement a tiered model routing to reduce token usage. I used Claude Haiku for high-volume HTML extraction and Claude Sonnet for orchestration and fit-scoring judgment. This cut token usage and costs while keeping scoring quality uniform across all sources.
Also wanted to note that this isn't a RAG pipeline using embeddings. Instead, I let the model read and score each listing directly against the profile. The only pre-filter is keyword matching. I chose LLM judgment over embedding similarity because nuanced fit (disqualifiers, skills gaps, etc.) needs reasoning, not just vector similarity.
Results
The results are assembled into a clean, color-coded HTML email and delivered automatically via Gmail SMTP. A small CLI exposes dry-run scoring, a configurable result count, and history reset to resurface previously seen roles. Turns about 3 hours per day of manual checking career sites and reading job descriptions into a hands-off, pre-scored shortlist for about $0.40 per run.
For future improvement: Since JavaScript-heavy platforms (Workday, iCIMS, Taleo) could not be scraped well due to rendering issues, they were flagged for manual review in order to prevent the workflow from outright crashing. Need to explore better ways to pull job listings from JavaScript-rendered pages.