How to tell if a job posting is a ghost job
There is one check that beats all eight signals below. Do that first. The signals are for the postings that survive it.
Run The Mission is Bradley's podcast from Wendling Nonprofit Consulting: nonprofit operations, with a job search series beside these notes. Every episode
The check that beats all eight. Open the employer's own careers page and find the seat listed there today. Not the aggregator. Not the email. The employer's site.
Aggregator pages keep rendering after the employer pulls the requisition down. That single gap produces a large share of what people experience as ghost jobs, and it costs you thirty seconds to close. If the seat is not on the employer's site, you do not have a posting. You have a task: find out whether it exists.
Estimates of how many postings are not real vary widely, which is itself worth knowing. Greenhouse, which sits inside the hiring process as an applicant tracking system rather than counting from the outside, put it at roughly 18 to 22 percent of postings in a quarter, with some sectors running near a third. Other published figures range from one in five to one in three depending on who counted and what they counted as a ghost.
The spread is the useful part. Nobody can tell you the odds on the posting in front of you. A rate does not help you tonight. A check does.
The eight signals, and what each one is worth
These are the eight signals Rolespect weights when it scores a posting for ghost risk. The weights are published here rather than buried in a model, because a score you cannot audit is a score you cannot argue with. Every signal you confirm adds its points. The total is capped at 100.
1. Open more than 30 days
20 pointsSet automatically from the posted date. Age past 30 days is the single strongest ghost job signal in the published research, and it is also the easiest one to check. A real search that has been running a month either has finalists or has stalled. Neither is a reason for you to be candidate 400.
2. Reposted with a refreshed date
15 pointsYou have seen this seat before, or the date resets while the text stays identical word for word. A genuine repost usually comes with a changed scope, a changed band, or a changed title. A refreshed date on unchanged text is a listing being kept warm.
3. Third party recruiter, client not named
15 pointsYou cannot verify the employer, the budget, or whether the search is live. Some of these are real and exclusive. Many are a recruiter building a bench against a req they have not won. You have no way to tell which, and that is the point of the signal.
4. Same text live under different company names
15 pointsCopy an exact sentence out of the description and search it in quotes. If the same paragraph is live under three employers, you are looking at a template someone is running at volume, not a seat someone needs filled.
5. Pay hidden with no legal reason
12 pointsNo range, and no state disclosure law forcing their hand. An employer that has decided what the seat is worth can say so. One that will not, in a market where disclosure is now normal, is either not ready to hire or is planning to price you off your current number.
6. Reads as a job family template
12 pointsGeneric duties, no named projects, no specific outcomes, nobody's real seat. A posting written for an actual opening names the thing that is broken or the thing that has to get built. A posting written for a job family names a category.
7. Title and pay band do not match
10 pointsA director title on a coordinator salary. Seven years of experience demanded for an entry level seat. Either the org has not decided what the role is, or the title is doing work the budget will not back. Both cost you the same evening.
8. No named hiring contact anywhere
8 pointsApplications go to HR Department and nobody owns the search. Check the careers page, the press release, LinkedIn, and the org chart. Real hires usually have a name attached somewhere, and if you cannot find one after ten minutes, that absence is information.
The three things that add points on top
Three conditions stack onto the eight signals rather than sitting among them, because they are about your ability to verify rather than about the posting's contents.
- Open more than 60 days, plus 10. Age is already counted once at 30 days. Past 60 it counts again, because the explanations that make a 35 day posting reasonable stop being available.
- You could not confirm the seat on the employer's site, plus 15. Not confirmed absent. Confirmed unknown. Failing to resolve the first check is itself the second heaviest thing on this page.
- Aggregator link and no confirmation, plus 5. An Indeed or LinkedIn URL is not a defect. An Indeed URL you never traced back to the employer is.
What a high score should actually change
A ghost score is not a verdict and it should not be read as one. Rolespect does not use it to tell you a posting is fake, because the app cannot know that and neither can you.
It changes one thing: what the posting is allowed to cost you.
- Low risk, confirmed live. Spend the evening. Tailor the resume, name your proof, find a human to write to.
- Middling risk. Apply if it clears your gates, but with a version of your resume you already have. Do not build a new one. Do not write the long letter.
- High risk. Do not apply into it. Go around it. Find the person who would own this seat and write to them about the work, not the posting. If the req is real you are early. If it is not, you have made a contact rather than fed a database.
That is the whole argument. The scarce thing in a job search is not applications. It is the evenings.
What this will not tell you
Being straight about the limits is part of the method.
- It cannot prove intent. An org that posts a role, loses the funding, and forgets to take it down produces exactly the same signals as one warehousing resumes. You get the same protection either way, but do not assume malice from a score.
- It penalizes small and underresourced employers. A nonprofit with no recruiter and one overworked HR generalist will trip the no named contact and template signals without any of it meaning what the signal implies. If you know the sector, weigh that yourself.
- Some signals need you. Age and liveness can be checked mechanically. Whether a description reads as a template is a judgment, and a person who has read a few hundred postings in their field makes it better than any scoring rule does.
- A clean score is not a good job. Real, live, and honestly priced is the floor, not the bar. Whether the role is worth your evening is a separate question, and it is the one Decide exists to answer.
Running it without the app
Nothing above needs software. If you want to do it by hand, the order is:
- Find the seat on the employer's own careers page. If you cannot, stop and resolve that before anything else.
- Note the posted date. Count the days.
- Copy one exact sentence from the description and search it in quotes.
- Look for a pay range, and check whether your state requires one.
- Spend ten minutes looking for the name of the person who would own the seat.
- Decide what the posting is allowed to cost you, and hold yourself to it.
Rolespect runs that sequence, keeps the record, and prints the rule that produced the call. It is free, there is no account, and nothing you enter leaves your browser.
Run this on a posting you are unsure about.
Decide applies these eight signals, confirms the posting against the employer's own page, and holds it against the gates you set once. Free, no account, and nothing you enter leaves the device.