CoolFace
Datasetpublic

Lynceus/jobs

Lynceus Open Job Index 239,487 open roles at 6,432 companies, 43,062 of them remote. Read directly from each employer's own careers page and public ATS feed — never aggregated or reposted from a job board. Last updated: 2026-09-25 04:21 UTC What this is Most job datasets are scraped from aggregators, which means they are a copy of a copy: stale, deduplicated badly, and full of listings that were filled weeks ago. This one is read at the source — each employer's… See the full description on the dataset page: https://huggingface.co/datasets/Lynceus/jobs.

sourceHugging Facecc-by-4.0updated 44m agoView on Hugging Face
1likes566downloads
Dataset Card

Lynceus Open Job Index

239,487 open roles at 6,432 companies, 43,062 of them remote. Read directly from each employer's own careers page and public ATS feed — never aggregated or reposted from a job board.

Last updated: 2026-09-25 04:21 UTC

What this is

Most job datasets are scraped from aggregators, which means they are a copy of a copy: stale, deduplicated badly, and full of listings that were filled weeks ago. This one is read at the source — each employer's own ATS feed — and a listing is removed when the company takes it down, so the set does not accumulate filled roles.

This is a labour-market dataset, not a job board. It tells you who is hiring, for what, where, and when the role was posted. It deliberately does not carry apply links: the URL of a posting also identifies the employer's job board, and the mapping of company to board is the part of this that took real work to build. Searching and applying happens in the product.

Configs

ConfigRowsWhat it is
jobs (default)239,487One row per open role
companies6,432One row per employer, with its open-role count
python
from datasets import load_dataset

jobs = load_dataset("Lynceus/jobs", "jobs", split="train")
companies = load_dataset("Lynceus/jobs", "companies", split="train")

Fields

jobs

FieldTypeNotes
titlestringThe role, as the employer wrote it
companystringEmployer name
locationstringFree text, as published — not normalised
remoteboolMarked remote by the employer
posteddateYYYY-MM-DD; empty when the source omits it

companies

FieldTypeNotes
companystringEmployer name
open_rolesintOpen roles at export time

What is excluded, and why

  • —Recruiters, staffing agencies and job-board aggregators. Every entry is an employer hiring for itself.
  • —Companies with no career page or no open role. There would be nothing to apply to.
  • —Non-commercial domains — .org, .edu, .gov and similar.
  • —Job descriptions. They are the employer's own copyrighted text, and republishing them wholesale is not ours to do.
  • —Apply URLs and careers-page links. See above — a posting URL identifies the employer's job board, and that mapping is not published.
  • —Roles found by scraping a company's careers page rather than reading an ATS feed. Those stay in the product.

Known limitations

  • —location is free text exactly as the employer published it, so London, London, United Kingdom and London, GB all occur. Normalise before aggregating.
  • —posted is missing for a minority of rows, because not every ATS feed publishes it. Sort with nulls last.
  • —Company names originate from ATS tokens for board-sourced employers, so some appear as slugs (Openai rather than OpenAI).
  • —Coverage skews toward companies using Greenhouse, Lever, Ashby, Workable and similar modern ATS platforms.
  • —Without a URL, a row cannot be de-duplicated against another dataset or followed to the posting. That is a real cost of the trade above and worth stating rather than discovering.

Licence

The compilation is CC BY 4.0 — use it, build on it, credit Lynceus. Individual listings are facts about public job ads and remain the property of the companies posting them.

Corrections and removals: open a discussion here, or an issue at github.com/trylynceus/jobs. Employers who would rather not appear are removed the same day.

Links