Article
Ghost jobs: how to check a listing before you spend an hour applying
You found the posting, it read like it was written for you, and you spent an hour tailoring the resume and drafting a cover letter that referenced the team by name. You hit submit. Three weeks later — nothing. Not a rejection, not an auto-reply bounce, just silence. You go back to check the listing and it is still there, still "actively hiring," exactly as it was the day you applied.
The page alone cannot tell you which explanation applies. The requisition may have closed, the employer may still be collecting candidates, or your application may simply not have advanced. Treat “ghost job” as a risk to investigate, not a diagnosis you can make from silence alone.
The hour you can't get back
A dead listing does not look dead. It has a title, a description, a "posted 3 days ago" badge, an apply button that works. Nothing about the page tells you the requisition closed, the hire already happened internally, or the posting was never tied to a real opening in the first place. So you do the same work you would do for a live role: research the company, mirror their language back in the cover letter, follow up a week later when you hear nothing.
That is the asymmetry that makes ghost jobs expensive. Applying costs you real time. Leaving a posting up costs the company nothing. There is no meter running on a stale job listing — no bounced email, no support ticket, no automatic expiry in most systems. So the incentives are lopsided: you have every reason to verify before you apply, and almost nobody on the other end has any reason to take the posting down. Once you internalize that asymmetry, the fix stops being "write better cover letters" and starts being "spend two minutes confirming the role is real before you spend an hour on it."
Why dead listings stay up
Several mechanisms can leave a public listing out of sync with the employer's current intent. The bullets below are possibilities to check, not claims about a particular company.
- ATS reposting. Applicant tracking systems often "refresh" a listing's posted date automatically to keep it visible in board search results, even when the underlying requisition hasn't changed. A posting that shows "posted this week" can be a role that opened months ago.
- Evergreen pipelines. Some companies keep a posting live year-round for roles they hire on a rolling basis — not because a specific seat is open right now, but to keep a pool of resumes warm for whenever one opens. The listing is honest in intent but misleading in urgency.
- Agencies farming resumes. Recruiting agencies post roles to build a candidate database, sometimes for a job that was filled, sometimes for a client relationship that never firmed up. The posting exists to generate applicants, not to fill a specific seat.
- Board syndication lag. Aggregators pull from company career pages and ATS feeds on their own schedule. A role closed on the company's site can keep circulating on three other boards for weeks because nobody re-syncs the feed that fast.
- Nobody is paid to take it down. Closing a requisition is an extra click for a recruiter who is already juggling twenty open roles. Leaving it up is the path of least resistance, and there is no cost to them for doing so.
For a stricter reference point, the U.S. Bureau of Labor Statistics counts a position as a job opening only when a specific position exists, it could start within 30 days, and the employer is actively recruiting outside the establishment. A visible web page does not prove all three conditions, and the BLS definition does not let an applicant classify one particular listing.
Signals a listing is probably dead
None of these alone is proof. Together, they are a pattern worth trusting.
- Reposted date churn. The "posted" date keeps resetting without the description ever changing — a strong sign the ATS is auto-refreshing it rather than a human re-opening the role.
- Old on an aggregator, gone from the source. The listing shows 30+ days old on a job board, but you cannot find it anywhere on the company's own careers page. If the company itself no longer lists it, the aggregator is showing you a stale copy.
- Vague team and manager language. Real, currently-open roles usually name a team, a manager, or a specific project. A description that reads generically — "join our growing team" with no team named — is more often boilerplate that has outlived the opening it was written for.
- Agency fingerprints with no client named. A posting from a staffing agency that won't say which company you'd actually work for, paired with a job title that could describe a dozen different companies, is built to collect resumes rather than fill one seat.
The two-minute manual check
Before you write a single sentence of a cover letter, do this:
- Find the posting on the company's own ATS or careers page, not the board where you found it. Search
site:boards.greenhouse.io [company]or[company] careersand look for the exact title. - If it's not there, it's very likely closed. The board is showing you a cached copy of a listing the company already took down.
- If it is there, click apply and confirm the form actually loads. Some stale listings stay indexed with a working title and description page, but the apply link 404s or redirects to a generic "no open roles" page — the tell that the requisition closed after the listing was cached.
Two minutes, and you now know whether the hour you're about to spend has anywhere to land.
Automating the check
Doing that lookup by hand for every promising posting adds up fast. Oink reduces the work by combining available public sources, ranking viable candidates on a 0–5 scale, and applying liveness checks where the pipeline has enough evidence. Those checks can fail or become unavailable, so a delivered card is not certification that the requisition remains open. Confirm the original page before applying; the job-source guide explains where coverage and freshness can break down.
Describe the role you want and add a resume where required or useful. Oink searches the public sources available to your run, ranks viable postings 0–5, and delivers explained matches on the web or in Telegram.
Check the door before you knock. Save the letter for the roles that can actually open it.