Methodology & Data Provenance

How every number on CompSignal is built · Source-of-truth registry

Every user-facing number on CompSignal carries a small i or i icon next to its label. Color signals whether the number is reproducible from the Bureau of Labor Statistics (green) or whether it involves CompSignal estimation / judgment (amber). This page lists every metric in the product, grouped by provenance type, with sources and formulas so you can verify any number yourself.

Green i: reproducible
Direct BLS cells, reproducible computations, or transparent rule-based labels. Trust these: anyone with a BLS login can verify them.
Amber i: estimate / judgment
Interpolations between BLS anchors or analyst-curated editorial calls. Useful signal, but not a BLS-reported value. Click the icon on screen to see the formula or rationale.

Data sources

Every number on the site traces to one of these five BLS surveys. There are no third-party APIs, no user-submitted benchmarks, and no AI-generated figures. AI is used only to summarize BLS numbers into prose, never to invent them.

SurveyCurrent vintageCadenceWhat we use it for
OEWS
Occupational Employment & Wage Statistics
May 2024AnnualThe most comprehensive employer-reported wage survey in the U.S., covering 1.1 million establishments. Provides P10-P90 hourly wage percentiles for 755+ SOC occupations across national, state, and 393 metro geographies. The foundation for salary benchmarking and pay band design.
JOLTS
Job Openings & Labor Turnover Survey
Feb 2026MonthlyMeasures the flow of workers into and out of jobs across the U.S. economy. Tracks job openings, hires, quits, and total separations by industry sector. Use it to gauge how tight or loose the talent market is in the sectors you hire from -- essential for calibrating offer competitiveness.
ECI
Employment Cost Index
Q4 2025QuarterlyThe gold standard for measuring how fast employers' labor costs are rising. Tracks quarterly wage and total compensation growth rates across industries. HR teams use ECI to benchmark merit budget recommendations -- if ECI says wages grew 3.3%, a 3.0% merit pool is below market.
NCS
National Compensation Survey (Benefits)
March 2025AnnualMeasures what percentage of workers have access to employer-provided benefits -- retirement plans, medical insurance, paid leave -- broken down by establishment size and industry. Essential for benchmarking your benefits package against market norms.

Every metric on the site, by provenance type

Click a group to expand. Each entry corresponds to a clickable i icon somewhere in the product.

