Existing skilled manufacturing workforce is concentrated in about two dozen mid-size Midwest/Southeast counties — separate from the low-cost-land counties that win most site-selection contests
BLS QCEW 2023 county employment (NAICS 335 electrical equipment, 3363 motor-vehicle parts, 333 machinery) as a battery-relevant manufacturing proxy, location-quotient method
Summary
Using BLS QCEW 2023 county employment in the three NAICS industries most transferable to battery-cell manufacturing — electrical equipment/component manufacturing (335, which includes storage-battery manufacturing 33591), motor-vehicle-parts manufacturing (3363), and industrial machinery (333) — a location-quotient (LQ) analysis identifies roughly two dozen mid-size counties, concentrated in Michigan, Ohio, Wisconsin, Kentucky, Indiana and the Carolinas/Georgia auto corridor, where this workforce is 6-13x more concentrated than the national average. These are places with decades of automotive-supplier and electrical-equipment employment, not places chosen because land was cheap. By contrast, several real, publicly announced battery megasites — most starkly Ford's BlueOval City in Haywood County, TN — sit in counties with a battery-relevant LQ of roughly 0.3 (well below the national average) and cheap land (median home value ~$120K), meaning the workforce is being built from scratch rather than drawn from an existing base.
Method, exclusions, and what the proxy does and does not capture
No table in this corpus directly measures 'skilled manufacturing workforce for battery production' — there is no occupational series for battery technicians, cell assemblers, or EV-supply-chain electricians at county grain (search_catalog returned no match for 'skills', 'electricians', 'machinists' as county-level occupation counts). The proxy used here is BLS QCEW county employment (2023, private ownership) in three NAICS codes whose labor pools are the ones battery plants actually hire from: 335 (electrical equipment/appliance/component mfg, which includes battery mfg itself, NAICS 33591), 3363 (motor-vehicle parts, the auto-supplier trades — machine operators, industrial electricians, quality techs — that GM/Ford/LG/Panasonic/SK plants recruit from directly), and 333 (industrial/general machinery, the tool-and-die/mechatronics trades). A location quotient (LQ) of 5 means that industry group is 5x as concentrated in that county's private workforce as the U.S. average.
Exclusion disclosed — predicates 'mfg_emp IS NOT NULL' and 'total_emp IS NOT NULL': BLS QCEW suppresses (disclosure_code='N') employment figures for any county-industry cell dominated by one or two employers, replacing the true count with NULL, and a NULL cannot be ranked or divided. Applying those two filters removes 395 of 3,274 county-level QCEW area codes (12.1%) from the ranking. Named by state, the excluded units are concentrated in exactly the sparsely populated rural counties this question is about: 55 in Texas (e.g. Loving, King, Terrell, Kent, Stonewall, McMullen, Culberson), 29 in Nebraska (Arthur, Loup, Blaine, Grant, McPherson), 25 in Georgia (Glascock, Quitman, Echols, Talbot, Baker), 25 in Kansas (Greeley, Wallace, Stanton, Kearny), 23 in South Dakota (Oglala Lakota, Jones, Harding, Ziebach), 20 in North Dakota (Slope, Golden Valley, Billings), 18 in Montana, 18 in Kentucky (Owsley, Leslie, Wolfe, Elliott — rural Appalachian counties), 15 in Colorado, and 11 in Alaska (Denali, Yakutat, Kusilvak). With the filter applied, 2,879 counties remain, representing 131,286,713 total private jobs and 12,840,453 manufacturing jobs — effectively the entire national manufacturing workforce, since suppression removes individual small cells, not whole regional economies; without the filter the true national total is at most negligibly higher, because these are overwhelmingly the lowest-population counties in the country. But the composition, not the total, is what matters for this question: because suppression is triggered by having so few employers that one dominant plant would be individually identifiable, a genuinely rural 'cheap land, one hidden factory' county is exactly the profile most likely to be excluded here. Its true battery-relevant LQ is unknown from this table, not confirmed low, and that is a real limitation of using QCEW to answer this specific question.
The proxy is also imperfect on its own terms: a county can have a high LQ from legacy auto-parts plants whose workers may or may not transfer cleanly to lithium-cell chemistry work, and a county's true workforce also depends on nearby community-college/apprenticeship pipelines (e.g. Georgia's technical college system, cited by Manufacturing Dive as a deliberate part of the Southeast's battery-workforce buildout) that QCEW employment counts do not capture at all.
Counties with real pre-existing capacity
| Fond du Lac | WI | 12.75 | 26.1% | $209,800 |
| Anderson | SC | 11.18 | 27.8% | $212,500 |
| Calhoun | MI | 10.91 | 23.7% | $151,500 |
| Madison | OH | 10.43 | 17.0% | $231,400 |
| Christian | KY | 9.67 | 23.4% | $149,200 |
| Black Hawk | IA | 9.36 | 23.6% | $182,400 |
| Ottawa | MI | 6.59 | 36.0% | $291,200 |
| Troup | GA | 7.78 | 32.4% | $187,800 |
| Anderson | SC | 11.18 | 27.8% | $212,500 |
| Black Hawk | IA | 9.36 | 23.6% | $182,400 |
| Calhoun | MI | 10.91 | 23.7% | $151,500 |
| Christian | KY | 9.67 | 23.4% | $149,200 |
| Fond du Lac | WI | 12.75 | 26.1% | $209,800 |
| Madison | OH | 10.43 | 17.0% | $231,400 |
| Ottawa | MI | 6.59 | 36.0% | $291,200 |
| Troup | GA | 7.78 | 32.4% | $187,800 |
| Troup | GA | 7.78 | 32.4% | $187,800 |
| Black Hawk | IA | 9.36 | 23.6% | $182,400 |
| Christian | KY | 9.67 | 23.4% | $149,200 |
| Calhoun | MI | 10.91 | 23.7% | $151,500 |
| Ottawa | MI | 6.59 | 36.0% | $291,200 |
| Madison | OH | 10.43 | 17.0% | $231,400 |
| Anderson | SC | 11.18 | 27.8% | $212,500 |
| Fond du Lac | WI | 12.75 | 26.1% | $209,800 |
| Fond du Lac | WI | 12.75 | 26.1% | $209,800 |
| Anderson | SC | 11.18 | 27.8% | $212,500 |
| Calhoun | MI | 10.91 | 23.7% | $151,500 |
| Madison | OH | 10.43 | 17.0% | $231,400 |
| Christian | KY | 9.67 | 23.4% | $149,200 |
| Black Hawk | IA | 9.36 | 23.6% | $182,400 |
| Troup | GA | 7.78 | 32.4% | $187,800 |
| Ottawa | MI | 6.59 | 36.0% | $291,200 |
| Ottawa | MI | 6.59 | 36.0% | $291,200 |
| Troup | GA | 7.78 | 32.4% | $187,800 |
| Anderson | SC | 11.18 | 27.8% | $212,500 |
| Fond du Lac | WI | 12.75 | 26.1% | $209,800 |
| Calhoun | MI | 10.91 | 23.7% | $151,500 |
| Black Hawk | IA | 9.36 | 23.6% | $182,400 |
| Christian | KY | 9.67 | 23.4% | $149,200 |
| Madison | OH | 10.43 | 17.0% | $231,400 |
| Ottawa | MI | 6.59 | 36.0% | $291,200 |
| Madison | OH | 10.43 | 17.0% | $231,400 |
| Anderson | SC | 11.18 | 27.8% | $212,500 |
| Fond du Lac | WI | 12.75 | 26.1% | $209,800 |
| Troup | GA | 7.78 | 32.4% | $187,800 |
| Black Hawk | IA | 9.36 | 23.6% | $182,400 |
| Calhoun | MI | 10.91 | 23.7% | $151,500 |
| Christian | KY | 9.67 | 23.4% | $149,200 |
Two of these are directly validated against real battery investments: Ottawa County, MI is the actual county for LG Energy Solution's Holland, MI battery-cell plant, and Troup County, GA (West Point) sits in the Kia Georgia / West Point EV-supplier corridor that also supports SK Battery America nearby. Large metro counties (Los Angeles, Cook/Chicago, Harris/Houston, Wayne/Detroit) have far larger absolute manufacturing headcounts but much lower LQs (roughly 7-14 for Wayne/Macomb/Oakland MI, but near 1 for LA/Houston/Chicago once diluted across a much bigger, more diversified economy) — a reminder that raw employment counts alone overstate 'workforce readiness' in a giant metro and understate it in a specialized mid-size county.
A real 'cheap land, not workforce' case: Haywood County, TN
Ford's BlueOval City (battery cells plus EV assembly, Stanton, TN) sits in Haywood County — total private employment of only ~4,870 in 2023, battery-relevant LQ of 0.26 (roughly a quarter of the national concentration), and a median home value of $119,600, among the cheapest in this comparison set. This is the clearest quantitative case in the data for a site chosen primarily for land availability, highway/rail access, and state incentives rather than an existing skilled manufacturing base — consistent with public reporting that Tennessee and Ford have had to build workforce housing and training programs around the site rather than draw on a local pipeline.
Caveats
- NAICS 335/3363/333 is a proxy, not a battery-specific occupational measure; this corpus has no county-level skilled-trades certification or battery-specific workforce data, and the search for one returned no matching table.
- 395 of 3,274 county-level QCEW area codes (12.1%) — named by state above — are excluded from the ranking because BLS suppresses their employment figures (disclosure_code='N') to protect a dominant single employer's identity. These are disproportionately the sparsest rural counties in Texas, Nebraska, Georgia, Kansas, the Dakotas, Montana, Kentucky, Colorado and Alaska, so a genuine rural workforce concentration in one of those counties could be invisible here rather than confirmed absent.
- LQ favors small/mid-size counties with a narrow, specialized economic base; very large diversified metro counties will always show lower LQs even with substantial absolute manufacturing headcounts, so LQ and raw headcount answer slightly different questions and both are reported.
- Home value is used as a land-cost proxy, not literal industrial land price, which this corpus does not carry at county grain.
What This Report Does Not Answer
- Direct county-level battery-specific occupational/skills data (electricians, machinists, cell technicians): No table in this corpus carries battery-specific or trade-specific (electrician/machinist) occupational counts at county grain; NAICS 335/3363/333 QCEW employment is used as the nearest available proxy and is disclosed as such throughout.
Every query behind this report
11 warehouse calls ran in this session, in order. Each is reproducible against the same snapshot.
query — 8 rows — 1270 ms
SELECT DISTINCT industry_code FROM econ.county_qcew WHERE industry_code IN ('31-33','1013','335','3359','336','3363','333','23') AND "year"='2023' LIMIT 50query — 40 rows — 1203 ms
WITH base AS (
SELECT area_fips,
SUM(CASE WHEN industry_code='10' THEN annual_avg_emplvl END) AS total_emp,
SUM(CASE WHEN industry_code='31-33' THEN annual_avg_emplvl END) AS mfg_emp,
SUM(CASE WHEN industry_code='31-33' THEN annual_avg_wkly_wage END) AS mfg_wage,
SUM(CASE WHEN industry_code='335' THEN annual_avg_emplvl END) AS elec_equip_emp,
SUM(CASE WHEN industry_code='3363' THEN annual_avg_emplvl END) AS motor_parts_emp,
SUM(CASE WHEN industry_code='333' THEN annual_avg_emplvl END) AS machinery_emp
FROM econ.county_qcew
WHERE "year"='2023' AND own_code='5' AND industry_code IN ('10','31-33','335','3363','333')
GROUP BY area_fips
)
SELECT area_fips, total_emp, mfg_emp, mfg_wage,
COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0) AS battery_relevant_emp,
ROUND(100.0*mfg_emp/NULLIF(total_emp,0),2) AS mfg_share_pct
FROM base
WHERE mfg_emp IS NOT NULL AND total_emp IS NOT NULL AND total_emp > 5000
ORDER BY battery_relevant_emp DESC
FETCH FIRST 40 ROWS ONLYquery — 39 rows — 4541 ms
SELECT county_fips, county_name, state_fips FROM geo.counties WHERE county_fips IN ('48201','26163','26099','26125','17031','06037','26081','39035','06085','55133','48439','27053','06059','06001','55079','06073','04013','48113','40143','17043','39113','36029','26139','17143','17201','45045','45083','37119','45007','36055','21111','48453','29189','39061','18097','25017','39095','19013','09003','55025') AND "year" = (SELECT MAX("year") FROM geo.counties)query — 30 rows — 1989 ms
WITH base AS (
SELECT area_fips,
SUM(CASE WHEN industry_code='10' THEN annual_avg_emplvl END) AS total_emp,
SUM(CASE WHEN industry_code='31-33' THEN annual_avg_emplvl END) AS mfg_emp,
SUM(CASE WHEN industry_code='335' THEN annual_avg_emplvl END) AS elec_equip_emp,
SUM(CASE WHEN industry_code='3363' THEN annual_avg_emplvl END) AS motor_parts_emp,
SUM(CASE WHEN industry_code='333' THEN annual_avg_emplvl END) AS machinery_emp
FROM econ.county_qcew
WHERE "year"='2023' AND own_code='5' AND industry_code IN ('10','31-33','335','3363','333')
GROUP BY area_fips
),
nat AS (
SELECT SUM(total_emp) AS nat_total, SUM(COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0)) AS nat_battery
FROM base
)
SELECT area_fips, total_emp, mfg_emp,
COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0) AS battery_relevant_emp,
ROUND(100.0*mfg_emp/NULLIF(total_emp,0),2) AS mfg_share_pct,
ROUND( ((COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0))*1.0/NULLIF(total_emp,0)) / (nat.nat_battery*1.0/nat.nat_total), 2) AS battery_lq
FROM base, nat
WHERE total_emp BETWEEN 20000 AND 400000
AND (COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0)) > 500
ORDER BY battery_lq DESC
FETCH FIRST 30 ROWS ONLYquery — 30 rows — 2226 ms
SELECT county_fips, county_name, state_fips FROM geo.counties WHERE county_fips IN ('55039','45007','26025','39097','21047','19013','39149','26099','26093','55101','39143','37105','26147','17143','13285','21151','47001','33005','47059','31019','21199','39139','26139','01083','55027','39173','29071','39063','17201','26075') AND "year" = (SELECT MAX("year") FROM geo.counties)query — 30 rows — 10354 ms
SELECT county_fips, median_home_value FROM census.acs_housing WHERE county_fips IN ('55039','45007','26025','39097','21047','19013','39149','26099','26093','55101','39143','37105','26147','17143','13285','21151','47001','33005','47059','31019','21199','39139','26139','01083','55027','39173','29071','39063','17201','26075') AND "year"=(SELECT MAX("year") FROM census.acs_housing)query — 4 rows — 2219 ms
WITH base AS (
SELECT area_fips,
SUM(CASE WHEN industry_code='10' THEN annual_avg_emplvl END) AS total_emp,
SUM(CASE WHEN industry_code='31-33' THEN annual_avg_emplvl END) AS mfg_emp,
SUM(CASE WHEN industry_code='335' THEN annual_avg_emplvl END) AS elec_equip_emp,
SUM(CASE WHEN industry_code='3363' THEN annual_avg_emplvl END) AS motor_parts_emp,
SUM(CASE WHEN industry_code='333' THEN annual_avg_emplvl END) AS machinery_emp
FROM econ.county_qcew
WHERE "year"='2023' AND own_code='5' AND industry_code IN ('10','31-33','335','3363','333')
GROUP BY area_fips
),
nat AS (
SELECT SUM(total_emp) AS nat_total, SUM(COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0)) AS nat_battery
FROM base
)
SELECT area_fips, total_emp, mfg_emp,
COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0) AS battery_relevant_emp,
ROUND(100.0*mfg_emp/NULLIF(total_emp,0),2) AS mfg_share_pct,
ROUND( ((COALESCE(elec_equip_emp,0)+COALESCE(motor_parts_emp,0)+COALESCE(machinery_emp,0))*1.0/NULLIF(total_emp,0)) / (nat.nat_battery*1.0/nat.nat_total), 2) AS battery_lq
FROM base, nat
WHERE area_fips IN ('47075','13031','21093','47163')query — 4 rows — 3259 ms
SELECT county_fips, median_home_value FROM census.acs_housing WHERE county_fips IN ('47075','13031','21093','47163') AND "year"=(SELECT MAX("year") FROM census.acs_housing)query — 1 rows — 2044 ms
SELECT COUNT(*) AS n_counties_suppressed FROM (
SELECT area_fips,
SUM(CASE WHEN industry_code='10' THEN annual_avg_emplvl END) AS total_emp,
SUM(CASE WHEN industry_code='31-33' THEN annual_avg_emplvl END) AS mfg_emp
FROM econ.county_qcew
WHERE "year"='2023' AND own_code='5' AND industry_code IN ('10','31-33')
GROUP BY area_fips
) t WHERE mfg_emp IS NULL OR total_emp IS NULLquery — 1 rows — 1853 ms
WITH base AS (
SELECT area_fips,
SUM(CASE WHEN industry_code='10' THEN annual_avg_emplvl END) AS total_emp,
SUM(CASE WHEN industry_code='31-33' THEN annual_avg_emplvl END) AS mfg_emp
FROM econ.county_qcew
WHERE "year"='2023' AND own_code='5' AND industry_code IN ('10','31-33')
GROUP BY area_fips
)
SELECT
COUNT(*) AS all_counties,
SUM(CASE WHEN mfg_emp IS NOT NULL AND total_emp IS NOT NULL THEN 1 ELSE 0 END) AS counties_with_data,
SUM(CASE WHEN mfg_emp IS NULL OR total_emp IS NULL THEN 1 ELSE 0 END) AS counties_suppressed,
SUM(mfg_emp) AS mfg_emp_captured,
SUM(total_emp) AS total_emp_captured
FROM basequery — 10 rows — 4596 ms
WITH base AS (
SELECT area_fips,
SUM(CASE WHEN industry_code='10' THEN annual_avg_emplvl END) AS total_emp,
SUM(CASE WHEN industry_code='31-33' THEN annual_avg_emplvl END) AS mfg_emp
FROM econ.county_qcew
WHERE "year"='2023' AND own_code='5' AND industry_code IN ('10','31-33')
GROUP BY area_fips
), excl AS (
SELECT area_fips FROM base WHERE mfg_emp IS NULL OR total_emp IS NULL
)
SELECT c.state_fips, COUNT(*) AS n_excluded_counties, STRING_AGG(c.county_name, ', ') AS sample_names
FROM excl e JOIN geo.counties c ON c.county_fips = e.area_fips AND c."year" = (SELECT MAX("year") FROM geo.counties)
GROUP BY c.state_fips
ORDER BY n_excluded_counties DESC
FETCH FIRST 10 ROWS ONLYSources
- BLS QCEW county industry employment 2023 (econ.county_qcew) — Queried via AskAmerica econ.county_qcew, own_code=5 (private), industry_code IN (10,31-33,335,3363,333), year=2023
Show SQL
WITH base AS (SELECT area_fips, SUM(CASE WHEN industry_code='10' THEN annual_avg_emplvl END) AS total_emp, SUM(CASE WHEN industry_code='335' THEN annual_avg_emplvl END) AS elec_equip_emp, SUM(CASE WHEN industry_code='3363' THEN annual_avg_emplvl END) AS motor_parts_emp, SUM(CASE WHEN industry_code='333' THEN annual_avg_emplvl END) AS machinery_emp FROM econ.county_qcew WHERE year='2023' AND own_code='5' GROUP BY area_fips) SELECT * FROM base - ACS 5-Year median home value by county (census.acs_housing) — 2019-2023 5-year vintage
- https://www.manufacturingdive.com/news/battery-manufacturing-workforce-development-georgia-south-carolina-sk-on/688295/
- https://www.transportenvironment.org/uploads/files/Assembly-plant-or-battery-powerhouse.pdf