I built an AI that finds and scores my next job A career-changing developer in his forties built a five-stage job-hunting pipeline that has evaluated more than 1,500 postings this year while surfacing only a handful of applications. The system combines 16 API and RSS sources plus Playwright scrapers for boards like Indeed, StepStone, LinkedIn and Arbeitsagentur, then applies deterministic string filters before an LLM scores fit against an honest profile; a verification stage that fetches the real posting body killed six consecutive LinkedIn candidates whose titles overstated the role. The builder argues rules should filter before models are called, LLMs should never generate job postings, and the final read and application should stay human. Every week my tooling sweeps around twenty job sources and pulls in a few hundred postings. A single recent LinkedIn sweep returned 112 results. Over this year the pipeline has evaluated more than 1,500 postings and parked 1,539 of them. The number of jobs I have actually applied to? A handful. That ratio is the whole point. I am a career changer in my forties. Five years in banking operations at Lloyds, eight years delivering mail, two years as a Windows sysadmin, and currently I run print production shifts at an Amazon facility. This year I finished a BSc in Computing and IT with the Open University. What I do not have is a professional software engineering title, so I am hunting for my first one, and I need it remote. Job boards are exhausting for everyone, but they are especially exhausting when you are filtering for a narrow set of constraints and you have never held the title you are applying for. So I built the tooling I could not buy. Stage 1, collection. Sixteen API and RSS sources, plus Playwright-based sweeps for the boards that have no API: Indeed, StepStone, LinkedIn via a saved session , and the German Arbeitsagentur job board with deep search terms. Each source writes a markdown file of raw results, and everything lands in a SQLite-backed dedupe store so no posting is ever processed twice. Stage 2, hard elimination. Before any model sees anything, cheap deterministic filters kill the obviously wrong postings. A title containing "Senior" when the range is junior. A city outside my radius. Recruiter spam patterns. Skills bars over three years of professional experience, because "Erste Erfahrung" first experience is fine for me and "5+ years" is not. These filters are strings and rules, not model calls, and that is deliberate: they cost nothing and they are auditable. At last count the confidence list held 12 survivors, 23 maybes, and 1,539 parked. The parked bucket being enormous is the system working correctly. The funnel in one picture: a weekly LinkedIn sweep produces 112 raw results; after dedupe, hard elimination, and body-verification, the apply-now queue holds 12. Stage 3, LLM scoring. The survivors get read by a language model that scores fit against my honest profile, including the constraints that usually get discovered at the interview stage. Written German at B1 means customer-facing roles demanding "verhandlungssicher Deutsch in Wort und Schrift" are a no for me, while internal team communication in German is fine because my spoken German is C1. Encoding these rules as a prompt instead of gut feeling removed a whole class of optimistic mistakes. Stage 4, verification. This is the stage that earned its place the hard way. Aggregator titles flatter. Six consecutive LinkedIn candidates that looked perfect by title died when I fetched the actual posting body: the "junior" role wanted five years, the "remote" role wanted three days on-site in another city, the "AI engineer" role was actually a data-labeling gig. The rule now is absolute: nothing enters the apply queue until the real posting body has been fetched and read. Stage 5, the human. I open the URL myself and read the posting myself. Then I draft exactly what the form requires, one application at a time. No batch-generated cover letters, no auto-submit. When applying is expensive you actually read, and that is the feature. Filter hard before you call the model. Rules are free, tokens are not, and determinism beats cleverness for anything you would want to debug at 6 a.m. before a shift. Never let an LLM generate the job postings. Left alone, a model asked to "find jobs" will happily invent believable postings with plausible URLs. Mine only ever ranks what the scrapers actually fetched. Every URL in the queue was downloaded from a real board. The last mile should stay human. The pipeline's job is to make me picky, not lazy. Automation found me a short list worth reading carefully, and the careful reading is mine. For a career changer, the pipeline is the portfolio. I kept waiting for a project impressive enough to prove I could engineer software. At some point I noticed the most honest proof was already running: tested Python, real scrapers, a dedupe store, CI on the ETL framework, and a system in daily use solving a real problem with real stakes. The tools in this post are public: job-sweep https://github.com/Reaver1000/job-sweep is the scrubbed sweep toolkit, and remote-job-engine https://github.com/Reaver1000/remote-job-engine handles discovery and scoring. I am available for junior or associate roles from November 2026, fully remote from Germany or UK-remote as a British citizen. If you are hiring for AI integration, automation, data, or QA work and any of this resonates, everything is on my site: reaver1000.github.io https://reaver1000.github.io , or find me on LinkedIn https://www.linkedin.com/in/david-a-buchan/ . And if you are also job hunting in this market: build the tool before you trust the board. The board does not have your interests at heart. The pipeline does, because you wrote it.