iDirect from BLS23 metrics
Verbatim BLS cell. No adjustment, no estimation. You can pull the same number from the BLS website.
wages.p10
Direct from BLS
BLS OEWS May 2024
P10 is the 10th percentile hourly wage. 90% of workers in this role earn more. Published verbatim by BLS; not adjusted or estimated.
wages.p25
Direct from BLS
BLS OEWS May 2024
P25 is the 25th percentile hourly wage. 75% of workers earn more. Published verbatim by BLS.
wages.p50
Direct from BLS
BLS OEWS May 2024
P50 is the median hourly wage: 50% of workers earn more, 50% earn less. Published verbatim by BLS.
wages.p75
Direct from BLS
BLS OEWS May 2024
P75 is the 75th percentile. Only 25% of workers in this role earn more. Published verbatim by BLS.
wages.p90
Direct from BLS
BLS OEWS May 2024
P90 is the 90th percentile. Only 10% of workers earn more. Published verbatim by BLS.
wages.employment
Direct from BLS
BLS OEWS May 2024
Total employment count for this occupation, published verbatim by BLS.
jolts.openings
Direct from BLS
BLS JOLTS Feb 2026
Total job openings across the U.S. economy, published verbatim by BLS.
jolts.hires
Direct from BLS
BLS JOLTS Feb 2026
Total hires, published verbatim by BLS.
jolts.separations
Direct from BLS
BLS JOLTS Feb 2026
Total separations (quits + layoffs + other), published verbatim by BLS.
jolts.quitsRate
Direct from BLS
BLS JOLTS Feb 2026
Quits as a percentage of total employment, published verbatim by BLS.
jolts.sector.rate
Direct from BLS
BLS JOLTS Feb 2026
Per-sector openings and quits rates, published verbatim by BLS.
eci.wages.yoy
Direct from BLS
BLS ECI Q4 2025
Civilian workers' wage growth year-over-year, published verbatim by BLS.
eci.benefits.yoy
Direct from BLS
BLS ECI Q4 2025
Employer cost for benefits, year-over-year change, published verbatim by BLS.
eci.totalComp.yoy
Direct from BLS
BLS ECI Q4 2025
Total compensation (wages + benefits), year-over-year change, published verbatim by BLS.
ncs.benefit
Direct from BLS
BLS NCS March 2025
Percentage of workers with access to this benefit category, published verbatim by BLS National Compensation Survey.
wages.fallback.state
Direct from BLS: state level
BLS OEWS May 2024 (state file)
BLS did not publish figures for the selected metro × role combination (either suppressed for small sample size, or the SOC fell outside the per-metro cells bundled in the app). Showing state-level data instead: same OEWS survey, same vintage, broader geographic aggregation.
wages.fallback.national
Direct from BLS: national level
BLS OEWS May 2024 (national file)
Neither metro-level nor state-level data is available for this role × geography. Showing national figures as a last-resort fallback: the least geographically specific but most broadly available data.
projections.growth.10yr
Direct from BLS
BLS Employment Projections 2024–34
10-year projected percent change in employment for this occupation, 2024 to 2034. Published verbatim by BLS; not adjusted or estimated.
projections.openings.annual
Direct from BLS
BLS Employment Projections 2024–34
Average annual job openings for this occupation, 2024–34. Published verbatim by BLS; represents the total openings from both net job growth and worker replacement demand.
industry.employment.sector
Direct from BLS
BLS OEWS May 2024 (industry-level, nat4d)
Employment count for this occupation within this specific NAICS 4-digit industry. Published verbatim by BLS in the nat4d data file; top 5 industries for the role are shown.
industry.wages.sector
Direct from BLS
BLS OEWS May 2024 (industry-level, nat4d)
Median annual wage for this occupation within this specific NAICS 4-digit industry. Published verbatim by BLS in the nat4d data file. Industry-specific wages often differ significantly from the national average.
sector.workforce.total
Direct from BLS
BLS OEWS May 2024 (sector-level, natsector)
Total US employment in this industry sector across all occupations. Published verbatim by BLS in the natsector data file.
sector.wages.median
Direct from BLS
BLS OEWS May 2024 (sector-level, natsector)
Median annual wage across all occupations in this industry sector. Published verbatim by BLS in the natsector data file (A_MEDIAN column).
iComputed from BLS10 metrics
Reproducible math on BLS data. Same inputs always yield the same output. You can recompute and verify.
wages.p50.annual
Computed from BLS
BLS OEWS May 2024
Annual figure is the hourly P50 multiplied by BLS's standard 2,080 full-time hours per year. Reproducible from the published hourly rate.
annual = hourly × 2,080
wages.yoy
Computed from BLS
BLS OEWS May 2024 vs May 2023
Year-over-year change in the median wage for this role. Both readings are directly from BLS; the delta is a pure subtraction.
YoY% = (P50_2024 − P50_2023) ÷ P50_2023 × 100
market.wpi
Computed from BLS
BLS JOLTS Feb 2026 + ECI Q4 2025
The Wage Pressure Index is a 0–100 composite score combining sector-level JOLTS openings rate, JOLTS quits rate, and ECI wage growth. It is computed deterministically from published BLS figures on every page load. No analyst override.
openingsScore = min(100, openings_rate × 20)
quitsScore    = min(100, quits_rate × 33.3)
wageScore     = min(100, (eci_wage_growth − 2) × 30)
WPI = round(openingsScore × 0.4 + quitsScore × 0.3 + wageScore × 0.3)
market.meritBudget
Computed from BLS
BLS ECI Q4 2025 + CPI-U Dec 2025
The recommended merit range is derived from the current ECI wage growth and CPI. It is a suggested planning range, not a BLS-published number.
lower = CPI (keeps real wages flat)
upper = ECI wage growth (matches market)
comptrends.realWage
Computed from BLS
BLS ECI Q4 2025 − BLS CPI-U Dec 2025
Real wage growth is the ECI wage figure with inflation subtracted. Both inputs are direct BLS readings; the result is a pure subtraction.
realWageGrowth = ECI_wages − CPI
projections.openings.composition
Computed from BLS
BLS Employment Projections 2024–34
The split between openings caused by net job growth vs. worker replacement (people leaving the role). Annual growth is the 10-year change divided by 10; replacement is what's left.
annual_growth = 10yr_change ÷ 10
replacement = max(0, annual_openings − annual_growth)
growth% = (annual_growth ÷ annual_openings) × 100
industry.wages.spread
Computed from BLS
BLS OEWS May 2024 (industry-level, nat4d)
Wage range spread across the top 5 industries for this occupation. Shows how much industry choice can affect pay for the same role.
spread% = ((max_wage − min_wage) ÷ min_wage) × 100
career.workforce.sum
Computed from BLS
BLS OEWS May 2024
Total employment across all occupations in this career field. Computed by summing the employment counts of all detailed SOCs grouped under the field.
total = Σ SOC[i].employment  for all SOCs in the field
career.wages.median
Computed from BLS
BLS OEWS May 2024
Median wage across the career field. NOT employment-weighted. Instead, the median of per-occupation P50 hourly rates, annualized by 2,080 hours/year. This avoids skew from a few very-high-employment occupations.
field_median = 2080 × MEDIAN(occ.p50 for all SOCs in field)
career.growth.average
Computed from BLS
BLS Employment Projections 2024–34
Average 10-year projected growth across all occupations in the field. Computed as the arithmetic mean of per-occupation growth percentages. Not employment-weighted.
avg_growth = MEAN(occ.growthPct for all SOCs in field)
iRule-based label1 metric
Categorical labels from transparent threshold rules. The rule is stated; anyone can apply it to the same inputs and get the same label.
offer.verdict
Rule-based label
BLS OEWS May 2024 percentile thresholds
The verdict (Below Market, Competitive, Strong, Premium) is determined by fixed rules comparing your offer to the published BLS percentiles. The thresholds are transparent and reproducible.
offer < P10  → Significantly Below Market
offer < P25  → Below Market
offer < P50  → Below Median
offer ≤ P75  → Competitive
offer ≤ P90  → Strong
offer > P90  → Premium
iEstimated: not a BLS-reported value1 metric
Our math between two BLS anchors. Reasonable, documented, but not a number BLS publishes. Treat as indicative.
offer.percentile
Estimated: not a BLS-reported value
Derived from BLS OEWS May 2024 percentiles
BLS publishes only P10, P25, P50, P75 and P90. Any other percentile (including the one that matches your offer) is estimated by piecewise linear interpolation between the two nearest BLS anchors. Treat as indicative, not authoritative.
if P25 ≤ offer ≤ P50:  percentile = 25 + ((offer − P25) ÷ (P50 − P25)) × 25
iEditorial: analyst-curated2 metrics
Hand-picked by a CompSignal analyst at each release, citing BLS numbers as context. Not reproducible without the analyst.
jolts.signal
Editorial: analyst-curated
CompSignal analyst, based on BLS JOLTS Feb 2026
The Hot / Active / Stable / Cooling label is chosen by a CompSignal analyst when each JOLTS release ships. It reflects a combination of the raw openings / quits rates, the trend direction, and sector context. It is not a BLS-published classification and is not produced by a fixed threshold rule.
market.editorialSignal
Editorial: analyst-curated
CompSignal analyst, citing BLS releases
Weekly signals are short narrative callouts written by a CompSignal analyst after each BLS release. Each signal cites the underlying JOLTS / ECI / OEWS numbers, which are direct from BLS; the narrative itself is editorial.

For testers and verifiers

A separate verification pack covers every metric in the product with step-by-step checks, BLS links, and spot-check examples. Testers use it to verify that on-screen numbers match the underlying BLS data.

Verification pack on GitHub →
Single-file verification build (HTML, ~130KB) →
CompSignal is a wage-benchmarking tool. Figures are estimates; apply professional judgment before making compensation decisions. The registry itself lives at src/data/metric-provenance.ts and is the source of truth for every provenance classification shown on the site.