Ghost jobs: how to tell whether a posting is a real opening
One test beats every warning-sign list — check whether the role is still on the employer's own ATS board. We ran the warning-sign lists against 6,507 live postings to see how well they work, and mostly they do not.
- job-search
- research
- ats
Open the employer's own applicant tracking board and look for the role there. If it is not on job-boards.greenhouse.io/{company}, jobs.ashbyhq.com/{company} or jobs.lever.co/{company}, the posting you are reading is a copy that outlived its original, and no amount of squinting at the wording will tell you that.
That one check catches more dead postings than every "red flag phrase" list put together, and we can show why — we ran those lists across our whole index.
All the numbers here are from 6,507 live postings, measured on 3 August 2026. They will drift; the shape of the finding will not.
"Ghost job" is four different things
Lumping them together is why the advice is so bad. They have different causes and different tells.
1. The frozen req. The opening was real, the budget moved, and nobody took the posting down. The employer is not lying to you; a hiring manager is waiting for the same approval you are.
2. The already-filled req. Someone internal got it, or a referral did, and the posting stays up for a required posting window or for appearances.
3. The pipeline net. A staffing agency, or an employer's own talent team, collecting résumés against a role that does not have a requisition behind it. This is the one people mean when they are angry, and it is the rarest of the four in our data.
4. The fossil. The posting was completely real, it closed, and only an aggregator's copy of it survives. This is the one you will actually hit most often, and it is nobody's fault — it is a caching problem wearing a conspiracy costume.
Only the fourth is reliably detectable from outside. Fortunately it is also the most common, and the test takes ten seconds.
The warning-sign lists barely work
We encoded the standard advice as detectors and ran them across the index. Ten rules, matched against 6,507 postings. Here is what actually fired:
- Barely any description (under 200 characters): 726
- Demands round-the-clock availability: 47
- Hype job title (rockstar, ninja, guru): 12
- All-caps title: 12
- Urgency spam (needs two or more hits): 11
- Unpaid role: 5
- Unrealistic earnings claims: 4
- Evergreen repost language ("pipeline req", "continuously hiring", "evergreen"): 3
- Commission only: 3
- MLM signals: 2
Three. Out of 6,507. The single detector aimed squarely at ghost postings — the one that looks for a posting admitting it is a pipeline — fires three times.
This is not a bug in the rules. It is the finding. A ghost job's text is a real job's text, because it usually was a real job's text. Nobody writes "this requisition is frozen" into a job ad. The phrase-matching approach works well against scams, spam and MLM pitches, and it is close to useless against the thing people are actually worried about.
So use the phrase lists for what they are good at, which is telling a scam from a job, and use a different method for telling a live opening from a dead one.
The board test, in detail
Every ATS-sourced posting we index carries which board it came from and its id there. You can do the same lookup by hand.
Find the board. Most careers pages are the board, or link to it. The company's LinkedIn "Jobs" tab usually is not.
Watch for vanity domains. 1,147 of the Greenhouse postings in our index apply on the employer's own domain — stripe.com/jobs/search?gh_jid=…, careers.airbnb.com/positions/…, jobs.dropbox.com/listing/…. That is still Greenhouse underneath, and the gh_jid in the URL is the board's posting id. Not finding "greenhouse.io" in the address does not mean it is not on Greenhouse.
Then just look. A live board lists every open posting. If yours is not there, it is closed. There is no ambiguity and no interpretation required — this is the employer's own system of record, updated by the employer, and it is public.
If it is there, you have learned something real: the requisition is open in the system that pays people. That does not prove the budget is unfrozen. It does rule out the most common failure by far.
The three signals we would still weigh
Weaker than the board test, but not nothing.
Age. 527 postings in our index carry a posted date more than 90 days old. A 90-day-old software role at a company that ships is not automatically fake, but it is a role where something is going slowly, and that is worth knowing before you spend an hour tailoring.
A description that describes nothing. 726 postings in our index have under 200 characters of description. Whatever else that is, it is not a posting written by someone who has thought about who they want. Two hundred characters is about one long sentence.
The same title from the same company, again. 576 title-and-company combinations appear more than once in our index. Some of those are genuine parallel openings on different teams. Some are one req reposted to refresh its date, which is a real practice and one you can spot yourself by watching a board for a fortnight.
Salary disclosure is a quality signal, not a ghost signal
Since it comes up: 2,896 of 6,507 postings state a salary. Split by where they came from, that is 48% of postings we pulled from an employer's ATS and 37% of postings we pulled from an aggregator.
That gap is mostly about what survives copying, not about employer honesty. A posting is not a ghost because it hides the money. It is just harder to evaluate, and it is fair to weight it lower for that reason alone.
The checklist
- Find the employer's own ATS board and confirm the role is on it. If it is not, stop.
- Check the posted date on the board, not on the aggregator. Aggregators frequently stamp their own ingest date.
- Read the description. If it does not describe the work, it is not costing you an hour.
- Run the scam checks — unpaid, commission-only, pay-to-apply, contact-us-on-Telegram — which are the ones that genuinely work by phrase.
- Apply on the board, never on the copy.
Crossing does step 1 and step 5 for you as a matter of routing: 3,976 of the 6,507 postings in the index sit on a board whose questions we can read, and the rest open the employer's page with a plain note about why we could not help. That ratio moves every day as the index turns over — we would rather tell you the behaviour than print a percentage that rots. How the run queue works has the mechanics.