# The Role Market-Tightness Read: Tight, Balanced, or Loose

*You can produce a documented openings-per-qualified-candidate ratio and a tight, balanced, or loose verdict for one role in one metro, and defend every number.*

- Canonical URL: https://www.refolk.ai/guides/role-market-tightness-read
- Pillar: Market and talent intelligence
- Format: Playbook
- Published: 2026-10-13
- Last reviewed: 2026-10-13
- Reading time: 15 min

A hiring manager asks the question that decides a plan: how hard will this role be to fill here? This guide is for workforce planners, talent-intelligence analysts, and strategy teams who need to answer that with a number, not an opinion. It takes you from a raw role-and-metro definition to a documented supply-to-demand ratio, a tight / balanced / loose verdict, and an error band, using only public data, so you can defend every link in the chain.

The deliverable is one sentence a manager can act on: "For this role in this metro, there are roughly X open requisitions per qualified, reachable candidate, which is tighter / looser than the national market, plus or minus Y." Everything below exists to make that sentence defensible.

## What tightness means and the one number to anchor on

Labor-market tightness is the ratio of vacancies to jobseekers, written theta = v/u: the number of vacant jobs per available worker. It has a hard numeric anchor that most talent discussions lack. The efficient, balanced point is exactly one. Above one the market is inefficiently tight; below one it is inefficiently slack. As a real reference, the US had roughly twice as many vacancies as unemployed workers in March 2022, a theta near 2.0 and a documented "very tight" reading.

That anchor is why this method ends in a briefable number rather than a definition. You are not inventing a scale. You are mapping your role-metro figure onto an economic threshold that already exists.

**1.0 - The balanced labor market, as vacancies per jobseeker**

Above 1.0 is inefficiently tight; below is loose; about 2.0 was the very-tight US reading in March 2022.

There is a refinement worth knowing. The raw denominator, unemployment, undercounts who is actually available for a role, because most qualified people for a given job already have one. A worker-availability measure replaces raw unemployment with effective searchers, a weighted sum: ES = Us + 0.48·Ul + 0.4·Z_want + 0.09·Z_do-not-want + 0.07·N, where Us is short-term unemployed and Ul is long-term. Generalized tightness goes further, weighting the unemployed, the out-of-labor-force, and the already-employed by their relative search intensities. You will apply the same logic at the role level in the supply discount below, so hold that thought: supply is never just the unemployed.

## Why the demand side is the weak half

The structural fact to internalize before you pull a single number: metro demand data is weaker than metro supply data, so your error band will almost always be wider on demand. Plan accordingly.

The federal benchmark for openings is BLS JOLTS. It measures job openings as a stock on the last business day of the month, counting a position as open if the job exists, work is available, it can start within 30 days, and it is being actively recruited. That is a clean definition. The problem is granularity. The JOLTS sample of about 16,000 establishments does not directly support state or sub-state estimates. Experimental metro estimates exist only for the 18 largest metros with 1.5 million-plus employees, built by combining sample with model-based estimates and smoothed by a three-month moving average. And JOLTS has no occupation detail at all.

So for a role in a metro, JOLTS cannot help you. You fall back to job-posting aggregators that scrape large numbers of sites, and those carry duplication and scraping error you have to remove by hand. Supply, by contrast, is directly countable from public profiles. That asymmetry is the first thing to tell a reviewer.

> **Watch out:** Do not cite JOLTS for a role in a city
>
> A clean JOLTS openings figure for your metro is a false positive. JOLTS has no occupation cut and models only 18 metros experimentally. Your demand number must come from de-duplicated postings, and you should say so out loud.

## The discount chain: raw counts are not supply or demand

Both sides of the ratio start as inflated raw counts, and both need a documented discount before they can be divided. Demand inflates because one job appears on many boards and gets reposted. Supply inflates because most profiles are not qualified, reachable, or comp-fit. The table below is the toolkit; apply each lever as a sequential multiplier.

| Lever | Value | Source |
|---|---|---|
| Posting dedup removed | up to 80% | Lightcast posting analytics |
| Qualified-applicant rate, all industries | 11.5% | Employ 2025 benchmark |
| Qualified-applicant rate, software/tech | ~5% | Employ 2025 benchmark |
| Active share of talent pool | ~30% | LinkedIn Talent Trends |
| Applicants per hire, tech vs healthcare | 191 vs 47 | industry benchmark |

Each lever proves something, and each can lie. Read them that way.

