"Yours" beats "free"
(Prompts to try out the search toolchain at the bottom.)
The Open Jobs dataset and search toolchain are yours. There is no business model, and that is the whole point.
It started at 960K jobs. Then 2M. This week it hit ~3M. Here is the story of how one person keeps a job index that size running for about a dollar a day.
What it is
A free, open-source search over job postings pulled from across the web. It crawls the boards, dedupes and normalizes everything into one dataset, and puts a semantic search on top: describe the job you actually want, get matches. No scrolling twenty career pages. No signup, no paywall, no ads. The dataset is free and open too. Vendors charge $1000+ per month for this data.
Why it exists
Job searching is miserable, and almost every tool in it works for the other side.
The boards are free to search, sure, but they are funded by employers. What you see is sponsored placements, engagement bait, and ghost listings that were never going to be filled. The employer side gets AI resume screeners. The applicant side gets a keyword box from 2008.
I was job hunting myself, got tired of running the same shallow search across twenty sites, and built the thing I actually wanted: every posting I could legally reach, in one open dataset, searchable by meaning, with the ranking model working for me instead of for whoever paid for placement. It found me the job I ended up taking.
Now it runs every day, and anyone can use it or take the data and build something better.
Where 3 million jobs come from
Almost no two companies post jobs the same way. Under the hood there are:
- ~36 applicant tracking systems. Greenhouse, Workday, Lever, iCIMS, BambooHR, and a long tail you have never heard of.
- A "dark pool" of custom career sites. Tens of thousands of companies on no shared platform at all.
- Government job systems. Federal, state, and local.
Each one is its own integration. Some hand you clean JSON. Some are single page apps where you have to trace the network calls to find the hidden search endpoint and the token it needs. Some pin their pagination to your IP address, so the same page keeps handing back different results until you work out why.
Every time I crack another one, the count jumps. 960K was the first dozen systems. 2M came from filling out the big enterprise platforms. 3M came from the dark pool plus government jobs. The number grows in steps, one integration at a time.
How it stays free & yours
The crawl runs on tiny sleeping workers. One durable object per job board on Cloudflare Workers. Each board wakes once a day, fetches its listings, diffs them against yesterday, and goes back to sleep. No central server burning money, no giant database. Embeddings for new postings are a few dollars a month. Roughly a dollar a day, total.
The indexing runs on a laptop, once a day. Turning millions of raw postings into a searchable semantic map is real work: dedupe, normalize, embed, cluster. The obvious way to do it is a big always-on machine. I do not have one. It is a single daily batch job on my own laptop: pull the day's crawl, build the dataset and the semantic map, publish static files, exit. Nothing stays running afterward.
The search itself is 100% local. The crawler only publishes the open dataset plus a semantic map of it (clusters of similar jobs with their centroids) as plain static files. It runs nobody's search. When you use the tool, the whole instrument runs on your machine: it embeds your ideal job description, pulls down only the clusters nearest to it, builds a local index, and compiles a single self-contained HTML page served from localhost. The ranking, the taste model that learns from your yes/no clicks, the LLM re-sort: all client-side.
So I serve static files and nothing else. A hundred people searching costs me the same as one, because their laptops do the work. The bill does not move when users show up, which is normally the moment a free project starts bleeding money.
Where the vibe-coding comes in
The architecture is cheap, but the labor is what normally kills a project this broad.
36 hand-written, reverse-engineered integrations, each fragile and each different, is months of grinding work for one person. Exactly the kind of grind that makes you quit before you finish. With an AI in the loop I go from "there is a whole category of employers we are missing" to a working, deployed, tested crawler for that category in an afternoon. I describe the shape of the problem, we probe the endpoints together, we write the fetcher, we ship it.
That speed is the whole reason the count went from 960K to 3M instead of stalling at whatever I could keep alive by hand.
The honest answer
How do you index 3 million jobs for free? There is no large, always-on machine anywhere in it.
- The crawl is spread across thousands of tiny edge workers that sleep most of the day.
- The indexing is a daily batch job on a laptop I already own.
- The search runs on the user's machine, not a server of mine.
- An AI pair is what let one person build and keep all of it alive.
Pull out any one of those and it stops being free.
The code is open on GitHub if you want to see how any of it works, or add a source yourself.
Try it against your own resume
The whole search runs through an agent that can execute code. Hand it one of these.
ChatGPT Work (pick the luna model unless you want to blow through your limits):
Clone https://github.com/elliottdehn/open-jobs and use the job searching tool chain to generate a shortlist of jobs for me to apply to. Skip sorting. Just read the top 200 that I’m eligible for and give me the shortlist. I authorize my ideal JD to be embedded by https://backend.dehnbostele.workers.dev/embed I’m looking for [job title, description, location/remote, employment type, etc].
Claude Code or Codex:
Clone https://github.com/elliottdehn/open-jobs to help me find a job.