How we score every posting for ghost-job risk
How the hiring signal works: five bands, the thresholds, why age is a floor, why a missing salary is not penalised, and what we refuse to score yet.
JobHabor · Published
Every posting on this board carries a hiring signal: a band, a score, and the list of measured facts that produced it. This page is the whole method. It is written so that someone who disagrees with a verdict can find the rule that produced it, and so that an employer who thinks we have been unfair can see exactly what we looked at.
The short version: we score a posting on how it has behaved over time, not on how it is worded. The scorer is a pure function — the same posting with the same history produces the same score on any machine, with no model involved and nothing to tune per employer.
What the score means
Scores run from 0 to 100, and they run the opposite way to most numbers attached to a job. A higher score means weaker evidence that anyone is really hiring. It is not a quality score and it is not a rating of the employer. Every competitor in this space numbers it the other way round, which is worth saying before you read the table.
| Band | Score | On a card | What it means |
|---|---|---|---|
| active | below 20, and only with positive evidence | Actively hiring | Recently posted, or still listed on the employer’s own board at a recent check. |
| open | 20–44 | no chip | Nothing unusual about this posting’s history. |
| stale | 45–69 | Stale | Open longer than most roles take to fill. |
| ghost_risk | 70 and above | Ghost risk | Several things about its history suggest it may not be filled. |
| unrated | no score | no chip | Not enough history to judge it. Never a soft pass. |
Two of the five show no chip at all on a card, and that is deliberate. A badge on every posting is not a signal, it is wallpaper: at twenty cards to a page, something that always appears stops being read by the third one. The chip appears when there is something to tell you.
unrated is the one people misread. It is not a quiet pass. It means the evidence did not say — most often because the posting carries no publication date and predates our own crawling, so its age is unknowable rather than short. Awarding the best band to the postings we know least about is the mistake that band exists to avoid.
Signals only a history can show
These are the ones a tool that reads a single posting cannot compute, and they are the reason this board can say anything a paste-a-URL checker cannot. They come from watching the same employer’s board day after day.
Days open. Measured against the 42 to 44 days an average US role takes to fill. At 45 days a posting is worth noting; at 60 it has been open longer than most roles take to fill; at 90 and 120 the weight climbs; at 180 days the age alone is the verdict.
Reposts. How many times the same employer has advertised the same role, in the same place, within a year. Three postings of it add a little, five more, eight more again, twelve most of all. A role genuinely filled and genuinely reopened is ordinary once. A role advertised twelve times in twelve months is a standing collection point.
Missing from the employer’s own board. When a posting has been absent from two or more consecutive complete listings but nothing has yet been able to confirm it is gone, that absence counts against it. It is the most likely ghost in the corpus: still reachable, no longer advertised.
The employer’s record. What share of that employer’s current openings have been open more than 60 days. A quarter of them adds a little, two fifths more, three fifths most. This applies only to employers with at least eight live postings — below that the share is one or two requisitions and means nothing.
Signals in the text, and why they weigh so little
Wording is cheap evidence. It is what every other checker in this category runs on, and it is the part of a posting an employer can change in an afternoon without changing anything about whether the job exists. So it is in the model, and it is mostly worth very little.
The exception is copy that says the posting is not a live opening: a talent pool, a talent community, a general or speculative application, an expression of interest, future opportunities, an evergreen requisition, “we are always hiring”. In German that is an Initiativbewerbung and in French a candidature spontanée, both common on European boards — an English-only pattern would report a worldwide practice as an American one.
That signal is decisive rather than weighted. A posting that says it is collecting applications for future openings is a ghost job by the definition, and no amount of freshness changes it. Left as a weight, the credits below subtract it back down into the ordinary band, which is how a posting that says it is not a real opening ends up presented as one.
The rest are small: no location stated, a description too thin to describe the job, a description shared word for word with five or more of that employer’s other live postings, and a posting placed by a staffing or recruiting agency rather than the employer. None of them decides anything alone. The agency signal in particular is not an accusation — an agency posting is frequently a real role, it is one step further from the person who can fill it.
Credits: the evidence in a posting’s favour
The model subtracts as well as adds, and the credits are the part most methodologies leave out. A posting published in the last seven days earns the largest one. A posting still present in its employer’s own listing at a check within the last 48 hours earns another — that is a real check against the source, and it is how most postings here reach the top band. A published salary range earns a small credit, and so does a posting somebody has already applied through.
Two floors that cannot be argued down
Age is a floor, not a contribution. A posting open two hundred days is open two hundred days, and publishing a salary does not make it younger. Without that rule the credits subtract their way across a band boundary and a six-month-old requisition comes back reading “Actively hiring”. Pipeline copy sets the same kind of floor for the same reason.
Why “Actively hiring” has to be earned
The top band renders with a green tick, and that is a claim rather than a default. So it requires positive evidence: at least one credit. A posting three weeks old that nothing has been able to check is not evidence of active hiring, it is evidence of nothing — and evidence of nothing is what the ordinary band means.
This matters more than it sounds. Before the rule existed, a score of zero — the score of a posting we knew almost nothing about — collected the strongest badge on the board.
Why a missing salary costs a posting nothing
Most live postings on this board publish no salary at all, and every competitor treats that as a ghost-job signal. We do not. A signal that fires on most rows in the table separates nothing: it shifts the whole distribution one notch and buys the appearance of rigour. Publishing a range is real evidence, so it is a credit rather than its absence being a penalty.
What we deliberately do not score yet
Three signals belong in this model and are not in it: whether an employer ever closes a requisition, how many they have closed recently, and their median time to close. They would be among the strongest evidence here, and they need a lifecycle history longer than ours.
Scoring them today would print “has closed 0 of 40 postings” beside the names of employers who close roles perfectly normally, because our own record of postings leaving a board is younger than the boards are. That is not a rounding error. It is a false statement about a named company, published at scale. They arrive when the history can answer, and the whole corpus is rescored when they do.
The closest thing scored today is the employer’s share of openings over 60 days, which is measured entirely from what is on their board right now and needs no record of closures at all.
Calibrated against published research
The weights are a calibrated starting point rather than a law. They were set so that the share of postings in each band sits on the conservative side of the published work: Greenhouse (2025) puts ghost jobs at 18 to 22% of US postings, and Four-Leaf (2026) found 17.6% of live applicant-tracking-system postings open past 60 days, with 29.9% carrying at least one structural signal.
Conservative on purpose, because every one of these verdicts lands on a public page next to a named employer. Our own current shares are on the ghost-job page, measured from the corpus and dated, rather than written into this article where they would be stale within the month.
Deterministic, daily, and re-derivable
Nothing here involves a language model. The scorer takes a set of measured facts and returns a number. It reads no clock of its own, makes no network call, and has no per-employer configuration. That is what makes every threshold on this page testable, and it is why the same posting cannot score two different ways.
Every posting is rescored daily, because the score moves on its own: “open 59 days” becomes “open 60 days” with nobody touching anything, and a board that rescored only on change would quietly serve yesterday’s verdicts. When a weight changes, the whole corpus is re-derived from the history already held — no re-crawl, and no employer treated differently because of when we happened to reach them.
The evidence lines are stored with the score rather than recomputed for display, so the reason you read beside a posting is the reason that actually produced its number.
Employers are scored on a separate scale
An employer is not a posting. A company with one stale requisition among forty fresh ones is not stale, and collapsing both onto one number is what makes a single 0 to 100 rating unreadable. Employers get their own four-way verdict, and only once they have at least eight live postings. Weak means most of their openings are over 60 days old; mixed means about a quarter are.
Measured facts, never intent
Every line of evidence on this site is a fact in the employer’s own terms. “Open 143 days.” “This role has been posted 6 times.” “Still listed on the employer’s own board.” None of them is a statement about what anyone intended.
That distinction is why this can be published beside a company’s name. A role can sit open for months because of a hiring freeze, a slow approval or a reorganisation, with nobody intending to mislead anyone. What a flagged posting tells you is that applying may not get you a reply, which is the thing you needed to know.
There are things we cannot see, and the checker says so on every result: whether anyone is reading the applications, whether a budget has been approved, and whether an internal candidate has already been chosen.
What a subscription changes, and what it does not
Every posting is shown to everyone, scored, free — including the ones that score badly. The band, the explanation and the strongest piece of evidence are on every job page with no account at all. A paid plan lets you act on the signal at scale: hide the flagged postings, sort and filter by band, and keep 25 saved searches with alerts as often as hourly. One saved search with a daily or weekly email is free.
Nothing is withheld from you, and nobody can pay to change a score. There is no employer relationship to buy, because the score is computed from the employer’s own board by a function with no input for money.
Check a posting you found elsewhere, or browse the board with every posting already scored.
Sources
The published work we calibrated against. Our own figures are measured live on the ghost-job page rather than quoted here, because they move.
- 18–22%
- of US job postings are ghost jobs — Greenhouse, 2025
- 17.6%
- of live ATS postings are open past 60 days — Four-Leaf, 149,008 postings, 2026
- 29.9%
- of them carry at least one structural ghost-job signal — Four-Leaf, 2026
- 42–44
- days is the average time to fill a US role — SHRM
Browse jobs scored for ghost-job risk →
Every posting, scored, free. Nothing is withheld from you.