**Posting intensity.** This is the ratio of total postings to unique postings. It proves how aggressively a market reposts. It lies when you skip it: a single ad reposted daily can count about six times a year under a 60-day window, so a market that looks tight may be one employer with a loud posting habit. Up to 80% of collected postings deduplicate away. The 60-day rule treats the first appearance as the original, removes duplicates for 60 days, then counts a still-live ad as new, starting a fresh window.

**Qualified-applicant rate.** This is the share of applicants who advance from application to screening. It proves that raw supply overstates hireable supply, and it does so unevenly. It was 11.5% overall but only about 5% in software and tech. The same raw pool size converts very differently by field, so you cannot carry one rate across roles.

**Active share.** About 30% of a talent pool is actively searching; roughly 70% is passive. This proves that accessibility, not headcount, caps near-term supply. It lies if you count every profile as reachable. But it also lies the other way if you count only the unemployed, because passive people can be moved. The honest move is to count active plus a reachable slice of passive, and state the slice.

**Credential gating.** Healthcare needs about 47 applicants per hire versus 191 in tech, because licenses pre-filter the pool. This proves that the funnel shape, and therefore the ratio, is role-specific before you touch any location data.

> **Rule:** Every discount rate ships with its source
>
> A tightness ratio is only as defensible as its weakest multiplier. Record the value, the source, and the field or geography it applies to for each lever, inline, so a reviewer can challenge one number without collapsing the whole chain.

## Counting supply: what the index actually shows

Supply is the countable half. The point of the method is to start from a real, directly counted number and discount it on the record, rather than guessing a pool size. The table below is drawn from Refolk's index of professional profiles and shows why raw counts need both a geography and a seniority read before they mean anything.

| Segment | Profiles | Note |
|---|---|---|
| React software engineer, US | 5,449 | Refolk's index |
| React software engineer, Germany | 418 | Refolk's index |
| US : Germany supply ratio | 13.0x | derived |
| Senior React software engineer, US | 3,737 | Refolk's index |
| Senior share of US React pool | 68.6% | derived |

Two readings fall straight out of this. First, geography multiplies scarcity more than seniority does. The US React pool is 13.0x Germany's, a gap no amount of relaxing the seniority bar inside one country will close. Second, raising the bar costs less than it feels like: senior engineers still hold 68.6% of the US React pool. If the manager's instinct is "we will just hire junior and train," the data says the junior pool is the smaller one here.

**13.0x - US React engineer supply relative to Germany, in Refolk's index**

Moving the role between metros or countries changes tightness far more than adjusting the seniority band.

Now discount it. Take the 5,449 US React engineers. Apply the active share (about 30%) to get the reachable-plus-active slice, then the software/tech qualified rate (about 5%) for the share who would clear screening. The number collapses fast, which is the point: the tech funnel is punishingly narrow, so a raw pool of 5,449 behaves nothing like a generalist pool of the same size. This is where a countable starting point earns its keep. If you had guessed the pool, you could not defend the discount.

