I did eight rounds at one company in 2019, was told the offer was on its way, then a different recruiter said I had declined an offer I never saw, then I did four more rounds, passed again, and the headcount was closed. The market in 2026 still does this, just more efficiently. Roughly 27.4% of U.S. LinkedIn listings are estimated to be ghost jobs, and for data engineering the picture looks worse. If you are a DE not getting responses, a real fraction of the roles you applied to were never going to be filled by anyone.
DE postings dropped from 41,400 in Q3 2025 to 31,300 in Q1 2026, a 24% fall in a single quarter. In the same window 95,878 tech workers were displaced. Fewer real jobs, more candidates per role, and roughly one in three postings is a ghost.
What a Ghost Job Actually Is
A ghost job is a real company posting a real-looking req for a role they have no near-term plan to fill. BLS data from 2025 had employers reporting 7.4 million openings against 5.2 million hires, which leaves a structural 30% no-hire rate that is now persistent rather than cyclical.
The motivations behind these postings are unflattering but rational from the company side. 62% of hiring managers in a 2024 Resume Builder survey admitted posting roles to make current employees feel replaceable. 43% used postings to signal growth to investors during freezes. 38% kept boards populated as default corporate behavior. 26% explicitly built talent pools for hypothetical future needs.
Federal contractors and large companies sometimes have to post externally even when an internal candidate is already chosen. That posting is theater, the decision was made before the req hit LinkedIn, and you are part of the audit trail.
The hiring manager wants to hire, but finance has not signed off on the headcount, so the posting is aspirational.
That variant is the one most candidates miss. The team genuinely wants you. The manager is excited. The recruiter is conducting screens. The budget was never approved. You are interviewing for a role that lives in someone's head and not on any balance sheet.
The Salary Benchmarking Posting
Some companies post DE roles with absurd salary spreads, $80K to $200K, or vague "competitive compensation" copy, because the posting itself is the product. Your application, your salary expectations, and your years of experience mapped to your ask are free market intelligence. It is cheaper than a Radford survey and more current than Levels.fyi, and the labor of producing it is yours.
About 60% of job seekers will not apply to a posting that lacks a salary range. Companies that omit ranges know this. They are filtering for candidates desperate enough to apply blind, which gives them additional leverage in any compensation conversation that does end up happening.
If you are tailoring a data engineer resume for a role with a $120K spread, that is not a job posting. That is a survey.
How Many DE Listings Are Fake
There is no official government count. Congress confirmed in 2025 that the U.S. does not track ghost-job magnitude. The estimates from third parties cluster around the same range:
- 30% of tech postings are ghost jobs, per analyses from Fonzi AI and Metaintro
- 48% of tech-sector listings never result in a hire, per Norton's analysis of BLS JOLTS data
- 79% of fake tech listings remained active months after researchers flagged them
- The U.S. has a 2.1 million monthly gap between posted openings and actual hires
No one has published a DE-specific number. The qualitative case for DE having a higher ghost rate than general tech rests on how companies use specialized pipelines. NOSSA's research called out data engineers and data scientists as roles companies post specifically to "constantly monitor availability and salary expectations."
Confirmed hiring freezes as of April 2026: Snap, Coinbase, LinkedIn, DoorDash, and Meta (excluding ML/AI). Meta scrapped 6,000 open postings while running an 8,000-person layoff. Those postings stayed live on LinkedIn for weeks after the freeze was announced. People applied to them and did phone screens for reqs that had been dead for days.
Headcount-Frozen Pipelines
66% of CEOs managing $19 trillion in assets said in a 2026 Fortune survey that they planned to freeze or cut hiring through the rest of the year. The job boards do not reflect this because companies keep postings live to keep their candidate benches warm.
The internal logic: if a pre-screened candidate pipeline decays, around 58% of those candidates become unavailable during a freeze, and when budget eventually opens it takes 26 extra days to fill the role. So companies post now, screen now, and hire later, conditional on a budget that may or may not arrive.
The signal that you are warming a bench rather than progressing toward an offer: if a company takes 8+ weeks from application to first phone screen while claiming urgency, the req almost certainly does not have headcount approval. Real, funded roles in this market move 3 to 4 weeks from application to first call. Anything beyond that is a bench.
"We are always open to the right person" is the verbal version. Treat it as a tell. In a recruiter screen, ask directly when the last headcount in the department was approved and how many candidates are in final rounds today. If they cannot answer, that is the answer.
Red Flags in the Posting and the Process
After 20+ interview loops in a single search and several years on hiring panels, the patterns that separate real DE roles from ghosts are pretty consistent.
In the posting
- Live for 30+ days with no edits. Postings older than 30 days have meaningfully lower fill rates
- Skill requirements that cannot exist. "10+ years of Apache Kafka" reads as a fantasy req, since Kafka was released in 2011 and did not see mainstream adoption until around 2015
- Vague stack ("various data tools as needed") instead of concrete tooling like "PySpark ETL pipelines orchestrated with Airflow writing to Snowflake"
- No team context: no team size, no manager named, no description of what the team ships
- Salary spreads larger than $80K. A $40K to $120K range is data harvesting
In the process
- Automated rejection inside 30 to 60 minutes. Useful as a signal, since it confirms the ATS handled it without a human in the loop
- 21 days of silence after applying. The req was paused or the freeze is live, regardless of what the posting says
- The same role recycled every 30 to 60 days without ever closing
A SQL query you can run against your own application tracker to flag the obvious cases:
-- Flag postings older than 30 days or reposted 2+ times
SELECT
company_name,
role_title,
date_first_seen,
date_applied,
days_since_posted,
repost_count,
last_human_contact,
CASE
WHEN days_since_posted > 30 AND last_human_contact IS NULL
THEN 'LIKELY_GHOST'
WHEN repost_count >= 2 AND status = 'no_response'
THEN 'LIKELY_GHOST'
WHEN salary_range_spread > 80000
THEN 'BENCHMARKING'
ELSE 'POSSIBLY_REAL'
END AS ghost_score
FROM job_applications
WHERE status NOT IN ('offer_received', 'rejected_after_interview')
ORDER BY ghost_score, date_applied DESC;
And a Python check that compares a third-party listing against the company's actual careers page before you invest a weekend:
import requests
from bs4 import BeautifulSoup
from datetime import datetime
def verify_posting_exists(company_careers_url: str, job_title: str) -> dict:
response = requests.get(company_careers_url, timeout=10)
soup = BeautifulSoup(response.text, 'html.parser')
page_text = soup.get_text().lower()
title_words = job_title.lower().split()
match_score = sum(1 for w in title_words if w in page_text)
confidence = match_score / len(title_words)
return {
"found_on_careers_page": confidence >= 0.7,
"match_confidence": confidence,
"checked_at": datetime.now().isoformat(),
"recommendation": "APPLY" if confidence >= 0.7 else "VERIFY_DIRECTLY",
}
Referrals Are Doing Most of the Real Hiring
68% of tech roles are now filled through employee referrals rather than job-board applications. Referred candidates are hired at 30% versus 7% for cold applicants. Referrals make up about 2% of total applicant volume but 11% of actual hires.
That is an economics argument, not a moral one. The expected value of a cold application in a market where 30% of postings are fake and overall conversion sits at 4 to 5% is approaching zero. Time put into your network has roughly 4x the return per hour. If you are still spending 80% of your search on cold applications and 20% on outreach, the ratio is inverted.
For DE specifically that means technical Slack groups, GitHub contributor networks, local meetups, and former colleagues who have landed somewhere. If you are prepping for data engineering interviews, prep for the ones connected to a real budget.
Verifying a Role Before You Invest Time
15 minutes of verification before you spend a weekend on PySpark interview questions or SQL practice problems:
1. Cross-platform check. Search the exact job title on the company's official careers page. If it only appears on Indeed or LinkedIn but not on the company site, treat it as suspect.
2. Hiring manager validation. Find the named hiring manager on LinkedIn. Confirm they actually work at that company, in the relevant department, at the level that would manage the role.
3. Recent hire velocity. Open the company's "People" tab on LinkedIn, filter for "Data Engineer," and sort by most recent start date. Companies that ghost-post tend to have unusually low recent-hire velocity for the role they are advertising.
4. Freeze cross-reference. Layoffs.fyi and TrueUp will tell you whether the company has announced a freeze or layoffs in the past 90 days. Meta, Amazon (retail and corporate), LinkedIn, DoorDash, Snap, and Coinbase all had confirmed freezes as of April 2026.
5. Apply inside 7 days of the original posting date. Roles posted beyond 30 days have meaningfully lower fill rates. If you cannot find the original post date, that is itself a signal.
-- Score companies before applying
SELECT
company_name,
role_id,
posting_date,
CURRENT_DATE - posting_date AS days_open,
has_confirmed_freeze,
found_on_careers_page,
hiring_manager_verified,
recent_hires_in_dept,
CASE
WHEN has_confirmed_freeze = TRUE THEN 'DO_NOT_APPLY'
WHEN days_open > 30 AND recent_hires_in_dept = 0 THEN 'HIGH_RISK'
WHEN found_on_careers_page = FALSE THEN 'VERIFY_FIRST'
WHEN hiring_manager_verified = TRUE
AND days_open < 14
AND recent_hires_in_dept > 0 THEN 'STRONG_SIGNAL'
ELSE 'MODERATE_RISK'
END AS application_priority
FROM tracked_postings
WHERE application_priority != 'DO_NOT_APPLY'
ORDER BY
CASE application_priority
WHEN 'STRONG_SIGNAL' THEN 1
WHEN 'MODERATE_RISK' THEN 2
WHEN 'VERIFY_FIRST' THEN 3
WHEN 'HIGH_RISK' THEN 4
END;
Questions worth asking in the recruiter screen
- "When was this headcount approved?" Hesitation answers the question.
- "How many candidates are currently in final rounds?" Zero after weeks of posting tells you the role is not active.
- "Is this a backfill or a new position?" Backfills carry urgency. New roles in a freeze do not.
- "What is the target start date?" A vague answer means a vague timeline means no commitment.
81% of recruiters acknowledged in a 2024 ResumeBuilder survey that their employer posts roles with no near-term plan to fill them. Asking direct questions in a screen is reasonable diligence, not rudeness, and a defensive recruiter is itself a data point.
Adapting to the 2026 Market
The freeze pattern is not going to fix itself in the near term. 66% of CEOs in the Fortune survey said they planned to maintain hiring freezes through year-end. Ontario passed legislation in January 2026 that requires companies to disclose whether postings are genuine, and Kentucky has proposed similar rules with civil penalties. U.S. candidates do not have that protection today.
The practical adjustments for a DE search in this market:
- Verify postings before you prep. 15 minutes of research saves a weekend of system design review for a role that does not exist
- Weight your time toward referrals. Referrals account for 68% of tech hires, so your search should reflect that ratio, not invert it
- Track your own pipeline. Log posting dates, response times, and ghost signals. Treat your search as the data problem it is
- Apply inside 7 days of a posting going live. Past 30 days the role is usually dead or paused
- Ask whether headcount is approved on the first call. The answer is worth more than a perfect take-home
The hire rate dropped from roughly 8 hires per 10 postings in 2019 to 4 hires per 10 in 2024, and 2026 has not reversed it. The market is genuinely hostile, but hostile and impossible are different conditions. Real roles still exist and real companies are still hiring. The cost is that you can no longer afford to spray applications into postings that were never going to convert, and you cannot afford to hand out free salary data to companies that have no intention of making you an offer.