Loading...
Loading...
Case study · JobAiroDelivered
A job search engine that finds companies’ own career pages, reads openings from Greenhouse, Lever, Workday and custom sites, and serves them in one fast, filterable search.

The challenge
Job boards are full of stale and duplicated posts. The freshest data sits on companies’ own career pages, spread across a dozen hiring systems. JobAiro goes to the source and keeps it current.
What made it hard
Openings live on thousands of career pages, across Greenhouse, Lever, Workday and custom builds.
Every platform structures titles, locations and salary differently.
Closed roles must disappear as fast as new ones appear, across every source, continuously.
The approach
A locator resolves each careers page and fingerprints its hiring platform. A router dispatches it to a dedicated adapter running on asyncio, with Selenium for JavaScript-heavy pages. Every result is normalised into one schema in Postgres, and stale roles are pruned on each pass.
System map
How it works
A locator finds each company’s careers page and works out which hiring system it runs on.
A router hands it to the right scraper (Greenhouse, Lever, Workday or a generic fallback), running concurrently.
Titles, locations, salary and stack are cleaned into one schema.
Roles land in a hosted Postgres database, with closed roles dropped on the next pass.
Candidates filter by remote, seniority, salary and recency, save searches and apply on the company site.
Key decisions
Each hiring system gets its own adapter behind a router, so a site change breaks one adapter, not the pipeline.
Pages are fetched concurrently, which is what makes thousands of sources practical.
Every role points to the company’s own application page, which keeps the data honest.
What shipped
Finds each careers page and identifies the hiring system behind it.
Greenhouse, Lever, Workday and a generic fallback, run concurrently.
Titles, locations, salary and stack cleaned into one model.
New roles upserted and closed roles dropped on every pass.
Remote, seniority, salary and recency filters, saved searches and direct apply.
Architecture
Every layer, from what people touch down to where it runs, and the one job each layer does.
L1Interface
Next.js+TypeScript+Tailwind
Fast faceted search over the normalised index.
L2Pipeline
Python+asyncio+Selenium
Concurrent, platform-specific scrapers behind a router.
L3Data
Supabase
Hosted Postgres holding the live, deduplicated role index.
Our scope
Data pipeline engineering/Distributed scraping/Search product/Web application
Where it is now
JobAiro is delivered. Every role deep-links to the company’s own application page, which keeps the data honest and the experience fair to employers.
Tell us the problem. We will tell you honestly if we are the right team to solve it.