I ran this search: `React software engineers in the Berlin metro area who list React and TypeScript` - [see the full result list](https://www.refolk.ai/s/zprw60mr9v).

*Returns the named, public profiles behind the raw supply count for that role and metro, so you can discount a real number instead of an estimate.*

[Refolk](/) is where I count the supply side in plain English: you ask for the role and place you are sizing and get the matching profiles back, which is the raw number you then discount. For the demand side you still go to postings, because that is where openings live.

## Run the procedure

This is the full method, start to finish. Budget about a day of analyst time. Each step ends with a concrete "done" so you know when to move on.

#### From role definition to a defended ratio

1. **Define the role and geography precisely** - Fix one job title with synonyms, one metro with a radius, and the seniority band. Prefer a standardized occupation over raw title to cut false distinct-role splits. Done: a written search spec with title variants and radius.
2. **Pull raw demand postings** - Collect postings for the role-metro from an aggregator over a fixed date window. Done: a raw total count tied to that window.
3. **De-duplicate and discount demand** - Apply the unique-versus-total split and posting intensity, collapsing reposts with a 60-day window. Done: one open-requisitions number plus the intensity multiple you divided by.
4. **Pull raw supply profiles** - Count public profiles matching title and metro using Refolk's index. Done: a raw supply count broken out by segment.
5. **Discount supply to qualified-accessible-comp-fit** - Multiply raw supply by a qualification rate, an accessibility rate for active plus reachable passive, and a comp-fit rate. Done: an adjusted supply number with every rate sourced.
6. **Compute the ratio and pick a verdict** - Divide discounted demand by discounted supply for openings per qualified candidate. Map to tight, balanced, or loose against theta = 1. Done: one ratio plus a band.
7. **Attach an error band** - Carry the uncertainty of each discount rate through to a low-high range, not a point. Done: a ratio with a stated plus or minus.
8. **Benchmark against national tightness** - Compare your role-metro ratio to national vacancies-per-jobseeker. Done: one comparison sentence with both numbers in the same units.

#### The tightness pipeline

1. **Define** - One role, one metro, one seniority band
2. **Raw demand** - Postings count over a fixed window
3. **Discount demand** - Divide by posting intensity, apply 60-day rule
4. **Raw supply** - Public profile count from the index
5. **Discount supply** - Qualified x accessible x comp-fit
6. **Divide and band** - Openings per qualified candidate, low to high

*Demand and supply each start as inflated raw counts and must be discounted before they can be divided.*

On step one, a note that saves rework: anchor on a standardized occupation where you can, not raw title. A title-only match will treat near-identical roles as distinct, or collapse distinct ones. On step six, keep units straight: both your role-metro figure and the national benchmark must read as openings per available candidate, or the comparison is meaningless.

## How this goes wrong

Most bad tightness reads fail in one of seven predictable ways. This is the section to keep open while you work, because a number that survives these checks is briefable.

| Failure mode | The false positive | The check |
|---|---|---|
| JOLTS for a metro role | A clean openings number for your city | Confirm demand came from postings, not JOLTS |
| Reposts as separate openings | One job on five boards reads as five reqs | Divide by posting intensity, apply the 60-day rule |
| Over-collapsing distinct roles | Different-city roles merged into one | Ensure the match key includes location |
| Raw profiles as supply | 5,449 profiles read as 5,449 hireable | Show qualification and accessibility multipliers |
| Ignoring passive supply | Tightness overstated from unemployed only | State which pools you counted |
| Point estimate, no band | A single number hiding order-of-magnitude disagreement | Carry low-high rates to a range |
| Benchmark mismatch | Role-metro ratio compared to national theta blindly | State both as openings per qualified candidate |

Three of these deserve more than a row.

**Over-collapsing distinct roles.** A match on title and company alone will collapse genuinely distinct roles in different cities. Your de-duplication must key on location as well, or you will quietly delete real demand and call the market looser than it is. This is the mirror image of counting reposts, and both corrupt the demand number in opposite directions.

**Ignoring passive supply.** Supply built only on the unemployed overstates tightness, because the people qualified for a professional role mostly already have one. Generalized tightness exists precisely because the employed and the out-of-labor-force belong in the count, weighted by how hard they search. Whatever slice of passive candidates you decide is reachable, write it down. The verdict can hinge on it.

**Point estimate with no band.** Published funnel rates disagree by an order of magnitude depending on how the numerator and denominator are defined. A single number pretends that disagreement away. The fix is mechanical: carry the low and high of each discount rate through the chain and report the range. A reviewer who distrusts your 5% qualified rate can see what happens at 8% without redoing your work.

> A tightness number without an error band is a guess wearing the costume of a measurement.
> </pull>

## Reading the ratio and benchmarking it

Once you have discounted demand over discounted supply, you have openings per qualified candidate. Map it to the same scale tightness has always used. Below one is loose. Around one is balanced. Around two is very tight. The band labels come from the theta = 1 efficiency criterion, and the 2.0 reference is the documented March 2022 datapoint.

| Band | theta = v/u | Reference point |
|---|---|---|
| Loose | < 1 | Efficiency criterion, below balance |
| Balanced | ~1 | Efficient tightness equals 1 |
| Very tight | ~2 | US, March 2022 |

The matrix below is the judgement call to make before you deliver, because a headline number means different things depending on how much you trust each side.

#### Which number to trust, and what to do

Horizontal axis runs from Weak demand data to Strong demand data. Vertical axis runs from Weak supply data to Strong supply data.

| Quadrant | What it means |
| --- | --- |
| Thin on both | Report a wide range and name both gaps; do not give a single verdict |
| Supply solid, demand thin | Lead with the supply count; widen the demand band and flag the postings caveat |
| Demand solid, supply thin | Rare; re-count supply from the index before trusting the ratio |
| Strong on both | Ship the point ratio with a tight band and a benchmark sentence |

*Confidence in demand and supply inputs determines whether you ship a verdict or caveat it.*

Finish with the benchmark. State your role-metro ratio next to national vacancies-per-jobseeker, in the same units, and say which is tighter. "This role in this metro runs about 1.7 openings per qualified candidate, against a national market near balance, so it is meaningfully tighter than the economy as a whole." That single comparison is what turns a local number into a decision input: it tells the manager whether the difficulty is this role, this place, or just the market everyone faces.

## Keep the read current

A tightness read has a shelf life. Postings are a flow that moves with hiring cycles, and the discount rates themselves get re-benchmarked. Rather than memorizing a value, re-run the mechanism. Re-pull demand on the same date-window logic, re-count supply from the index, and re-check whether the qualified-applicant and active-share rates you borrowed have moved before you reuse them. The verdict can flip without any change in the underlying pool simply because reposting intensity spiked.

Before you send the number, run the checklist.

#### Before you brief the number

- [ ] Demand came from de-duplicated postings, not JOLTS, over a stated date window
- [ ] Total postings were divided by posting intensity and reposts collapsed on the 60-day rule
- [ ] The posting match key includes location, not just title and company
- [ ] Supply started from a directly counted profile total, by segment
- [ ] Raw supply was discounted by qualification, accessibility, and comp-fit, each rate sourced inline
- [ ] Which supply pools you counted (active plus reachable passive) is stated explicitly
- [ ] The result is a low-high range, not a point, with a stated plus or minus
- [ ] The role-metro ratio and the national benchmark are both expressed as openings per qualified candidate

> **Tip:** Store the chain, not just the answer
>
> Save the raw counts, every multiplier, and its source alongside the final ratio. When the manager asks "why is this different from last quarter," you want to point at the one lever that moved, not re-derive the whole thing.

The habit that makes this durable is refusing to hand over a number you cannot walk backward. If someone questions the verdict, you should be able to name the raw supply count, the three discounts, the raw demand count, the posting intensity, and the national benchmark, in order, and show where the range comes from. That is the difference between a tightness read a planner bookmarks and a figure that evaporates under the first hard question.

## Frequently asked questions

### Can I use JOLTS to find openings for a specific job in a specific city?

No. JOLTS has no occupation breakdown and only produces experimental, model-based estimates for the 18 largest metros with 1.5 million-plus employees, smoothed by a three-month moving average. It measures openings as a national stock on the last business day of the month. For a role in a metro you must use job-posting data instead, then de-duplicate it, and note that the demand side of your ratio is the weaker half.

### What ratio counts as a tight labor market for a role?

Anchor on theta, vacancies per jobseeker. Efficient balance is exactly 1. Above 1 is inefficiently tight, below 1 is inefficiently loose, and about 2.0 was the documented very-tight datapoint for the US in March 2022. Express your role-metro figure as openings per qualified candidate so the comparison to that threshold holds in the same units.

### Why can't I treat the raw profile count as the available talent pool?

Because most of it is not reachable or qualified. Roughly 70% of the workforce is passive and only about 30% is actively searching, and the qualified-applicant rate runs about 11.5% overall but only around 5% in software and tech. A raw count of 5,449 React engineers discounts to a far smaller accessible, qualified, comp-fit pool once you apply those rates in sequence.

### How do I avoid counting the same job five times across boards?

Divide total postings by unique postings to get posting intensity, and collapse reposts with a 60-day rule where the first appearance is the original and later duplicates are removed for 60 days. Up to 80% of collected postings deduplicate away. Make sure your match key includes location, or you will collapse genuinely distinct roles in different cities.

### Should I count employed people as supply, not just the unemployed?

Yes. Generalized tightness weights the unemployed, those out of the labor force, and those already working by their relative search intensities. Supply built only on the unemployed overstates tightness because most professionals are passive. State explicitly which pools you counted so a reviewer can see the accessibility assumption behind your number.

### Why present a range instead of a single tightness number?

Because the discount rates themselves disagree, sometimes by an order of magnitude depending on how the numerator and denominator are defined. A point estimate hides that. Carry the low and high of each rate through the chain and report a low-high ratio with a stated plus or minus, so the verdict survives a challenge to any single input.

---

*From the Refolk guide library. I revise these guides rather than replacing them, so the current version is always at https://www.refolk.ai/guides/role-market-tightness-read*
