---
title: "How to spot ghost jobs: a seven-point checklist mapped to real data fields"
description: "[NewSearch millions of jobs from your AI agent with MCP→](/blog/jobspipe-mcp-server)"
canonical: https://jobspipe.dev/blog/how-to-spot-ghost-jobs
last_updated: 2026-09-10
---

[NewSearch millions of jobs from your AI agent with MCP→](/blog/jobspipe-mcp-server)

[All posts](/blog)

![](/listly/card-field.png)

GuideSpot

Guide·Sep 9, 2026·7 min read

# How to spot ghost jobs: a seven-point checklist mapped to real data fields

Every ghost job check you can run by hand corresponds to a field on the posting record: age, reposts, close status, description length, salary, the employer's open-role count and posted-date drift. Run the checklist on one listing with the checker, or run it on thousands with three API filters.

![Dvir Atias](/authors/dvir-atias.jpg)

Dvir Atias

Founder, JobsPipe

Spotting a ghost job by hand means asking seven questions of the listing. Each one maps to a field JobsPipe stores on the posting record, which means you can run the checklist on one job with a URL or on a hundred thousand with a query. This post gives the checklist, the honest answer to whether ghost jobs are real, how to avoid them, and the API version of every check.

## How to spot ghost jobs: the seven checks

Spot a ghost job by checking its age, whether it has been reposted, whether it ever closes, how thin the description is, whether it names a salary, how many roles the employer has open at once, and whether its posted date keeps moving. No single check is conclusive. Two or three together are.

### 1\. How old is it really?

The date on the board is what the board says. The date that matters is when the posting was first seen anywhere. On a JobsPipe record that is `discovered_at`, and the ghost score treats 45 days as the first threshold and 90 days as the second. If you only have the listing, search the exact title and company and look at the earliest copy you can find.

### 2\. Has it been reposted?

A posting that vanishes and returns is being refreshed. JobsPipe counts a repost when a posting has three or more sightings with a gap of ten days or more between them. By hand, the tell is a “posted 2 days ago” listing whose text you have read before.

### 3\. Does it ever close?

`status` is active or closed, and a closed posting carries `closed_at` and a `closed_reason`: the source said so, the page went away, or it went unseen long enough to count as gone. `last_seen_at` is the last time a recheck confirmed it live. A listing that is always active while similar roles from the same employer close is the one to question.

### 4\. Is the description thin?

Under 400 characters is the ghost score’s threshold. A real hiring manager writes requirements, a team, a location and something about the work. A placeholder has a title and a paragraph of boilerplate.

### 5\. Is there a salary?

`min_annual_salary_usd` and `max_annual_salary_usd` are null on most postings, so this is a weak signal on its own: 66.9% of scored postings lack a salary. It matters when it stacks with the others, and in pay transparency states a missing range is itself a warning.

### 6\. How many roles does the employer have open?

A company with 500 or more open roles is a mass poster, and mass posters are where evergreen requisitions live. 19.2% of scored postings belong to one. By hand, open the employer’s careers page and count; through the API, search `company_name_or` for the employer and look at how many active postings come back and how old they are.

### 7\. Does the posted date keep moving?

Compare `date_posted` with `discovered_at`. A posting whose claimed date is 30 or more days later than when it was first sighted has been re-dated, which is the stale posted date signal. By hand, this is the same job showing “new” on three consecutive visits.

## Are ghost jobs real?

Yes, and they are less common than the discourse suggests. Across ten boards, 17.8% of scored active postings carry a ghost score of 25 or higher, meaning at least one strong signal plus a supporting one, and 1.3% score 50 or higher. Roughly 1 in 6 listings deserves scrutiny. The rest behave like normal openings: they are posted, they are seen for a few weeks, and they close.

The share varies enormously by board, from a few percent on boards that expire free listings on a timer to most postings on applicant tracking systems dominated by mass posters. That spread is the most useful thing to know, and it is laid out in [ghost jobs by job board](/blog/ghost-jobs-by-job-board).

## How to avoid ghost jobs

Avoid ghost jobs by preferring recent postings, preferring postings with a salary and a substantial description, checking the employer’s own careers page rather than a board copy, and checking one listing directly before spending an hour on an application.

-   **Sort by first seen, not by the board’s date.** Boards re-date; a sighting log does not.
-   **Prefer the employer’s own page.** A board copy can outlive the original by weeks. If the careers page no longer lists the role, the board copy is a ghost whatever its date says.
-   **Treat a repost as a yellow flag, not a red one.** Large employers refresh requisitions constantly. A repost plus a thin description plus no salary is a different matter.
-   **Check before you apply.** Paste the job URL into the checker on the [ghost jobs page](/ghost-jobs). It returns the posting’s first and last sighting, its status and close reason, its score and the signals visible on the record. Thirty seconds, no account.

