CareerMoonshot

Job listings that vanish
and come back

Published ghost-job figures come from surveys — people asked whether they think listings are fake. This is not that. We track 2.40 million posting identities over time by an identity that survives a URL change, so when a role is pulled and re-listed we record it as the same role returning. These are the returns we actually watched happen.

782,600 live postings · observed 2026-07-08 to 2026-09-23 (77 days)
19.1%came back at least once 149,487 of the live postings we track have disappeared from the index and returned at least once during the window.▲ +1.9 pts vs 5 days ago
6.2%came back twice or more 48,287 have done it more than once.▲ +1.7 pts vs 5 days ago
Read these as observations, not as a ghost-job rate. A recorded return means the listing left our index and reappeared. It does not prove the vacancy was never real: a role can be re-opened, a board can drop and re-add a feed, and agencies re-list by design. What it does mean is that a posting behaved in a way a filled role cannot — and we watched it, rather than asking anyone what they thought.

Two things we deliberately do not claim. This is not a share of all job listings everywhere; it is a share of the postings currently live in our index. And it is not a rate over time — a 77-day window cannot produce one, and every posting has been observed for a different portion of it, so the honest form is a labelled snapshot.

Method

Source
CareerRiver posting_ledger — posting identities tracked over time by a URL-independent token (normalised company + title + city)
Window
2026-07-08 to 2026-09-23 (77 days). Anything that happened before we started watching is invisible to us, so these counts are what was observed and nothing more.
Population
782,600 posting identities currently live in the index. A posting that has closed is not counted.
A return
The identity stopped appearing in the index and later appeared again. Counted from the ledger, not inferred from the posting's age.

What we are not publishing, and why

All of it is still computed and sits in the JSON below. It is withheld from the page because we cannot yet separate employer behaviour from our own coverage.