Sizing the Real Openings for Your Role and Metro
You will convert a raw board count into a trustworthy count of real openings for your role and metro, then decide whether to widen title or geography.
This guide is for a job seeker deciding where to aim: someone who typed their title and city into a board, saw a number, and needs to know whether that number is real. It carries one search all the way from a raw board count to a trustworthy count of real openings, showing the actual queries, the count at each filter, and the widen-or-hold decision. Follow it on your own case as you read.
Most advice stops halfway. It teaches you to spot one ghost job at a time, or it points at national labor statistics that say nothing about your metro. Neither gives you a number you can defend. This does.
Why the raw board count is wrong before you even start
A raw job-board count over-counts your market by a multiple, and it does so before a single ghost job enters the picture. The cause is distribution fan-out: one real opening generates 3 to 5 copies across the company's career page, Greenhouse, Indeed, LinkedIn, and Glassdoor. So a search that returns 100 listings in your metro may be hiding as few as 20 to 30 unique roles.
That single fact reorders the whole job. The instinct is to worry about ghost jobs first, but duplication is the larger distortion for most searches. If you deduplicate 100 listings down to 25, then apply even a heavy 38% ghost haircut, you land near 15 real roles. Skip the dedup and haircut the raw 100 instead, and you would report 62 - four times too high.
There is a second distortion pulling the other way. Since Indeed's March 31, 2026 change, which reduced organic visibility for single-source feeds without proper ATS integration and capped manual free posts at 3 per month for 30 days instead of 120, small-employer roles increasingly never reach the boards at all. They live only on careers pages and Google for Jobs. So a board-only census now over-counts ghosts and duplicates while under-counting the small, direct-hiring end of the market. Both errors are real, and you correct for both below.
The worked example: one title, one metro
I will carry a single case the whole way: a Data Analyst looking in a US metro, using the Denver and Austin examples the queries below reference. The counts here are illustrative of the mechanics, but the ratios and rates are from the dossier and hold generally.
Start with the raw assembly. Search the exact title plus metro on two or three boards and write down each number. Suppose the three boards return 84, 61, and 52 for "Data Analyst" in your metro. Your raw total is 197. Resist the urge to add them - that total is the most misleading number you will produce all day, because most of those records are the same jobs seen three times.
Before you dedupe, notice how fast filters collapse a pool. This matters because you are about to add filters of your own - a required skill, a seniority level - and each one shrinks the market faster than you expect.
Table B - How each filter collapses supply, one market
| Segment | Profiles | Share of US pool |
|---|---|---|
| US Data Analyst (all) | 62,950 | 100% |
| US Data Analyst + Python | 2,039 | 3.2% |
| US Data Analyst, Senior, exact title | 0 | 0% (title-match artifact) |
Source: Refolk's index; shares derived. In Refolk's index of professional profiles, only 2,039 of 62,950 US Data Analysts list Python, and the exact-title Senior query returns zero because seniors are titled "Senior Data Analyst."
The Python row is the warning: adding one required skill cut the pool by an order of magnitude. The Senior row is the trap: the market is not empty, the query is wrong. Keep both in mind when your own filtered search looks thin.
Deduplicating listings across boards
The correct dedup key is not the job ID. Each platform assigns its own internal ID to the same listing, so exact-match deduplication on ID treats every copy as a separate job and defeats the entire exercise. Match instead on several fields at once.
The documented method is fuzzy matching across job title, company name, location, and posting date simultaneously, tolerating minor text variations between copies. Add a description-level pass, because staffing agencies repost the same role under a reworded title, and title-plus-company matching alone misses them. Textkernel research found true duplicate ads can share as little as 37% text similarity, which is why a strict text match under-collapses and description-level context matters.
When two records match, collapse them into one canonical row and keep every source URL. Prefer the employer-direct version as your canonical copy, since it is the one you will age-check next.
Carry the example forward. The 197 raw records dedupe to, say, 46 unique roles once you collapse the fan-out. That single step removed three quarters of the apparent market and is the highest-value filter in the whole procedure.
One metro search, from raw to real
- 197Raw board records
Same role counted 3 to 5 times
- 46Unique after dedup
Fuzzy plus description-level match
- 34Fresh after age check
Reposts and stale roles removed
- 27Real after ghost haircut
Sector rate applied, not the average
Checking true age and catching reposts
A listing's displayed age is a claim, not a fact, and refreshed roles are the most common way a count inflates after dedup. The board says "posted 5 days ago" while the role has been open for months. Your job is to find the real date.
The manual method is quick per listing. Quote-search the exact title and company and filter results to the past six months, then compare against the date on the employer's careers page. If the careers page shows a date weeks or months older than the board, you are looking at a refreshed listing, not a new one. LinkedIn now labels re-listed roles "Reposted X days ago," which does the comparison for you when it appears. Tools that paste an Indeed link and match it to the company's applicant tracking system - Greenhouse, Lever, Workday, Ashby, and 30 or more others - surface the real ATS date, because Indeed's own posted date is often a repost.
Set a staleness line. The average US posting fills in about 41 days, so anything open past 45 days with no visible activity deserves source verification. Tag each survivor fresh, stale, or repost. In the example, this removes 12 stale or reposted roles, leaving 34 fresh.
A posting's age is a claim the employer makes, not a fact you can bank.
One false positive to watch here: a role that expired and came back can read as fresh today even though it is really an orphan reappearing. If the ATS date and the board date disagree wildly in either direction, treat the listing as unverified rather than fresh.
Finding real openings that never reach the boards
A board-only census now under-counts the small-employer end of the market, so you cannot treat "not on Indeed" as "not hiring." After the March 2026 change, many small employers post only to their own careers page or to Google for Jobs, which still pulls openings straight from company career pages.
Two free moves recover these. Search Google for Jobs directly, since it assembles from careers pages rather than paid feeds. Then run a Google site: query against the careers pages of employers you already know hire your role. Note that Google shut down its Jobs API in May 2021, so there is no programmatic shortcut - the search interface is the tool.
This step also validates your existing survivors. Confirm each role appears on the employer's own site or via Google for Jobs. Separate anything that lives only on a board into an orphan list, but do not delete orphans yet - a legitimate staffing-exclusive role is board-only by design, and cutting it would undercount real work.
Finding the humans behind a posting is the most reliable liveness test, because a recruiter who joined last month to fill a role is proof the role is real in a way no listing date can match. This is where Refolk removes friction: instead of reverse-engineering who owns a req from a job description, you describe the people and Refolk returns them from its index.
The procedure, end to end
Run these seven steps in order. The first two do most of the work; the rest defend the number and turn it into a decision.
From raw board count to a defensible real-openings number
- Assemble the raw countSearch your exact title plus metro across two or three boards and record each raw number with per-source subtotals. Expect it to over-count, because one role appears 3 to 5 times across platforms.
- Normalize and dedupe across sourcesMap every record to one schema of title, company, location, description, and date, then match on company plus title plus location with a fuzzy and description-level pass. Keep the employer-direct version and collapse the rest into one canonical row per role.
- Check true age and repostsQuote-search title plus company filtered to six months and compare to the careers-page date. Tag each role fresh, stale, or repost, treating a LinkedIn Reposted label or an open longer than 45 days as stale.
- Cross-check careers page and Google for JobsConfirm each role on the employer site or via Google for Jobs, and separate board-only listings into an orphan list. Do not discard a board-only role before checking whether a staffing firm holds it exclusively.
- Apply the ghost-job haircutRemove the sector-appropriate ghost share, 18 to 22% as a floor and up to 38% in high-ghost sectors. The result is a defensible real-openings number, not the platform average applied blindly.
- Sanity-check against JOLTSCompare your metro and sector count to JOLTS state or MSA estimates and the openings-to-hires gap. Confirm the number does not imply more openings than hires.
- Decide widen or holdIf the real number is too thin, widen title synonyms first and geography second. Document the count that triggered the decision so you can re-run it.
Applying the ghost-job haircut correctly
The ghost-job haircut is sector-specific, and using the average is the most common error in the whole method. Ghost jobs are postings a company has no intention of filling now. Greenhouse classifies 18 to 22% of jobs on its platform as ghost jobs each quarter, and nearly 70% of its client companies posted at least one ghost job in the second quarter of 2024. But the rate is not uniform.
Table C - Ghost-rate haircut by sector
| Sector | Ghost-job rate | Real-opening survival |
|---|---|---|
| Construction | 38% | 62% |
| Art | 34% | 66% |
| Legal | 29% | 71% |
| Platform baseline | 18-22% | 78-82% |
Source: rate column from Greenhouse via public reporting; survival is 100% minus the rate, derived.
Apply the rate that matches your field, not the platform average. If you analyze a construction employer with the 20% baseline, you keep 80% and overcount by nearly a fifth versus the true 62% survival. In the Data Analyst example, using the platform baseline of roughly 20%, the 34 fresh roles survive to about 27 real openings.
Two calibration points sit around this number. A ResumeBuilder.com survey of 1,641 hiring managers found 40% of companies posted a ghost job in the past year and 30% currently have an active one. A LinkedIn-data analysis estimates 27.4% of all active US postings are likely ghost jobs. Self-report surveys run higher than platform data, so treat 18 to 22% as a floor for a generic sector and reach for the sector rate when you have one.
Sanity-checking against JOLTS
Your hand-built count needs an external reality check, and the Bureau of Labor Statistics JOLTS program is the free one - but only the right series. JOLTS publishes national estimates of openings, hires, and separations, plus monthly state estimates for all 50 states and DC at the total nonfarm level, and MSA research estimates first published in June 2020.
The trap is comparing your metro count to national totals. The national figure - 7.6 million openings, 5.2 million hires, 5.1 million separations in the latest release - tells you nothing about your occupation in your city. Pull the state or MSA estimate instead.
Then apply the openings-to-hires gap as a discount. Nationally, 7.6 million openings produced 5.2 million hires, roughly 1.46 openings per hire. Openings never equal hires, so even your 27 genuine openings convert to hires at well under 1:1. If your metro-and-sector count somehow implies more openings than the JOLTS estimate for hires in that region, your number is too high and you have missed duplicates or ghosts upstream.
Read your real count against JOLTS direction
How this goes wrong
Every step above has a characteristic failure. Each one is a place where a signal lies, and knowing what the lie looks like is more valuable than the happy path. Here is what proves a role real, and what it looks like when the check misfires.
- Job-ID dedup misses staffing reposts. Two IDs look like two jobs. The lie: a staffing agency reworded the title, so the description is the only field that matches. Check by matching on description, not ID.
- Trusting the "posted 5 days ago" label. A refreshed months-old role reads as fresh. The lie: the board resets the date on repost. Check with a quote-search plus the careers-page date, and look for the Reposted label.
- Treating every board-only listing as an orphan. A legitimate staffing-exclusive role gets deleted from your count. The lie: not on the careers page looks like not real. Check whether a staffing firm holds the role before discarding it.
- Applying the 18 to 22% baseline to a high-ghost sector. Construction runs 38%, so the baseline overcounts real openings. The lie: an industry-wide average feels safe. Check the sector rate and use it.
- Reading "not on the careers page" as dead. Many small-employer roles never hit the boards after March 2026 and live only on careers pages or Google for Jobs. The lie: absence from Indeed reads as absence of a job. Check Google for Jobs and
site:queries. - Comparing your metro count to national JOLTS. National 7.6 million openings tells you nothing local. The lie: a big authoritative number feels like validation. Check against JOLTS state or MSA estimates instead.
- Widening title too early. Exact-title matching, like the zero-result Senior query, makes a pool look empty when synonyms exist. The lie: a clean search returns nothing, so the market seems dead. Check two or three title synonyms before concluding it is thin.
Making the widen-or-hold decision
There is no published "widen at N real openings" threshold, and any guide that hands you one is inventing it. No source defines that number, so build the decision from inputs you can defend instead of a magic figure.
Use three load-bearing facts. First, the openings-to-hires gap of about 1.46 openings per hire means your real count converts to far fewer actual hires, so a count that looks survivable on paper is thinner in practice. Second, the ghost haircut you already applied tells you how much of the field is noise, which is worse in high-ghost sectors. Third, the staleness rule - roles open past 41 to 45 days deserve scrutiny - tells you how fast your count decays, so a market of old listings is drying up even at a healthy headcount.
When the number is too thin to sustain a search, widen in order. Title synonyms first: the difference between "Data Analyst," "Senior Data Analyst," "Analytics Analyst," and "Business Analyst" can multiply your pool without any change to your life. Geography second: widening the metro or going remote is a real cost and comes only after synonyms are exhausted.
Testing an adjacent title before committing to a retrain is its own move, and it is worth running as a search before you conclude you must widen. Refolk answers this directly from its index rather than making you infer paths from anecdotes.
Metro + exact title real openings (after dedup, age, haircut): ____ Same metro, 2-3 title synonyms combined real openings: ____ Same title, widened geography or remote real openings: ____ JOLTS state/MSA direction (rising / flat / falling): ____ Median listing age in survivors (days): ____ Decision: HOLD if exact-title real openings sustain a pipeline and age < 41 days. Decision: WIDEN TITLE first if synonyms lift the count materially; only then WIDEN GEOGRAPHY.
Fill in your own counts; the decision rule is the last two lines.
The supply side of the same widen decision is visible in Refolk's index, and it explains why title widening pays off before geography.
Table A - Talent supply, one title, two countries
| Title | Country | Profiles | Ratio vs UK |
|---|---|---|---|
| Data Analyst | United States | 62,950 | 4.10x |
| Data Analyst | United Kingdom | 15,357 | 1.00x |
Source: Refolk's index of current-title counts; ratio derived. US supply is about 4.1 times the UK for this one title, a reminder that supply and geography interact - a title that is common where you are may be scarce where you would move.
Keeping the number current
Re-run the whole procedure on a schedule, because every input above decays. Reposts pile up, ghost rates shift by quarter, and the JOLTS estimate updates monthly. A real-openings count is a snapshot, not a constant.
Before you trust your real-openings number
- Raw per-board subtotals recorded, not summed into a false total
- Deduped on company, title, location, and description, keeping the employer-direct copy
- Every survivor age-checked against its careers-page or ATS date
- Board-only roles separated into an orphan list, not deleted
- Google for Jobs and a site: query run to catch off-board small-employer roles
- Sector-specific ghost rate applied, not the platform average
- Count compared to JOLTS state or MSA estimates, never national totals
- Two or three title synonyms tested before any geography widen
Set two re-check triggers. Re-run the age check whenever a listing you were tracking crosses the 41-day fill line, since the average posting is gone by then and a role that lingers is either a ghost or a genuine hard-to-fill req worth extra attention. And re-run the JOLTS sanity check monthly, on release, so your discount reflects whether your regional market is tightening or loosening rather than the moment you first counted. The method is fixed; the numbers are not, and the discipline is refreshing them on a Tuesday rather than trusting a count you built last quarter.
Questions job seekers ask
How many job openings really exist for my role in my area?
Fewer than the board count shows. Start with your raw per-board totals, then divide out duplicates, because one role appears 3 to 5 times across career page, Greenhouse, Indeed, LinkedIn, and Glassdoor. After deduping, apply a sector ghost-job haircut of at least 18 to 22%, higher in fields like construction at 38%. The surviving number is your defensible count of real openings.
How do I spot a ghost job posting?
Check its true age and where it lives. Quote-search the exact title and company filtered to the past six months, then compare the board date to the employer's careers-page date. If the careers page shows a date weeks or months older, it is a refreshed listing, not a new one. Watch for a LinkedIn Reposted label and treat anything open longer than 45 days with suspicion, since the average US posting fills in about 41 days.
How do I deduplicate job listings across boards?
Do not dedupe on job ID, because each platform assigns its own internal ID to the same listing. Instead, fuzzy-match across title, company, location, and posting date at once, and add a description-level pass to catch staffing-agency reposts that change the title. Collapse matches into one canonical row, keep the employer-direct version, and preserve every source URL.
Why does my exact-title search return so few results?
Exact-title matching structurally undercounts, especially at senior levels. In Refolk's index, an exact-title Senior Data Analyst query returns 0 because those people are titled Senior Data Analyst, not Data Analyst. The same trap makes your board search look emptier than the market is. Test two or three title synonyms before concluding your market is thin.
Should I compare my count to BLS JOLTS numbers?
Only to the right JOLTS series. National figures like 7.6 million openings tell you nothing about your metro or occupation. Use the JOLTS state estimates or the MSA research estimates, first published in June 2020, and apply the openings-to-hires gap as a reality check. Your hand-built count should never imply more openings than hires convert.