I checked 32,000 job postings: how many are ghosts?
One snapshot of 32,263 open postings on 324 public job boards. The median posting has been up 51 days, and 6.1% have been open for more than a year.
"Ghost jobs" are postings for roles a company is not actively trying to fill: evergreen talent pools, roles kept up to look busy, or listings nobody took down. Job seekers can't see inside a company, but they can see the postings. So we looked at what one snapshot of public job boards can and cannot tell you.
We collected every open posting on 324 public Greenhouse, Lever and Ashby job boards on October 11, 2026: 32,263 postings from 324 employers, with 0 board failures.
- 90 days or less
- Over 90 days
Source: Greenhouse, Lever and Ashby public job-board APIs, 2026-10-11 · Data: jobs.json · Code: ghost-jobs
Show the data (7 rows)
| Age | Postings |
|---|---|
| 0–7 days | 2,918 |
| 8–30 | 8,466 |
| 31–60 | 6,928 |
| 61–90 | 3,907 |
| 91–180 | 5,291 |
| 181–365 | 2,783 |
| Over a year | 1,968 |
Signal 1: age
Every posting carries the date it was first published. The median open posting was 51 days old. 31.1% were older than 90 days, 14.7% older than 180 days and 6.1% older than a year.
The oldest still-open posting, a Software Engineer - Motion Planning role at Zoox, was first published on February 8, 2016, 3,897 days before our snapshot. Several of the other oldest postings say what they are in the title: "Your Chance to Join Our Talent Community!", "Don’t see the perfect fit?".
Long-open postings concentrate at a few employers. Among companies with at least 50 dated postings, Gopuff had 90.5% of its 796 postings open for more than 180 days. At the other end, Lambda had none.
Source: Greenhouse, Lever and Ashby public job-board APIs · Data: jobs.json · Code: ghost-jobs
Show the data (10 rows)
| Company | Dated postings | Share over 180 days | Median age (days) |
|---|---|---|---|
| Gopuff | 796 | 90.5% | 1192 |
| Lyra Health | 561 | 54.0% | 190 |
| Ro | 55 | 45.5% | 152 |
| Fin | 106 | 41.5% | 162 |
| Scale AI | 182 | 37.4% | 130 |
| Databricks | 892 | 33.5% | 101 |
| Wrike | 58 | 32.8% | 102 |
| Waabi | 97 | 32.0% | 54 |
| Verkada | 306 | 31.0% | 92 |
| Figma | 150 | 30.7% | 81 |
A high share is not an accusation. Retail, delivery and clinical employers often hire continuously for the same roles and keep one posting up for years. That is a real job, and age alone can't tell the two apart.
Age also depends on the job board software. Lever postings had a median age of 152 days against 46 on Greenhouse, partly because of which date each system exposes. Compare postings within one system.
Signals 2–4: wording, duplicates and missing pay
Source: Greenhouse, Lever and Ashby public job-board APIs · Data: jobs.json · Code: ghost-jobs
Show the data (4 rows)
| Signal | Share of postings |
|---|---|
| Open more than 180 days | 14.7% |
| No pay in the public feed where a pay law applies | 5.8% |
| Exact duplicate open at the same time | 1.1% |
| Says it is a pipeline / talent-community post | 0.3% |
- Pipeline wording. 106 postings (0.3%) describe themselves as talent-community, general-application or "not a current opening" posts. Our first, looser phrase list flagged 4.5% of postings, but reading a sample showed it was mostly catching boilerplate footers, so we tightened it. The smaller number is the honest one.
- Duplicates. 370 postings (1.1%) were exact duplicates of another open posting on the same board: same title, location and description under different IDs. That can mean several hires for one role.
- No pay in the feed where a pay law applies. In states and cities with pay-transparency laws, 5.8% of postings had no USD pay figure in the public feed. Some employers show the range only on their own careers site (we confirmed two and excluded them as unknown), so this measures the feed, not compliance.
What one snapshot can't show yet
The two strongest ghost-job signals need history:
- Reposts: a posting that closes and reappears under a new ID with the same content, resetting its age.
- Silent edits: a description that changes while the posting ID and date stay the same.
Both need at least two snapshots, and weeks of them to mean anything. The collector now runs daily and appends each snapshot to the project’s data branch. The repost and edit signals are still accumulating; we will report them in a follow-up post once there is enough history to say something real. Until then, the combined ghost score in the app stays low for most postings (median 5.1 out of 100), because two of its signals contribute almost nothing on day one.
Methods
- Collection. Public job-board APIs for Greenhouse, Lever and Ashby, one snapshot from 2026-10-11T01:42:06Z to 2026-10-11T01:45:23Z. Boards were found by probing 661 candidate company slugs on all three systems and keeping those with at least one open posting.
- Age = snapshot time minus Greenhouse
first_published, AshbypublishedAtor LevercreatedAt. Employers can republish to reset this date, so ages are lower bounds. 32,261 postings had a date. - Pipeline wording is a regex over titles and posting-specific description phrases; the phrase list is in the Ghost Jobs repository (
scripts/signals.py). - Duplicates = same board, normalized title, location and description hash under different posting IDs.
- Pay-law coverage = displayed location in a state or district with a posting pay law in force on the snapshot date, or remote across the US. Employer-size thresholds were not checked.
Limits
The board list is curated and mostly US tech companies, so this is not a sample of all job postings. Every signal here has innocent explanations. A posting being old, duplicated or vague is a reason to ask the recruiter questions before investing hours in an application. None of it proves a job is fake.
Data and code
Every number and chart in this post is generated from these files:
The projects that collected the data:
- Ghost Jobs (source not published yet)
- Pay Range Radar (source not published yet)