Glossary
The vocabulary the docs use, defined in one place. Every term links to the page where it does real work — the glossary is the way in, not a second copy.
The data model
- ATS (Applicant Tracking System)
- The software an employer runs its hiring on — Greenhouse, Lever, Workday and the like. Each customer gets a public job board hosted on the ATS, and those boards are where every posting in this dataset is read from.Sources & ATS coverage
- The company join
- The defining property of this API: every job posting carries its hiring company inline — name, domain, industry, headcount, HQ — rather than a bare employer string you have to resolve yourself. One request answers questions like "remote Rust roles at Series-B fintechs over 200 people".The Company object
- Firmographics
- Company-level attributes — industry, employee count, domain, headquarters — attached to the employer on each posting. What lets you filter jobs by the kind of company doing the hiring, not just the job itself.The Company object
- Skills
- Exact-match skill tokens extracted from each posting ("python", "airflow", "cuda"). Present on about 84% of postings — a filter on skills is a stronger statement than it looks, because it also drops everything nobody tagged.Skills & taxonomies
- Taxonomy
- A normalised job family ("Software", "Sales") assigned to a posting so you can group roles across employers who title them differently. Populated on roughly two-thirds of the dataset.Skills & taxonomies
- work_arrangement
- The Remote / Hybrid / On-site classification of a role. Distinct from location.remote — they draw on different evidence and disagree on purpose, so pick the field that matches the question you're asking.Enums & vocabularies
- Salary normalisation
- Pay bands from every source reshaped into one salary object with annual_min / annual_max in a common currency and unit — so Greenhouse's cents and Ashby's typed tiers arrive identically. Present on about 36% of postings, because most employers publish no band.Salary data
- apply_url
- The employer's real application form — the same URL a candidate reaches from the company's own careers page, not a redirect or an aggregator's mirror. Falls back to the posting url when a board publishes no separate apply link.The Job object
Sources & provenance
- Source
- The board a posting was ingested from (greenhouse, lever, linkedin…), carried on every posting and usable as a filter. It's an exact, case-sensitive, free-form match — not a checked enum — so a typo returns zero rows rather than an error.Sources & ATS coverage
- source_type
- How a posting reached us: ats (the employer's own board), jobboard (a third-party board like LinkedIn), or aggregator (a re-listing site). One filter on one schema, rather than the separate products some providers sell for each.Sources & ATS coverage
- Board
- One company's public job board on an ATS — a single careers page holding anywhere from zero to several thousand open roles. The ingestion queue tracks over 108,000 of them; a tracked board is where postings could come from, never a promise of how many you'll get.Boards tracked per provider
- Board token
- The identifier for a specific board inside an ATS's URL scheme — the segment in boards.greenhouse.io/<token>. Deriving it reliably is harder than it looks, because platforms accumulate several URL shapes for the same board over the years.How Greenhouse boards work
- Requisition ID
- The employer's internal identifier for a job opening. Frequently junk — employers type "tbd", "n/a" or a bare dash into it — so it can't be trusted as a stable key without filtering the placeholders out.What bites you on Greenhouse
Freshness & lifecycle
- Deduplication (collapsing)
- The same job posted to several boards is folded into a single row rather than returned multiple times. The surviving row's source tells you which copy won — not the only board the job ever appeared on.Duplicates & collapsing
- Board diffing (reaping)
- How postings expire: each time a board is re-fetched, roles that were there last time and aren't there now are marked expired. The employer taking a job down is the signal — expiry is never guessed.Expiry & reaping
- expires_at
- A posting's declared expiry, when a board publishes one. Most don't, so expires_at is usually null on a perfectly live posting — a null value does not mean the job runs forever.The Job object
- posted_at
- When a posting went live on its board. A good ordering key and "newer than X" filter — but the lag between a job going live and appearing here varies by source, so don't assume uniform latency.The Job object
- Refresh cadence
- How often boards are re-read. Ingestion runs hourly, working the stalest boards first; fast, direct APIs are hit every cycle while heavier or rate-limited platforms run less often. The whole pool is covered every few hours.Dataset coverage
Querying & access
- Feed
- The incremental endpoints built for keeping a local mirror in sync — new, expired and modified since a cutoff — covering a posting's full lifecycle. The right tool for bulk sync, instead of paging /v1/jobs to the end.Syncing the feed
- Cursor pagination
- Keyset paging via the next_cursor token, stable at any depth — the way to walk a large result set. Unlike deep offset paging, it doesn't get slower the further in you go.Pagination
- coverage_pct
- Live per-field fill rates published on /v1/meta — what share of postings actually carry a salary, skills, seniority and so on, remeasured continuously. The honest, current version of any completeness number.Dataset coverage
- /v1/meta
- The single live authority on the dataset: total counts, freshness, the source breakdown, and the exact filter vocabularies. When a number matters, read it from here rather than hardcoding it — everything else rots.Dataset metadata
- Quota
- The number of API requests a plan includes per calendar month, from 500 on the free tier up. Separate from the rate limit: quota is how many requests, the rate limit is how fast.Rate limits
- Rate limit
- The sustained requests-per-minute cap on a key, set by plan. Hitting it returns a 429; it protects the shared index and is the axis plans scale on alongside the monthly quota.Rate limits