Original Research · BLS QCEW, 2021-2026
A full audit of BLS employment data for 15 Tulsa trades: 2021 through 2026, three geographies, sortable and checkable line by line. Including a real finding: the metro-area version of this same data is mostly broken, and I can show you exactly why.
The Scope
Nobody had sliced Tulsa's trade economy this way before. This page is every trade-level number I could verify from the U.S. Bureau of Labor Statistics' Quarterly Census of Employment and Wages (QCEW) for 15 Tulsa-area trades, every quarter from 2021 Q1 through 2026 Q1. The data itself is public and free. Anyone can pull it. The value here is the audit: pulling every quarter by hand, checking it against BLS's own tools, and being straight about where it breaks down.
Every number below traces back to a specific published BLS cell. You can filter it, sort it, and check my math. Nothing here is estimated, averaged, or scored, and if a number doesn't exist yet, or BLS wouldn't publish it, the table says so instead of leaving a blank you'd mistake for a real zero.
Establishment counts only tell half the story, though: I paired this data with five years of Google search interest for each trade in a companion piece on search demand vs. trade density, to see where real demand is outrunning the number of businesses actually serving it.
At A Glance
For Skimmers
Second only to roofing on both counts: pest control establishments are up 32% in five years, and Tulsa County now runs 61% more pest control businesses per capita than the national average, and search demand still hasn't caught up, per the timing breakdown for pest control specifically.
See it in the table →Offices of chiropractors is the third most over-represented trade in the entire dataset: a location quotient of 1.60, behind only roofing and pest control, and ahead of every licensed trade contractor tracked here. More on what that concentration means competitively.
See it in the table →Veterinary services' establishment count barely moved (-1.1%) over five years, while average pay jumped 46.3%: the second-fastest wage growth of any trade here, right behind car washes. Same pattern as car washes, just less extreme.
See it in the table →Electrical contractors pay more than any other trade tracked here ($1,425 a week on average) and are still 16.3% behind what electrical contractors make nationally, which is more of a hiring problem than a marketing one, per the wage-gap breakdown.
See it in the table →Site preparation contractors sit at a location quotient of 0.44: less than half the national concentration, and the only trade in this dataset below 0.5. It's also the one trade with zero usable metro-level data across all five years (more on that below), which lines up with why paid search doesn't work for this trade at all.
See it in the table →Janitorial services pays the least of any trade tracked here ($524 a week) and has the single widest gap to the national average of any trade in the dataset, at 21.1% below, which lines up with why this trade barely shows up in search at all.
See it in the table →The Data
Default view is the annual snapshot: one row per trade, per geography, per year. Switch to quarterly for the full 21-quarter series. Click any column to sort; filter by trade or geography below. Every non-disclosed cell says why, instead of just going blank.
Source: BLS Quarterly Census of Employment and Wages (QCEW), private ownership, 2021 Q1-2026 Q1. Full methodology below.
The Findings
Roofing is Tulsa County's single most over-represented trade, and it's still growing. Tulsa County runs 88% more roofing contractors per capita than the national average: a location quotient of 1.88, the highest of any of the 15 trades here, and the number of roofing establishments in the county grew 48% over the five-year window, from 92 to 136. That tracks with Oklahoma sitting inside the country's hail corridor: storm-driven re-roofing isn't a one-year spike here, it's a structural feature of the market, worth knowing before assuming this growth reverses in an ordinary year, and it's exactly the kind of competitive pressure I factor into local map-pack rankings for roofing and every other trade I track. Filter the table above to Roofing contractors, Tulsa County, and you can watch that climb quarter by quarter. I go deeper on what this concentration actually means in a full breakdown of Tulsa County's most crowded trade.
Offices of dentists is the biggest trade on this list, and the only healthcare trade that shrank. It's the largest of the 15 trades by raw establishment count (291 to 318 across the window), but it's also one of only two trades that lost establishments over five years (down 8.5%, from 318 to 291) even as average pay in dental offices rose 30%. Fewer offices and higher pay, together, points toward consolidation: independent practices getting absorbed into larger groups, rather than the local dental market actually shrinking. That's a read of the establishment and wage columns, not a confirmed cause; worth checking against an industry-specific source before treating it as settled. If you run a practice in this market, that consolidation also changes who you're actually competing against for map-pack visibility, more on that in how dentist local SEO works in this market, and in what this consolidation trend means competitively.
The Tulsa metro-area version of this same data is far less reliable than the county version, and that gap is itself one of the more interesting findings here. I pulled both, as a sanity check on each other. Tulsa County came back with zero suppressed or unpublished trade-quarter cells across all 15 trades and 21 quarters. The metro file didn't, not even close. I go through exactly what's happening and why, in detail, in the investigation section below: it's worth reading even if you don't care about any one specific trade.
Car wash wages grew faster than any other trade: much faster than the number of car washes did. Average weekly pay at car washes rose 67.5% over five years, from $397 to $665, the largest wage increase in this dataset, while the count of car washes itself grew only 12%, from 41 to 46. Pay getting bid up well ahead of new locations opening usually signals a tight labor market in that specific niche, not a wave of new car washes competing for customers. More on what that means for how a car wash should actually market itself.
Tulsa pays below the national wage in 13 of the 15 trades: sometimes by a lot. Comparing Tulsa County to the U.S. total for 2026 Q1: janitorial services pay 21% below the national average weekly wage ($524 vs. $664), plumbing and HVAC contractors pay 18% below ($1,282 vs. $1,566), and electrical contractors pay 16% below ($1,425 vs. $1,703). The two exceptions run the other way: offices of dentists pay 6% above the national average ($1,312 vs. $1,236), and car washes pay 5% above ($665 vs. $632), which lines up with car washes also being the fastest wage-growth trade locally. Whether the broader gap comes down to cost of living, weaker local bargaining power for trade labor, or both isn't something this data can separate on its own, but it's a real, consistent pattern worth knowing before assuming Tulsa pay should track national benchmarks. Filter the table above to United States to see the national numbers directly, trade by trade.
Trade By Trade
The biggest demand-outpacing-supply gap in the dataset, and what it means for how a car wash should market itself.
Read it → Marketing StrategyReal, measurable demand against one of the thinnest fields of competitors in the whole dataset.
Read it → Marketing StrategyWhy almost nobody searches for a mason directly, and where the marketing budget should go instead.
Read it → Marketing StrategyThe most under-represented trade in the dataset, and why paid search won't reach its actual customers.
Read it → Local SEOThe highest search demand of any trade tracked, against a shrinking, consolidating pool of practices.
Read it → Marketing StrategyEstablishments up 32% in five years, and search demand still hasn't caught up.
Read it → Market ResearchTulsa County's most crowded trade by a wide margin, and still showing some of the highest demand-per-business in the dataset.
Read it → Local SEOThe third most over-represented trade in the dataset: more crowded than any contractor trade tracked.
Read it → Marketing StrategyNo oversaturation, no shortage, no wave to catch: the most average trade in the entire dataset.
Read it → Marketing StrategyEstablishment count barely moved while pay jumped 46.3%: the second-fastest wage growth of any trade tracked.
Read it → Marketing StrategyWhy a low search score for “painter” doesn't mean the real demand isn't there.
Read it → Marketing StrategyOne of the largest trades by business count, one of the smallest by search interest, and why that's not a contradiction.
Read it → Market ResearchThe highest-paid trade locally, still trailing the national average: a hiring problem before it's a marketing one.
Read it → Market ResearchThe largest establishment count in the dataset, paying 18% below the national average.
Read it → Marketing StrategyThe lowest-paid trade tracked, and one of the lowest in search interest: why that's a B2B story, not a search-visibility one.
Read it →The Investigation
I pulled these 15 trades at three geographies: Tulsa County, the Tulsa metro area (officially the Tulsa, OK Metropolitan Statistical Area, seven counties: Tulsa, Creek, Okmulgee, Osage, Pawnee, Rogers, and Wagoner), and the U.S. national total, so the metro and national numbers could sanity-check the county numbers against each other. That's standard practice for a pull like this. What I found instead was a second story, about the data itself.
Cross-checking metro against county turned up numbers that didn't reconcile the way they should. Take 2026 Q1, the most recent quarter in this dataset: Tulsa County published a clean 26,292 total private establishments, with the 15 tracked trades summing to a fully disclosed 2,180 of that total. The Tulsa metro area, for the same quarter, published exactly zero disclosed trades: not one of the 15 showed a usable establishment count. Roofing contractors, Site preparation contractors, Offices of dentists, all three flagged “Not yet published by BLS for this area/quarter,” at a geography that's supposed to be a superset of the county I just quoted a clean number for.
Going back through all 21 quarters, the pattern breaks into three stages. From 2021 Q1 through 2023 Q4, the metro-level data is mostly usable, if already thinner than the county version. Starting 2024 Q1, every one of the 15 trades gets individually flagged “not disclosed” at the metro level, simultaneously, including Offices of dentists, which has 350+ metro-area establishments and would never be suppressed for size reasons on its own under normal small-cell confidentiality rules. Trades of wildly different sizes all crossing a suppression threshold in the same quarter is the tell that something administrative is going on, not real small-cell privacy suppression. Starting 2025 Q3, it collapses further: the industry rows still exist in the file, but every value reads zero, tagged with a third disclosure flag (a bare dash) that isn't even documented in BLS's own published field layout, which only describes a blank cell or an “N.” By 2026 Q1, the metro file doesn't carry those rows at all anymore, as the number above shows.
The obvious alternative explanation is that the Tulsa metro economy actually collapsed in these trades, but that doesn't hold up. Checking the same quarters at a much coarser level, the Construction supersector for the metro area, over 3,000 establishments, stayed fully disclosed the entire time. Fifteen unrelated trades can't legitimately all cross a small-cell suppression threshold in the same quarter while a 3,000-establishment aggregate sitting right next to them in the same file stays untouched. That rules out a real collapse and points at something structural to how the MSA-level file gets published.
I confirmed this two more ways beyond the raw file structure: re-fetching the files fresh, to rule out a corrupted local copy, and querying the identical geography, quarter, and industry combination by hand in BLS's own official Employment and Wages Data Viewer / Table Maker tool. It returned an empty table for the same query. Three independent paths (the open-data CSV, a fresh re-pull, and BLS's own lookup tool) all landed on the same answer.
The most likely explanation (and this is a known pattern here, not something BLS documents as the specific cause) is complementary suppression. The Tulsa MSA is built from seven underlying counties. If even one of the smaller, more rural component counties (Creek, Okmulgee, Osage, or Pawnee) has a trade cell small enough to require suppression on its own, publishing the full MSA-wide total could let someone back-calculate that small county's suppressed value by subtraction. So BLS suppresses the MSA-level cell too, even though the MSA total itself is large. It's a documented category of statistical disclosure control in general. BLS just doesn't spell out that it's the specific cause here.
The net effect, in hard numbers: Tulsa County has zero suppressed or missing trade-quarter cells across all 15 trades and 21 quarters: 630 of 630 rows fully disclosed. The Tulsa metro area has at least one non-disclosed trade in every single quarter, and every one of the 15 trades has a materially incomplete series at that geography. The best case among them, a six-way tie between Car washes, Finish carpentry contractors, Janitorial services, Offices of chiropractors, Painting contractors, and Pest control services, is disclosed for only 12 of 21 quarters. The worst case, Site preparation contractors, is disclosed for 0 of 21, not one usable quarter at the metro level, in this entire five-year window. These counts come directly from each trade's disclosure flag in the underlying quarterly dataset; you can verify any of them by filtering the table above to that trade and the Tulsa metro geography.
| Trade | Tulsa County: Disclosed Quarters | Tulsa Metro: Disclosed Quarters |
|---|---|---|
| Car washes | 21 / 21 | 12 / 21 |
| Electrical contractors | 21 / 21 | 9 / 21 |
| Finish carpentry contractors | 21 / 21 | 12 / 21 |
| General automotive repair | 21 / 21 | 8 / 21 |
| Janitorial services | 21 / 21 | 12 / 21 |
| Landscaping services | 21 / 21 | 5 / 21 |
| Masonry contractors | 21 / 21 | 8 / 21 |
| Offices of chiropractors | 21 / 21 | 12 / 21 |
| Offices of dentists | 21 / 21 | 4 / 21 |
| Painting contractors | 21 / 21 | 12 / 21 |
| Pest control services | 21 / 21 | 12 / 21 |
| Plumbing and HVAC contractors | 21 / 21 | 7 / 21 |
| Roofing contractors | 21 / 21 | 8 / 21 |
| Site preparation contractors | 21 / 21 | 0 / 21 |
| Veterinary services | 21 / 21 | 9 / 21 |
| Total | 630 / 630 | 130 / 315 |
The takeaway: publish and trust the county-level numbers, not the metro-level ones, for any of these 15 trades. And more broadly, a public dataset that looks authoritative doesn't mean it's complete. This is exactly the kind of gap that goes unnoticed if nobody cross-checks two geographies against each other, which is most of the value of doing this kind of audit in the first place.
The Method
Every figure traces to a specific BLS QCEW area-slice file, pulled directly from BLS's own open-data endpoints: private ownership only, five-digit or six-digit NAICS codes depending on the trade. Seven of the fifteen trades split into residential/nonresidential codes under the 2022 NAICS revision, so they're reported at the five-digit combined level instead; that's marked per-row in the table above and never inferred. Establishment counts, location quotients, and year-over-year changes are BLS's own published fields: nothing here is re-derived from raw payroll data.
The one derived figure, establishments per 10,000 households, Tulsa County only, uses a fixed Census ACS 5-year household count (272,422 households, 2020-2024 estimate) as the denominator across every quarter, so movement in that column reflects establishment-count change only, not population change.
QCEW only counts businesses with at least one payroll employee covered by state unemployment insurance: a one-truck electrician or a solo landscaper with no employees isn't in this dataset at all, which matters for trades where solo operators are common. Small cells are also suppressed for confidentiality, which is expected and legitimate at the county level too, it just didn't happen to affect any of these 15 trades in this window (see the investigation above for where it did).
Census Business Formation Statistics, Tulsa County logged 10,804 new business applications in 2025, up 7.0% year over year, is a useful secondary, more current signal on new business activity. It's never merged into the QCEW establishment counts above; applications measure intent to form a business, not confirmed operating businesses with payroll, so the two numbers answer different questions.
Every source used here is a public BLS or Census Bureau endpoint: nothing in this dataset is proprietary, licensed, or exclusive. The value is the audit and the packaging, not access to numbers anyone can already pull themselves.
Related
How local search ranking actually works for Tulsa trades, including my own roofing map-pack position.
Learn more → Field NotesA closer look at the trade this dataset shows growing fastest, and why visibility doesn't always follow.
Learn more → Companion PieceThis same county-wide count, broken down by ZIP code, showing which specific pockets of the county each trade concentrates in.
Learn more → Companion PieceSix confirmed, individually sourced cases of private-equity or large-corporate ownership reaching Tulsa's local trades, and an honest list of what couldn't be verified.
Learn more → New ResearchThe same 15 trades and the same BLS methodology, run head to head against Oklahoma City's own numbers.
Learn more →