April 28, 2026 9 min read

How to Tell If a Job Is Already Filled Internally (Before You Waste an Hour Applying)

Roughly half of corporate roles are filled by internal candidates before they're posted. Here are the eight signals that tell you a job is already spoken for.

A friend of mine spent four hours on a single application last month. Custom cover letter, tailored resume, two writing samples, a "tell us about a time" essay. She submitted it on a Tuesday. By Friday, the recruiter emailed back: "We've decided to move forward with another candidate at this time." The role had been live for less than a week. The hiring manager had announced the new hire on LinkedIn the next Monday. It was a colleague she'd worked with two roles ago.

The job was always going to that person. The posting was a formality.

This is more common than most job seekers realize. A 2024 survey of large U.S. corporations found more than 50% of openings are filled by internal candidates before they hit the public job board. Add in ghost postings — between 21% and 33% of online listings in 2025–2026, according to MyPerfectResume's analysis of BLS JOLTS data — and a significant share of what you're applying to was never actually open to you in the first place.

The good news: the signs are usually obvious once you know what to look for. Here's how to read them in under five minutes per posting.

Why companies post jobs they've already filled

Three reasons, and they explain almost every "fake" listing you'll encounter.

First, compliance. Federal contractors covered by OFCCP rules have to post most openings externally even when they intend to hire internally — the rule is meant to ensure veterans and protected groups get equal access. Public-sector employers, universities, and many Fortune 500s have similar internal policies that require a 7-, 14-, or 30-day external posting window before an internal promotion is finalized. The role is functionally filled the day it's posted. You're decorating their audit trail.

Second, internal HR rules. Even private-sector companies often require hiring managers to "interview at least three external candidates" or "leave the posting open for two weeks" before promoting from within. The hiring manager wants to promote Jamie. Jamie is going to get the job. But the manager has to sit through a few external interviews to satisfy HR.

Third, pipeline building. Companies with high turnover or high-volume hiring keep "evergreen" postings open year-round to collect resumes for future need. Sales SDR, customer success, junior engineer — these roles often have a permanent posting that isn't tied to a specific opening at all.

None of these are illegal. Most aren't even unethical. But they waste your time, and recognizing them is the single highest-leverage filter you can apply to a job board.

The 8 signals a job is already filled internally

Here's the checklist I use. Most postings will trip two or three of these. If a posting hits four or more, I skip it.

Signal What to look for Why it matters
1. Hyper-specific requirements Five years of a niche tool, plus a specific certification, plus domain X experience Reads like a description of one specific person
2. Posting age over 45 days Listed date or "X days ago" on LinkedIn Real openings fill in 30–60 days; older = ghost or filled
3. Repost cycle Same role appears every 30 days with a fresh date Compliance reposting or no real urgency
4. Vague responsibilities, specific qualifications "Help drive growth" + 8 bullets of must-haves Job description was reverse-engineered from a person
5. Unicorn skill stack Three unrelated competencies in one role Pattern-matches to one internal employee who already does all of it
6. Salary band missing or absurdly wide "$90K–$240K" or no range at all Range was set to fit a specific known candidate
7. No "apply" link on company careers page Only on LinkedIn or Indeed Company isn't actively pushing the role
8. Recent internal-mobility news LinkedIn shows promotions in that team in the last 30 days The chair is being filled by someone already in the room

Each signal alone is weak. Two together is suspicious. Four or more and the posting is almost certainly compliance theater or a ghost. The rest of this article walks through how to actually check each one in under five minutes.

How to check the posting age (and why 45 days matters)

LinkedIn shows "Posted X days ago" on every listing. If it says 30+ days, click into the company's careers page and see if the role is also listed there with a date — sometimes LinkedIn refreshes timestamps when reposting, but the company ATS shows the original.

Greenhouse, Lever, and Ashby all expose a posting date in the URL or page metadata. View source on the page and search for "created_at" or "posted_at." For Workday, the URL often contains a job requisition ID — older IDs mean older postings, even if the date displayed is recent.

Why 45 days? A 2024 SHRM analysis found the median time-to-fill for non-executive corporate roles in the U.S. is 36 days from posting to offer accepted. Anything over 45 days without changes to the description is either a ghost or stalled internally. Technical and senior roles can legitimately stay open longer — 60 to 90 days isn't unusual for a Director of Engineering — but those postings tend to get edited and refreshed as the search progresses. A 90-day-old posting with the exact same wording it had on day one is rarely a real, active search.

The unicorn skill stack: the most reliable tell

The single most predictive signal in my experience is what I call "the unicorn stack" — a set of required skills that nobody on the open market actually has in combination, but exactly one person inside the company does.

Real example from a posting I saw last quarter for a senior product role at a fintech:

