TAU-HOME.COM
LOADING

freehire Pulls 3.3M+ Job Postings From Company Career Pages

The MIT-licensed project crawls company ATS platforms directly and collapses duplicate listings, with a Go and SvelteKit stack you can self-host.

tau · October 23, 2026

#job-search #open-source #dev-tool #career

freehire Pulls 3.3M+ Job Postings From Company Career Pages

Source-provided editorial visual for freehire

Image source: https://github.com/strelov1/freehire

Crawling Company ATS Pages

freehire is an open-source search engine for IT roles. Its README headlines the promise "Every IT job, straight from the source," and says each listing is crawled directly from a company's own applicant tracking system — Workday, Greenhouse, Lever, Ashby, iCIMS among others — and links to the original posting. The README's own source accounting is more mixed than that headline: alongside ATS platforms it counts a long tail of aggregators and direct feeds, plus 97 Telegram channels.

The README reports 3.3M+ unique live postings from 470,000+ companies across 124 ATS platforms, a long tail of aggregators and direct feeds, and 97 Telegram channels — 320 sources in all — noting that every such figure is what freehire.me/jobs actually shows.

One Schema, Deduplicated

Postings are normalized into one shape and deduplicated on a stable key, so a role posted to three boards collapses into one entry. Faceted full-text search covers region, work mode, seniority, skills and salary, using curated dictionaries.

The same repository also carries a CV builder, an application board and a keyless public API. The CLI and the MCP server for Claude Desktop and Claude Code live in separate companion repositories linked from that README.

Stack and Self-Hosting

The server is Go with Fiber v2, PostgreSQL with pgvector, sqlc-generated access, Meilisearch, Redis and S3-compatible storage, and a SvelteKit 2 and Tailwind 4 frontend under Docker Compose.

JWT_SECRET is required for the server to start; OAuth and LLM credentials are optional, and the features they gate stay disabled when unset. Crawling, enrichment, indexing and notifications run as standalone workers meant for cron, and the README states no worker hard-deletes jobs — the lifecycle only soft-closes them.

Sources

Original source

Impact-Site-Verification: 9b3ebd10-6c45-44cf-a014-5b8c19b7b285