Scraping#Open-source alternatives#Web scraping

freehire: 3.3M live job postings, every one linking back to the source

freehire crawls postings straight from company ATS platforms, deduplicates them and links to the original page; MIT site, extension, API or self-hosted.

Project facts

GitHub Ecosystem
Repositorygithub.com/strelov1/freehire
License
MIT
Language
Go
Stars
2,974
Data checked
2026-10-23

Snapshot figures reflect the check date and may change over time.

freehire search demo: narrowing 3.3M live postings by region, work format, specialization and seniority

Job boards are the annoying part of a job search: the same role gets reposted by recruiters and aggregators half a dozen times, a chunk of the links are dead, and the posting the company actually wrote gets buried under all of it. freehire is an MIT-licensed open-source job search engine written in Go, and its whole approach is to crawl the source instead: each posting comes directly from the company’s own applicant-tracking system and links back to the original page. GitHubDaily recommended it with the figure of 3.3M+ postings from 470k+ companies; the README’s own numbers agree and go a little further. The repository had 2,974 stars as of October 23, 2026.

Core features

  • Crawls the ATS directly: Postings come from the major applicant-tracking systems — Workday, Greenhouse, Lever, Ashby, iCIMS — plus a long tail of aggregators and direct company feeds. The README splits its 320 sources into three kinds: 117 ATS platforms carrying about 2.94M postings, 133 aggregators and Telegram channels with about 445k, and 52 direct company feeds with about 23k.
  • One job, one entry: The same role posted to three boards is normalized into a single schema and collapsed on a stable key. The README’s snapshot of October 20, 2026 counts 3,371,563 unique open postings across 477,323 companies, and is explicit that every count is post-deduplication.
  • Faceted search that understands jobs: Region, work mode, seniority, skills and salary all work as filters, and the tags come from curated dictionaries — the README insists they are never guessed, so a posting without a reliable salary stays untagged.
  • More than search: The same repository holds a CV builder with ATS-safe templates, deterministic CV-to-vacancy scoring, an application board with stages, an inbox that links recruiter replies to applications, and an in-process assistant. docs/features.md says which features need an LLM endpoint and which draw on AI credits.
  • Open end to end: MIT-licensed, pipeline and frontend both. There is also a keyless public HTTP API (GET https://freehire.me/api/v1/jobs works with no credential), a separate CLI, and an MCP server for Claude Desktop and Claude Code.
  • Desktop and browser entry points: Official extensions are listed on both the Chrome Web Store and Firefox Add-ons; the README describes the Chrome one, a side panel next to whatever posting you are on that scores skill coverage against your freehire profile and can fill the application form. There is an iOS app on the App Store as well.

freehire's faceted search: filter columns for region, work format, specialization and seniority on the left, postings with company names on the right

Typical use cases

  • Job seekers: Treat freehire as the first hop — narrow the field with the facets, confirm the role is real on the company’s own page, then apply there. It removes the loop of cross-checking half a dozen aggregators.
  • Developers analyzing the job market: A keyless API plus a deduplicated, uniform schema suits salary statistics or skills-demand trend work without maintaining your own crawlers.
  • Anyone building a private jobs pipeline: The whole stack runs under Docker Compose with Postgres and Meilisearch, and adding a company is one row in the board catalog.

Quick start

The cheapest way in is the hosted site at freehire.me. To run your own, the README’s shortest path is a single make up — API, frontend, Postgres, Meilisearch, Redis and S3 all come up in Docker:

make up        # build + start the whole stack: api, web, postgres, meilisearch, redis, s3
curl localhost:8080/health
curl localhost:8080/api/v1/jobs

One thing to know: make up starts services, not data. Postings arrive through standalone crawl workers (for example go run ./cmd/ingest greenhouse), so a fresh self-hosted instance does not magically hold 3.3M jobs.

Summary

freehire suits people who treat a job search as a project: they want clean first-party postings data and are willing to wire it into their own tools through the API or a self-hosted instance. If you just want to browse openings, the hosted site and the browser extension are enough, and self-hosting is overkill.

A few limits belong up front. Coverage leans on the mainstream Western ATS ecosystem; there are only 52 direct company feeds, and Chinese job platforms are largely outside its lanes. A self-hosted instance holds exactly as many postings as the sources you configure and keep running. The setup also depends on other companies’ career infrastructure staying stable — when an ATS changes its shape, a crawl channel breaks until someone patches the adapter, which is presumably why adding a source is one catalog row. The repository was created on June 7, 2026, is not archived, and its most recent push was October 24, 2026, so maintenance is active.

For the stage after finding a posting — ranking, tailoring, tracking applications — see ai-job-search, which runs that part on Claude Code; for turning recorded conversations into structured notes, AudioNotes is a lighter local option. We checked the README, the repository metadata and the live API on freehire.me; we did not run the full stack ourselves.