The Official Labor Series Reference: Ceiling, Floor, or Cross-Check
Look up any official series for a talent pool count and state its unit, code granularity, lag, breaks, and whether it can serve as ceiling, floor, or cross-check.
Key takeaways
- In Refolk's index, 421,821 US profiles carry the title Software Engineer or Software Developer, which is about 24.8% of the roughly 1.7 million software developer jobs BLS reports, so the official count works as a ceiling and the profile count as a floor.
- OEWS counts jobs at the workplace for wage and salary workers in nonfarm establishments, so it double-counts multiple jobholders and leaves out the self-employed entirely.
- Between January 2021 and September 2022, 209 of 412 UK four-digit SOC 2020 codes (50.7%) were hit hard by the LFS miscoding, while one-digit totals barely moved, so any UK unit-group count from that window needs the revised July and August 2023 release.
- The UK LFS response rate was 21.1% for April to June 2025, and ONS itself says PAYE RTI gives a more reliable read on employee levels.
- Specialist roles such as Data Engineer (30,379 US profiles in Refolk's index) and Machine Learning Engineer (10,240) have no dedicated SOC code, so an official denominator for them has to come from a broader code and must be labelled as a ceiling.
- Every pool number should travel with its unit, code, classification vintage, reference period, and coverage ratio, or nobody can defend it in a hiring or location decision.
This is a lookup reference for one job: using official labor statistics to put a defensible number on how many people do an occupation in a given metro or country. It is for talent-intelligence analysts, strategy teams, and operators who have to defend a denominator in a hiring or location decision. Each entry gives what a series counts, how fine its occupation codes go, how late it arrives, where it breaks, and whether it can serve as ceiling, floor, or cross-check for a profile-based pool count.
What does each official series actually count?
Each official series counts one of three things: jobs at the workplace, persons by residence (from a household survey or census), or payrolled employees. Write the unit next to every number. The same occupation in the same place gives a different total under each unit.
Three terms come up in every entry below:
- Ceiling. An upper bound. The true pool for your narrow role is almost certainly no bigger than this, usually because the code is broader than the role.
- Floor. A lower bound. The pool is at least this big, usually because only literal title matches were counted.
- Cross-check. A second number with a different unit or method. You use it to test the first number, not to replace it.
| Series | Counts | Best use in pool sizing |
|---|---|---|
| US OEWS | Jobs, workplace, wage and salary, nonfarm | Ceiling at metro level |
| UK PAYE RTI | Payrolled employees only | Cross-check on employee levels |
| UK LFS | Persons, household survey | Weak cross-check |
| Canada LFS (14-10-0416-01) | Persons in labour force, by NOC | Ceiling at province level |
| Canada Census 2021 | Persons, 25% sample, NOC 2021 | Ceiling at CMA level |
| EU LFS (lfsa_egai2d) | Persons in thousands, ISCO-08 two-digit | Outer ceiling only |
The other series in this reference (QCEW, CPS, ACS, LODES, JOLTS, ASHE, the UK online-adverts tables, ESCO) are left out of this table on purpose. Their units and roles are either not headcounts or not verified here. Each one has its own entry below that says exactly what to confirm.
How fine the codes go matters as much as the unit. A series that counts the right unit at two-digit codes is still only an outer bound for a narrow role.
What role can this series play?
US series: OEWS, QCEW, CPS, ACS, LODES, JOLTS, O*NET
OEWS is the only US series in this reference whose unit, scope, granularity, and lag are fully documented here. Use it as the metro-level ceiling. Before you rely on the other series, confirm their units and geography floors in BLS or Census documentation.
OEWS (Occupational Employment and Wage Statistics)
- Counts: jobs at the workplace, from an employer survey. Covers wage and salary workers in nonfarm establishments. Self-employed workers, farms, and major group 55 (Military Specific Occupations) are excluded.
- Granularity: about 830 occupations on the 2018 Standard Occupational Classification (SOC), for about 530 metropolitan statistical areas (MSAs) and nonmetropolitan areas.
- Lag: about 12 months. For example, the May 2025 reference period was released on May 15, 2026.
- Sample: about 1.1 million establishments sampled over 3 years, in six panels of 186,000 to 189,000 each, drawn from a universe of about 8.8 million establishments. In May 2024, unweighted sampled employment of 83.5 million was about 55% of national employment.
- Breaks and suppression: the national response rate for May 2025 was 66.2% of establishments and 67.2% of weighted sampled employment. Non-responding and unsampled establishments are modelled from a donor pool of typically 10 nearest-neighbour responding establishments, and as few as 5. This reference did not establish the cell-level suppression threshold or the relative standard error (RSE) cutoff. RSE is the standard error as a percentage of the estimate. Read it for every metro cell you use. SOC 2028 will bring the next break.
- Role: ceiling for employee pool counts in a metro.
- How it lies: it gets read as a headcount of people. It is a count of jobs.
QCEW
- Counts, granularity, lag: not verified in this reference.
- Confirm before use: whether it carries occupation codes at all, or only industry codes. If it is industry-only, it cannot size an occupation directly.
CPS
- Documented here: new industry and occupation classification systems were introduced into the CPS starting with January 2020 data.
- Not verified here: the unit, the geography floor, and the publication lag.
- Confirm before use: whether the sample supports your metro and occupation cell. Do not run a trend across the January 2020 recode without a crosswalk.
ACS
- Counts, granularity, lag: not verified in this reference.
- Confirm before use: whether it counts people by residence or by workplace, how many survey years are pooled, and which SOC vintage the occupation codes follow. Comparing ACS with OEWS without settling those three questions is how most bad US pool numbers get made.
LODES
- Counts, granularity, lag: not verified in this reference.
- Confirm before use: whether it carries any occupation detail. If it does not, its use in pool sizing is limited to commuting context for a metro.
JOLTS
- Counts, granularity, lag: not verified in this reference.
- Confirm before use: whether it publishes any occupation breakdown. A series about openings and turnover measures demand and churn. It is not a stock of people, so it can never be the denominator.
O*NET
- Counts: nothing. O*NET is a mapping tool, not a count. For each SOC code it lists task content and reported job titles.
- Role: step one of every US pull, because it tells you which titles an employer would code to a given SOC.
- How it lies: a title missing from O*NET's reported list does not mean the role sits outside that code. Use the task description to decide.
UK series: ASHE, LFS, PAYE RTI, online adverts
For UK employee levels, ONS itself puts PAYE Real Time Information (RTI) ahead of the Labour Force Survey (LFS). For any comparison across 2021 and 2022 at four-digit SOC 2020 level, read the break and miscoding notes first.
ASHE (Annual Survey of Hours and Earnings)
- Counts: earnings estimates by occupation. Treat it as a pay source, not a headcount.
- Breaks: earnings estimates for April 2021 onward are on a SOC 2020 basis and break the ASHE time series.
- Role: not a denominator. Use it for pay context on the same SOC basis as your count.
- How it lies: a year-on-year comparison across April 2021 mixes SOC 2010 and SOC 2020.
LFS (Labour Force Survey)
- Counts: persons, from a household survey.
- Survey health: the response rate for April to June 2025 was 21.1%, 17.4 points below October to December 2019. The sample fell to about 14,000 Great Britain households in early 2024. ONS research links non-response bias to employment status and puts its effect at around 0.8 points on the employment rate.
- Breaks: SOC 2020 occupations were miscoded from January 2021 to September 2022. ONS announced the problem on 18 July 2022 and scheduled revised LFS and APS datasets for July and August 2023. Of 412 four-digit codes, 209 were rated high impact (more than 50% affected), 90 moderate, and 113 low. At one-digit level, ONS found the error had only a marginal effect.
- Role: weak cross-check. One-digit and two-digit groups are safer than four-digit unit groups.
- How it lies: a four-digit count from a pre-revision download looks just as authoritative as a corrected one.
PAYE RTI
- Counts: payrolled employees only. Self-employed people and anyone not on a payroll are outside it.
- Role: ONS says RTI gives a more reliable read on employees than the LFS. Use it to check the employee level behind any LFS-based figure.
- Not established here: whether the RTI tables you need carry occupation detail. Check the table before you plan around it.
UK online-adverts tables
- Not retrieved for this reference. I can't state their unit, coverage, or lag. A count of job adverts measures demand, not the stock of workers, so do not use it as a pool denominator until you have read its methodology.
One more reason to distrust four-digit UK cells: ONS's own SOC autocoder reached about a 65% match rate at over 90% accuracy. Turning free-text job descriptions into four-digit codes is hard even for the statistics office.
| Series | Response metric | Value |
|---|---|---|
| OEWS May 2025 | Establishment response | 66.2% |
| OEWS May 2024 | Establishment response | 65.7% |
| UK LFS Apr-Jun 2025 | Overall response | 21.1% |
| UK LFS Apr-Jun 2025 | Responses incl. imputation | 74,186 |
Canada and EU series: Canada LFS, Census NOC, EU LFS, ESCO
Canada gives you persons by NOC at province level from the LFS and at census metropolitan area (CMA) level from the Census. The EU gives you persons by ISCO-08 two-digit group for each country, which is only fine enough to serve as an outer ceiling.
Canada LFS (Table 14-10-0416-01)
- Counts: number of persons in the labour force, employed and unemployed, by National Occupational Classification (NOC).
- Geography: Canada and provinces.
- Breaks: Statistics Canada's January 2025 LFS revision applied NOC coding improvements back to January 1998. Any extract taken before that revision will not match a current pull.
- Role: province-level ceiling. Filter to employment if you want the employed stock, because the labour-force total includes the unemployed.
- How it lies: the labour-force total gets quoted as employment.
Canada Census 2021 (Table 98-10-0594-01)
- Counts: persons, from 25% sample data, by NOC 2021.
- Granularity: NOC 2021 unit groups (821 categories) and occupation minor groups (4-digit codes), down to CMA level.
- Lag: fixed to the census cycle, so the counts age between censuses.
- Role: CMA-level ceiling. It is the finest-grained official occupation count in this reference outside the US.
EU LFS (Eurostat lfsa_egai2d)
- Counts: persons, in thousands, by ISCO-08 two-digit group.
- Coverage and lag: annual from 2011, published roughly nine months after year end.
- Role: outer ceiling only. Group OC25 (ICT professionals) cannot isolate software engineers.
ESCO
- Counts: nothing. ESCO is an occupation and skills classification, not a count.
- Not verified here: its occupation total and its crosswalk to ISCO. Read the crosswalk documentation before you use ESCO to place a role into an ISCO two-digit group.
Which code holds the role? Mapping titles to SOC, NOC, and ISCO
For a software engineer talent pool, the US code is SOC 15-1252 Software Developers. That code also holds DevOps, infrastructure, and architect titles, so its count is a ceiling for any narrower role. Specialist roles such as machine learning engineer, site reliability engineer, and data engineer have no dedicated SOC code. Their official denominator has to come from a broader code.
O*NET lists these among the reported job titles for 15-1252: DevOps Engineer (Development Operations Engineer), Infrastructure Engineer, and Software Architect. An employer filling in the OEWS survey codes all of those people to the same line. The official count therefore answers "how many software-developer-type jobs are there", not "how many backend engineers" or "how many SREs".
Profile data shows how much sits inside that one line. In Refolk's index of professional profiles:
| Title | US profiles | Share of SWE/SWD count |
|---|---|---|
| Software Engineer / Developer | 421,821 | 100% |
| Data Engineer | 30,379 | 7.2% |
| Machine Learning Engineer | 10,240 | 2.4% |
| Data Engineer ÷ ML Engineer | n/a | 2.97x |
Shares and the ratio are derived from the profile counts. No separate official code exists for these specialist titles.
Classifications are revised about once a decade, so they lag the job market. SOC 2018 is current. SOC 2028 is under review: the Federal Register notice was published on June 12, 2024, with comments due on August 12, 2024. The revision is intended to be finished by the beginning of 2027 and to come into use from reference year 2028. Until a role gets a code, the only direct count of it is a profile count. Check the 2028 SOC Revision page at BLS for the current status before you assume any new code exists.
This is where official data runs out. A specialist pool has to be counted from people's own titles, skills, and employers, then bounded above by the official code. Refolk runs that kind of count from a plain-English description, so you do not have to build a title-matching query by hand for each role and metro.
How to size a talent pool with government data and a profile count
Pick the official series by unit, pull it at the finest geography it publishes, clear the window of classification breaks, then divide a matched-scope profile count by it to get coverage. The official number becomes the ceiling and the profile number the floor. The procedure below takes most analysts half a day per role and geography.
Sizing procedure: official ceiling, profile floor
- Map the role to codes in task termsDescribe the role by what the person does, then map it to SOC, SOC 2020, NOC, or ISCO using O*NET reported titles. Done when you have one primary code plus any adjacent codes, about an hour.
- Pick the series by unitDecide whether you need jobs at the workplace (OEWS), persons by residence (LFS or Census), or payrolled employees (PAYE RTI). Done when the unit is written next to the number, about 30 minutes.
- Pull the count at the finest geographyOEWS metro, Canada province from the LFS or CMA from the Census, EU two-digit national. Budget about an hour and record the reference period and release date.
- Check vintage and classification breaksCheck against SOC 2018 to 2028, SOC 2010 to 2020 (ASHE April 2021), the UK LFS miscoding window of January 2021 to September 2022, and the CPS 2020 recode. Done when the window contains no break.
- Pull the profile count with matched scopeUse the same title family and country or metro as the official pull, and check the sample for founders and CEOs caught by the title match.
- Compute coverage and assign ceiling and floorDivide profile count by official count. The broader official count is usually the ceiling and the literal-title profile count the floor; record both.
- Triangulate before you quoteCross-check against a second series with a different unit, and for the UK, check employee levels against PAYE RTI before the LFS. Done when you can explain any gap by unit, scope, or vintage.
Step 5 depends on scope discipline. If the official pull is one MSA, the profile pull has to be the same metro, with the same title family, applied the same way each time. I use Refolk for that step because the description you give it ("software engineers in Austin") can be kept word for word in the memo. The next analyst can then rerun the identical count against a new OEWS release.
Here is what step 6 looks like for US software developers:
| Geography | Refolk's index profiles | Official count | Coverage |
|---|---|---|---|
| United States | 421,821 | ~1.7M jobs (2025) | ~24.8% |
| US, broad group | 421,821 | 1,905,400 (developers, QA, testers) | ~22.1% |
| United Kingdom | 59,885 | not retrieved | n/a |
Coverage is derived. The UK official figure was not retrieved for this reference, so the UK row is left incomplete rather than guessed.
The gap between the two numbers is mostly explained by scope, not error. OEWS counts every job coded to 15-1252, including DevOps and infrastructure titles, and it counts a person with two jobs twice. The profile count includes only people whose title literally matches.
From official ceiling to specialist floor, US software
- 1,905,400OOH combined group
Developers, QA, and testers; official jobs
- ~1.7MSoftware developers
Official jobs, 2025
- 421,821Software Engineer or Developer profiles
Refolk's index, literal title match
- 30,379Data Engineer profiles
Refolk's index, no dedicated SOC code
- 10,240Machine Learning Engineer profiles
Refolk's index, no dedicated SOC code
Vintage also moves the ceiling. OEWS reported 1,534,790 jobs in 15-1252 for May 2022. A deck that quotes a pull from that year against a current profile count is comparing different years. Always record the reference period.
The official count tells you how big the pool cannot be. The profile count tells you how big it is at least.
Where official counts mislead: failure modes and false positives
Most bad pool numbers come from seven mistakes. Reading jobs as people, trusting modelled cells, missing roles hidden inside broad codes, using UK four-digit data from the miscoding window, trending across a classification break, accepting raw title matches, and quoting two-digit EU groups as if they held a specific role. Each one below gives the false positive it produces and the check that catches it.
- Jobs read as people. OEWS counts jobs, so a person with two jobs is counted twice and the self-employed are not counted at all.
- False positive: OEWS quoted as a headcount of people.
- Check: the scope note excludes self-employed and farm workers. Write "jobs" next to the number.
- Modelled cells. OEWS fills unobserved establishments from 5 to 10 donor establishments. A thin metro-by-occupation cell can be mostly model rather than response.
- False positive: a precise-looking figure for a small metro and a niche code.
- Check: read the published RSE for the cell. The suppression threshold is not established here, so a cell that is published can still be weak.
- Hidden roles inside one code. DevOps and infrastructure engineers are counted in 15-1252, so "software developers" overstates any narrow-role denominator.
- False positive: coverage looks terrible and the profile source gets blamed.
- Check: read the O*NET reported titles for the code and label the official count a ceiling.
- UK four-digit miscoding. 50.7% of four-digit codes were high impact between 2021 and 2022, and pre-revision downloads still circulate.
- False positive: a jump or fall in a UK unit group that is really a coding artefact.
- Check: compare the dataset release date with the July and August 2023 revisions.
- ASHE trend across 2021. The SOC 2020 break makes year-on-year comparisons across April 2021 meaningless.
- False positive: "pay for this occupation jumped" when the occupation's definition changed.
- Check: confirm which SOC basis each year uses.
- Raw profile title matches. Title matching in the US and UK samples from Refolk's index picked up founders and CEOs.
- False positive: a floor that is inflated by people who do not do the job.
- Check: sample the matched profiles before quoting, and record what you excluded.
- EU two-digit only. OC25 (ICT professionals) cannot isolate software engineers.
- False positive: an EU "software engineer" figure that is really all ICT professionals.
- Check: label it an outer ceiling and never compute coverage against it for a narrow role.
The OEWS lag also compounds in fast-moving roles. A May reference period published 12 months later, built from a sample pooled over 3 years in six panels, means part of any year's estimate comes from responses collected years earlier. For a role that is growing quickly, the official ceiling may sit below the real market. A profile count drawn from current data can then come in closer to the ceiling than the coverage ratio suggests. When that happens, report the lag. Do not "fix" the number.
UK household-survey cells carry one more risk: at 21.1% response, with non-response linked to employment status, the LFS is a weak denominator for anything below one-digit level. ONS's own guidance is to read a suite of indicators rather than any single series, with RTI ahead of the LFS for employee levels.
Keeping the denominator current
A pool number goes stale in three ways: a new release of the official series, a classification revision, or a correction notice. Record the release date and classification vintage in a standard memo so each number can be re-pulled and re-checked in minutes.
Re-check on these triggers:
- New OEWS release. Releases come about 12 months after each May reference period. Re-pull the metro cell and its RSE.
- SOC 2028 adoption. When reference-year 2028 data appears, treat it as a break. Check the 2028 SOC Revision page for any new codes covering roles you currently bound with 15-1252.
- UK revisions and quality updates. Read the latest LFS quality update for the response rate and any new reweighting before you reuse an LFS figure.
- Statistics Canada revisions. NOC coding improvements have been applied back through the series before. Re-pull rather than append.
- Eurostat updates. The two-digit table updates roughly nine months after year end.
Role (task terms): <what the person does, one line> Primary code: <e.g. SOC 15-1252 Software Developers> | Vintage: <SOC 2018 / SOC 2020 / NOC 2021 / ISCO-08> Adjacent codes considered: <codes and why included or excluded> OFFICIAL COUNT Series: <OEWS / LFS / PAYE RTI / Census / EU LFS> Unit: <jobs at workplace / persons by residence / payrolled employees> Scope exclusions: <e.g. self-employed, farms, military> Geography: <MSA / province / CMA / country> Reference period: <period> | Release date: <date> Count: <number> | Cell quality: <RSE or survey response note> Breaks in comparison window: <none / list> PROFILE COUNT Source: Refolk's index | Query: "<exact query text>" Title family: <titles matched> | Geography: <same as official> Sample check: <founders/CEOs or other false matches removed: number> Count after check: <number> RESULT Coverage (profile ÷ official): <percent> Ceiling: <number, series> | Floor: <number, source> Cross-check series and result: <series, number, explanation of gap> Known gaps and caveats: <lag, modelled cells, hidden roles>
Fill one memo per role and geography; keep the Refolk query text word for word so the floor can be rerun.
Before the number goes in front of a decision
- The unit (jobs, persons, or payrolled employees) is written next to every official figure
- The primary code was chosen from task content and O*NET reported titles, and adjacent codes are listed
- The official count is at the finest geography the series publishes and matches the profile count's geography
- The comparison window contains no SOC, NOC, or ISCO classification break, or the break is stated
- Any UK four-digit figure for January 2021 to September 2022 comes from a release dated after the July and August 2023 revisions
- The RSE or survey-response note for the official cell has been read and recorded
- The profile sample was checked for founders, CEOs, and other false title matches
- Coverage is computed and the ceiling and floor are labelled
- A second series with a different unit was used as a cross-check, and any gap is explained
- Reference period, release date, and query text are recorded so the number can be re-pulled
Questions practitioners ask
Should I use OEWS, CPS, or ACS to size an occupation in a US metro?
Start with OEWS for a US metro occupation count. It publishes about 830 occupations for about 530 metro and nonmetro areas, and it counts jobs at the workplace, which is usually what a location decision needs. CPS and ACS count differently, and this reference did not verify their units, lags, or geography floors, so read their technical notes before you put either one next to an OEWS number. Never add or swap them without writing the unit beside each figure.
What SOC code do I use for a software engineer talent pool?
Use SOC 15-1252, Software Developers, as the primary code. O*NET lists DevOps Engineer, Infrastructure Engineer, and Software Architect among its reported titles, so the code is broader than most software engineer searches. That makes the official count a ceiling. There is no dedicated SOC code for machine learning engineer or site reliability engineer, so for those roles 15-1252 is an outer bound, not an estimate.
Why is my profile count so much lower than the BLS number?
Because the two numbers measure different things. In Refolk's index, 421,821 US profiles carry the literal title Software Engineer or Software Developer. That is about 24.8% of the roughly 1.7 million jobs BLS reports. OEWS counts every job an employer codes to 15-1252, including DevOps and infrastructure titles, and it counts a person with two jobs twice. Treat the official figure as the ceiling and the profile count as the floor.
Can I compare UK occupation counts from 2020 with counts from 2022?
Not at four-digit level without adjusting. ASHE moved to SOC 2020 in April 2021, which breaks the series. The LFS miscoded occupations from January 2021 to September 2022 and hit 209 of 412 four-digit codes hard. Revised datasets were scheduled for July and August 2023. One-digit comparisons are far safer, because ONS found the coding error had only a marginal effect at that level.
Which EU series gives occupation counts by country?
Eurostat table lfsa_egai2d gives persons in thousands by ISCO-08 two-digit group for each country. It arrives roughly nine months after year end. Two digits is coarse. The ICT professionals group (OC25) cannot isolate software engineers, so use it only as an outer ceiling and use a profile count or a national source for anything narrower.
Try it on the search you came here for
Stop building boolean strings. Just describe the person.
Type one sentence. I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web as it is right now, and hand back a ranked list with the reason next to every name.
01Describe them
One plain sentence. Role, city, stack, stage, whatever matters to you.
02I read the web live
GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.
03You read the shortlist
Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.
- Staff backend engineers in NYC who shipped Rust in production
- Series A fintechs in SF under 50 people, growing headcount this year
- Maintainers of fast-growing Rust web frameworks on GitHub
- No boolean, no filters, no seat to buy. One box.
- Read at search time, so a profile updated yesterday counts today.
- Every step visible as it runs, every name with its reason.
500 free credits on sign-up. No card, no demo call. See real searches.