← Back to all work
FLAGSHIP CASE STUDY · APPLIED AI
CASE 005 · PERSONAL AI

Job Search OS.

An agentic AI system I run on myself. Apollo + Apify + n8n + LLMs orchestrating verified contact discovery, resume tailoring, and personalized outreach. End-to-end, from job discovery to email draft, in two minutes.

RoleBuilder · Sole architect
DurationOngoing · v3.2
Year2026
StatusRunning daily
View Live PipelineReal-time agent flow · opens in new tab

The problem.

Most job applications die in ATS systems before a human ever reads them. The numbers are bleak: industry data puts portal-only application response rates at 2–4%. Recruiters at large companies receive hundreds of applications per role and rely entirely on keyword filtering. Highly qualified candidates get rejected by software they never see.

The fix isn't writing a better resume. The fix is bypassing the ATS entirely — finding the actual decision-maker and reaching them directly with a tailored, specific message that proves you understand their problem.

Doing this manually for every role takes 90 minutes: read the JD carefully, hunt for the hiring manager on LinkedIn, find their email, tailor a resume, write a custom email, send. I wanted that workflow to take 2 minutes. So I built an agent system that does the heavy lifting and leaves me to review and send.

The architecture.

The system is built around n8n as the orchestrator, with eight stages running in sequence. Each stage has a specific tool responsibility, with an LLM step at three points handling the reasoning that can't be coded deterministically.

01
Job Discovery
Apify · LinkedIn Jobs Scraper
Scheduled run pulls fresh JDs from LinkedIn for target companies. Returns structured job records with full descriptions, location, posted date, and applicant counts.
02
JD Parser
LLM · Claude Sonnet
Extracts hard requirements, nice-to-haves, and dealbreakers (visa exclusions, location requirements). Outputs structured JSON for downstream filtering.
03
Fit Scoring
LLM · Claude Sonnet
Compares parsed JD against my candidate profile. Returns a 0–100 score with reasoning. Roles below 75 are rejected automatically. Above 75 advance to enrichment.
04
Contact Enrichment
Apollo MCP
Resolves three contacts per role: hiring manager, the director one level above them, and the recruiter. Uses domain + title filters with verified email enrichment.
05
Profile Scraping
Apify · LinkedIn Profile
Pulls public LinkedIn data for each contact: career path, recent posts, mutual connections, education. Used to personalize outreach.
06
Resume Tailor
LLM · Claude Sonnet
Generates a one-page resume tailored to the specific JD. Locked rules: Calibri, bold underlined headers, three-line summary, XYZ-format bullets, no em dashes. Outputs as docx + PDF.
07
Email Drafter
LLM · Claude Sonnet
Writes three personalized outreach emails — one per contact — anchored on the JD requirements and the contact's specific background. Different angles for hiring manager vs. recruiter.
08
Human Review Gate
Approval · Manual
All outputs land in draft state. I review the resume, edit the emails, and approve before any send. The system is built for augmented sending, not autonomous.

What's hard.

01

Contact resolution accuracy

The Apollo step has to find the right person, not just any person. A senior data analyst hire reports to a Director of Analytics, not the VP of Engineering. Got this wrong early on — emails went to people who could not actually hire me. Fixed by stacking title + seniority + domain filters and validating the email before send.

02

Personalization vs. template detection

The first version produced templated outreach that recruiters flagged immediately. Fixed by giving the LLM the contact's full LinkedIn context — recent posts, prior companies, specific projects — and instructing it to anchor the opening on a specific detail. Reply rate jumped from ~3% to ~14%.

03

Resume rule enforcement

LLMs love to break formatting rules. The resume must be Calibri, bold underlined headers, exactly one page, three-line summary, no em dashes, XYZ bullets. I run a post-generation validator that re-reads the resume, checks each rule, and asks the LLM to retry if any fail. Adds 20 seconds; eliminates manual fixing.

04

Knowing when to stop

The system can run autonomously, but I deliberately keep a human gate. Sending 30 cold emails a day in my voice without me reviewing them would degrade quality fast and risk burning bridges. Augmented > autonomous for high-stakes outreach.

The outcomes.

14.2%
Reply rate to outbound
vs. ~3% portal-only baseline
2m 14s
End-to-end run latency
vs. ~90 min manual workflow
312
Pipeline runs (30 days)
~10 fresh roles processed daily
99.4%
Pipeline uptime
Stage-level retry handling

The stack.

n8n
Workflow orchestration. Chose it over Zapier and Make for its code escape hatches and self-hostable architecture.
Apollo MCP
Verified contact enrichment. Domain + title + seniority filters with email validation.
Apify
LinkedIn jobs and profile scraping. Two specific actors used: jobs-scraper and company-employees-scraper.
Claude API
All reasoning steps. JD parsing, fit scoring, resume tailoring, email drafting. Sonnet for cost-effectiveness.
Gmail API
Final send step. All emails go through my own account so they look like normal personal outreach, not automation.
Python
Resume validator scripts and small data transformations between n8n stages.

What's next.

The version running today is v3.2. The current focus is improving the fit-scoring step — early versions over-indexed on keyword overlap and passed roles that were technically aligned but practically wrong (different industry vertical, mismatched seniority). v3.2 added explicit dealbreaker detection, but there's still ~12% false-positive rate on fit calls.

The bigger architectural question is whether to extend the system beyond my own search. The pattern — agent-orchestrated outbound with specific contact enrichment and tailored deliverables — generalizes to any B2B sales motion. I've been thinking about whether this becomes a productized version focused on sales teams at small companies who can't afford a full-time SDR.

Up nextComcast
All work ↑