← Projects

Job Scanner

The Problem

Manually checking job boards doesn’t scale. Listings are scattered across company career pages, aggregator sites, VC portfolio pages, and startup platforms — each in a different format, with no consistent way to evaluate fit. The time spent searching and reading listings was disproportionate to the signal they actually provided.

What I Set Out to Build

A fully automated system that continuously monitors career pages across multiple sources, scores every role against a consistent set of criteria, and delivers only the relevant leads directly into a Notion database — filtered, ranked, and ready to act on. It needed to run automatically at no cost and require no manual intervention.

How It Works

Every two hours, the system checks hundreds of career pages across four source types: direct company job boards (the platforms most companies use to post roles, like Greenhouse, Lever, and Ashby), VC-backed company portfolios, broad job aggregators, and YC’s startup platform. It finds new listings automatically without needing to be configured for each company individually.

Each role gets scored 1–10. The scoring looks at job title relevance, the language used in the description, company signals like funding stage and investors, and flags roles that are a poor fit — overly corporate, sales-heavy, or the wrong location. An AI model handles the judgment calls where simple rules fall short. Anything below a 6.0 is dropped. Anything above 6.5 goes straight into Notion as a qualified lead.

The Result

Job Scanner runs continuously at zero cost, scanning hundreds of career pages every two hours and surfacing a clean, scored feed of relevant roles into Notion — ready to act on with no manual searching. The open-source repo lets anyone configure their own targeting and deploy it in minutes.

Stack

Python Core scanner — fetches, filters, scores, and pushes roles with no framework overhead
LLM Scoring AI-based role evaluation for nuanced fit assessment beyond keyword matching
Notion API Output layer — qualified roles written to a structured database with score, source, location, and review flag
GitHub Actions Runs every 2 hours automatically on the free tier — no server required
Adzuna + The Muse Aggregator sources for broad coverage beyond direct company boards