---
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."
canonical: https://jobspipe.dev/blog/how-to-spot-ghost-jobs
date_published: 2026-09-09
date_modified: 2026-09-09
author: Dvir Atias
---

# 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.

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.

Try it without a key

```
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Only `/v1/sandbox/*` needs no key.

## 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](https://jobspipe.dev/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](https://jobspipe.dev/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](https://jobspipe.dev/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](https://jobspipe.dev/mcp-server) for agents that recommend roles.

## 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.

Related

## Keep reading

-   [Guide · Sep 9, 2026LinkedIn ghost jobs: how common they are, what they look like in the data, and how to filter them out](https://jobspipe.dev/blog/linkedin-ghost-jobs)
-   [Guide · Sep 9, 2026What are ghost jobs? Definition, meaning and how to tell one from a real opening](https://jobspipe.dev/blog/what-are-ghost-jobs)
-   [Guide · Sep 9, 2026Why do companies post ghost jobs? The stated reasons, the accidental ones, and what the data shows](https://jobspipe.dev/blog/why-do-companies-post-ghost-jobs)
-   [Changelog · Apr 4, 2026Webhooks GA, plus 12-month historical jobs data on Pro plans](https://jobspipe.dev/blog/webhooks-ga-12mo-history)
-   [Guide · Sep 9, 2026Why Do Jobs Ghost You?](https://jobspipe.dev/blog/why-do-jobs-ghost-you)


## Further reading

- [How long should a job description be?](https://jobspipe.dev/answers/how-long-should-a-job-description-be)
- [What Does It Mean When a Job Posting Is Reposted?](https://jobspipe.dev/blog/what-does-it-mean-when-a-job-posting-is-reposted)
- [Ashby ghost jobs: the share of stale, reposted and unsalaried postings (2026)](https://jobspipe.dev/ghost-jobs/ashby)
- [Why do jobs get reposted?](https://jobspipe.dev/answers/why-jobs-get-reposted)
- [Indeed ghost jobs: why Indeed scores cleaner than most boards and where its stale postings hide](https://jobspipe.dev/blog/indeed-ghost-jobs)

---
Try it with no key: `curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search`. AI agents: the full machine-readable index of this site is https://jobspipe.dev/llms.txt?src=md-twin - API quickstart, MCP server, pricing. Free key (1,000 jobs to start): https://jobspipe.dev/signup