## The same checks as API filters

Every check above is a filter or a field on `POST /v1/jobs/search`. This request keeps only active postings, drops anything scoring above 24, ignores anything posted more than 30 days ago and requires a posted salary.

```
curl -X POST https://api.jobspipe.dev/v1/jobs/search \
  -H "Authorization: Bearer $JOBSPIPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "job_title_or": ["account executive"], "status": "active", "max_ghost_score": 24, "posted_at_max_age_days": 30, "min_salary_usd": 60000, "limit": 25 }'
```

Checks 1, 3 and 7 come back as fields (`discovered_at`, `status`, `closed_at`, `closed_reason`, `last_seen_at`, `date_posted`) so you can apply thresholds of your own. Check 2 and check 6 are folded into `ghost_score`. To see the shape without a key, send the same body to `POST https://api.jobspipe.dev/v1/sandbox/jobs/search`. The definitions behind the thresholds are in [what are ghost jobs](/blog/what-are-ghost-jobs).

Two refinements are worth knowing. Setting `status` to `closed` or `any` lets you audit your own feed: pull the postings you surfaced last month and count how many have since closed with a `closed_reason` of `stale` or `gone`, which is the closest thing to a ghost rate for your users. And because the mass poster signal fires on every role at a very large employer, a hard cap of 24 will remove legitimate openings at those companies; if they matter to your product, raise the cap to 44 and let `posted_at_max_age_days` carry the age check instead. The same filters are available through the [JobsPipe MCP server](/mcp-server) for agents that recommend roles.

Run all seven checks with one request. Free tier included.

![](/listly/shape-heart.png)

FAQs

## Frequently Asked Questions

### How do you spot a ghost job?

Check seven things: how old the posting really is, whether it has been reposted, whether it ever closes, whether the description is thin, whether it names a salary, how many roles the employer has open at once, and whether the posted date keeps moving. No single check is conclusive; two or three together are.

### Are ghost jobs real?

Yes. Across ten boards, 17.8% of scored active postings carry a ghost score of 25 or higher and 1.3% score 50 or higher. Roughly 1 in 6 listings deserves scrutiny; the rest are posted, seen for a few weeks, and close.

### How do I avoid ghost jobs?

Sort by first-seen date rather than the board's date, prefer postings with a salary and a substantial description, check the employer's own careers page rather than a board copy, treat a repost as a yellow flag rather than a red one, and check a single listing directly before spending an hour on an application.

### Is there a tool to check whether a job is still open?

Yes. The checker on the JobsPipe ghost jobs page takes a job URL and returns the posting's first and last sighting, its status and close reason, its ghost score and the signals visible on the record. It needs no account.

### How long is too long for a job posting to be open?

The ghost score treats 45 days from first sighting as the first threshold and 90 days as the second. Most roles on most boards are filled or pulled before 45 days, so a posting past that point with no other explanation deserves a second look.

### How do I run these checks through the API?

Use POST /v1/jobs/search with status set to active, max\_ghost\_score to cap the score, posted\_at\_max\_age\_days to exclude old postings and min\_salary\_usd to require a salary. Age, close status and posted-date drift come back as fields (discovered\_at, status, closed\_at, closed\_reason, last\_seen\_at, date\_posted) so you can apply your own thresholds.

[

← Previous

Are ghost jobs illegal? What the 2026 transparency bills propose and what the law already says

](/blog/are-ghost-jobs-illegal)[

Next →

LinkedIn ghost jobs: how common they are, what they look like in the data, and how to filter them out

](/blog/linkedin-ghost-jobs)

---
Canonical URL: https://jobspipe.dev/blog/how-to-spot-ghost-jobs
Title: How to spot ghost jobs: a seven-point checklist mapped to real data fields
Description: Every ghost job check you can run by hand corresponds to a field on the posting record: age, reposts, close status, description length, salary, the employer's open-role count and posted-date drift. Run the checklist on one listing with the checker, or run it on thousands with three API filters.

---
AI agents: the full machine-readable index of this site is https://jobspipe.dev/llms.txt?src=md-twin - API quickstart, no-key sandbox (POST https://api.jobspipe.dev/v1/sandbox/jobs/search), MCP server, pricing. Free key: https://jobspipe.dev/signup