That's not a job description. That's a LinkedIn profile. And sure enough, three weeks later they announced an internal promotion. The hiring manager wrote the JD around the person they'd already chosen.

If you see four or more required skills that feel oddly specific — especially when one of them is geographic, language-based, or tied to a niche tool — search the company on LinkedIn for current employees who match the profile. If you find one, the job is theirs. If you find none, it might still be a unicorn posting where the candidate is external and already in the pipeline.

Cross-check the careers page and LinkedIn employee tab

This is the highest-leverage two-minute check in job hunting and almost nobody does it.

  1. Go to LinkedIn → company page → People → filter by the job's department
  2. Sort by "Recently joined" or scroll for new title changes
  3. Check if anyone in that team has been promoted, transferred, or hired in the past 30 days
  4. Cross-reference the job description against current employees one rung below the open role

If someone in the same team got a promotion two weeks ago and the JD reads like their resume, you're applying for a posting that exists to satisfy HR's "external candidates considered" requirement. Move on.

This is also why I always check the careers page on the company's own website, not just the LinkedIn or Indeed listing. If the role is on LinkedIn but missing from the company's own ATS, it's often an aggregator picking up an old posting that's been quietly removed. If the role is on the careers page but the URL returns 404, same story. We covered this kind of aggregator drift in our autofill guide — it's one of the reasons applying through the company's own ATS is almost always better than applying through LinkedIn.

The "we built this because we hit it ourselves" part

We built Hppr AI because the math on job hunting got broken. When you're spending an hour per application and 21–33% of postings are ghosts and another 50% are already filled internally, you're effectively working on commission with a take rate of less than one in five. That's why our pipeline tracking surfaces interview-conversion rates per company — if a company is bringing 5% of its applicants to first round and the industry baseline is 12%, you can guess what's going on.

But you don't need our tool to do this. The underlying technique is just: track which companies actually move you forward, and stop applying to the ones that don't. We wrote a whole piece on the interview conversion rate metric that walks through the math. Whether you do it in a spreadsheet, in Notion, or in our app, the rule is the same — application volume without conversion analysis is just typing.

When to apply anyway

Not every internal-leaning posting is a complete waste. Three situations where I'd still apply:

You have a connection in the hiring team. A warm intro can often unseat the heir apparent, especially if the internal candidate is "fine" rather than "obvious." The compliance posting opens a door for an outside candidate who the hiring manager actually likes more.

The role is on a fast-growing team. If the team is hiring three of these in the next quarter, the internal candidate gets one and you might get one of the other two. Look for repeat postings of the same title — that's good if there are multiple openings, bad if it's one role being recycled.

The salary band is published and competitive. Some compliance postings are real searches with internal frontrunners. Published salary bands at the upper end of market are a sign the company has a budget and is willing to pay outside the org chart for the right person.

The math problem is just don't apply to ten of these in a week. Apply to one, ideally with a referral, and put the other nine hours into roles that don't have the markers.

A 5-minute checklist before you hit submit

Before you spend any time customizing a resume, run this:

  1. Posting age — under 45 days?
  2. Reposted recently? Check Google: site:linkedin.com "[exact job title]" "[company]" — multiple results = repost cycle
  3. Required skills — fewer than four hyper-specific musts?
  4. Salary range — published and reasonable, or absent/absurd?
  5. Team page on LinkedIn — any promotions or new hires in this team in the past 30 days?
  6. Same role on company's own ATS — yes, with a working URL?
  7. Easy Apply only? — if you can't apply through the company's actual ATS, the posting may be aggregator drift (we covered this in the LinkedIn Easy Apply piece)
  8. Glassdoor recent reviews mention "internal politics" or "they hire from within"?

If you fail three or more, skip it. If you fail one or two and it's a dream company, apply — but do it in 30 minutes, not three hours. Save the deep customization for the postings that pass.

The honest truth

You can't tell with 100% certainty whether any given posting is real. Some unicorn JDs are genuinely searching for unicorns. Some old postings are real, slow searches. Some compliance postings end with the external candidate winning.

But you don't need certainty. You need a filter that's right 70% of the time, applied across hundreds of postings. That alone shifts your applied-to-real-jobs ratio from maybe 50% to closer to 80%, which roughly doubles your effective hit rate without you doing any more work.

Most candidates don't apply this filter at all. They treat every posting as a real opportunity, spend an hour on each, and wonder why their interview rate is 3%. The candidates who quietly outperform aren't writing better cover letters — they're filtering harder before they ever sit down to write one.

Five minutes of due diligence per posting beats an hour of cover letter polish on a job that was always going to Jamie.

Run your job search like a pipeline.

Hppr AI tailors your resume per role, auto-fills applications across Workday, Greenhouse, Lever, Ashby and iCIMS, and shows you the one number that actually matters: your real interview conversion rate.

Try Hppr AI free →