← All studies · askamerica.ai

Ten years after the fracking boom, host counties look modestly better off on income but no better — and often worse — on jobs, poverty, and population than the average US county

21 top shale-play counties (Bakken ND, Permian Basin TX, Eagle Ford TX, Marcellus PA/WV, Niobrara/Weld CO) vs. all US counties, 2013-2023

Fracking counties, ten years on: a mixed and heterogeneous outcome 21 top shale-play counties vs. all US counties, 2013 to 2023 (Census ACS 5-yr, BLS QCEW) Population growth, oil-gas counties (pop-weighted) +13.0% vs +6.5% US Weld County CO alone drives most of this; simple county-average is +6.0%, about equal to the nation Real household income growth (median, pop-weighted) +16.3% vs +13.8% US A modest edge, inflation-adjusted, 2013-2023 Workplace employment growth (QCEW, all industries) +11.2% vs +14.4% US 21-county total: 407,777 -> 453,458 jobs, trailing the national pace Poverty-rate improvement -2.4 pts vs -3.0 pts US Pop-weighted; simple county-average improvement is only -1.1 pts, and poverty ROSE in 8 of 21 counties Population growth 2013-2023 by shale play -10 0 10 20 30 40 50 60 Play % change Bakken (ND) Niobrara (Weld Co, CO) Permian (TX) Marcellus (PA/WV) Eagle Ford (TX) US (all counties) 4-7 counties per play; Marcellus and Eagle Ford counties lost population over the decade Fracking counties vs. US: growth 2013-2023 (real $ where noted) -5 0 5 10 15 20 Metric % / pts Pop. growth (wtd) Pop. growth (simple avg) Real median HH income Real wage/job (QCEW) Employment (QCEW) Poverty pts (wtd) Poverty pts (simple avg) 21 fracking counties US benchmark Poverty bars are percentage-point change (negative = improvement) AskAmerica · askamerica.ai
SVG

Summary

Ten years on, the 21 counties that hosted the biggest slices of the US fracking boom (Bakken ND, Permian Basin TX, Eagle Ford TX, Marcellus PA/WV, and Weld County CO/Niobrara) are richer in nominal and even real dollar terms than in 2013 — but so is the rest of the country, and by several measures the fracking counties did no better, or worse, than the US average. Population-weighted, these counties grew population 13.0% (vs. 6.5% nationally) and grew real median household income 16.3% (vs. 13.8% nationally) — both modest edges. But workplace employment (BLS QCEW, all industries) grew only 11.2% against a 14.4% national pace, real average wage per job grew only 7.7% against 11.2% nationally, and the poverty rate fell only 2.4 points against a 3.0-point national decline. Weight every county equally instead of by population and the population-growth edge disappears (+6.0% vs. +6.5% nationally), 10 of 21 counties actually LOST population over the decade, and poverty rose in 8 of the 21. The apparent aggregate gain is carried almost entirely by one county — Weld County, CO (FIPS 08123), a fast-growing Denver-metro-adjacent county where suburbanization, not oil and gas alone, plausibly drove much of the growth. When Weld County (FIPS 08123) is EXCLUDED from the population-weighted calculation, the group's population growth falls below the national rate (see the robustness section below) — and the Marcellus (PA/WV) and Eagle Ford (TX) counties lost population outright regardless. This matches the published literature: a 2021 Ohio River Valley Institute study of the 22 top Marcellus/Utica gas counties found their combined jobs grew just 1.6% from 2008-2019 versus 9.9% nationally, and their shares of the nation's jobs, income, and population all fell.

How the comparison was built

Which counties: 21 counties chosen from the major US shale plays based on published production geography — Bakken (McKenzie, Mountrail, Williams, Dunn ND), Eagle Ford (Karnes, La Salle, Dimmit, McMullen TX), Permian Basin (Midland, Martin, Reeves, Loving, Upton TX), Marcellus (Washington, Greene, Susquehanna, Bradford, Tioga PA; Doddridge, Wetzel WV), and Niobrara (Weld CO, FIPS 08123). This corpus carries no ready-made "shale play county" table (search_catalog returned no match for "shale"/"play"), so the county list is a hand-built proxy built from the well-documented core-producing counties of each play, not a corpus-native geography — a limitation stated up front.

Window: 2013 (roughly the mid-to-peak of the 2007-2014 boom) to 2023 (the most recent year with matching ACS 5-year and QCEW data), i.e. "ten years on" from the boom's peak years.

Metrics: population (Census ACS 5-year, acs_population), real per-capita and median household income (Census ACS 5-year acs_income, deflated with BLS CPI-U, 2013->2023 deflator 1.308), poverty rate (Census ACS 5-year acs_poverty), and workplace employment/wages (BLS QCEW, econ.county_qcew, all industries, all ownership). National figures for comparison are the same measures aggregated (population-weighted for dollar/rate figures, summed for counts) across all ~3,100 US counties in the same tables and years.

Limits of this comparison: these are simple level comparisons over the same calendar window, each fracking county against the national figure — no formal statistical model was fit and no causal-inference tool was used. The result should be read as descriptive: fracking counties as a group did not clearly pull ahead of the median US county a decade on, and several core metrics moved the other way. It cannot separate the effect of oil and gas extraction itself from everything else that also happened in these places over the decade (the national growth cycle, the Denver-metro expansion reaching Weld County, the 2020 downturn, oil-price swings in 2015-16 and 2020).

Robustness check — Weld County, CO (FIPS 08123) EXCLUDED: to see whether the population-weighted headline numbers were being carried by a single large county, the population-weighted population and income figures were recalculated with Weld County, CO (FIPS 08123) EXCLUDED from the 21-county set, leaving the other 20 counties. This exclusion of Weld County (FIPS 08123) is disclosed here and used only for this one robustness comparison — Weld County is NOT excluded anywhere else in this report. With Weld County (FIPS 08123) excluded, population-weighted population growth for the remaining 20 counties falls from 13.0% to 5.65% (below the 6.5% national figure), while population-weighted real per-capita income growth changes little (roughly 15.7% vs. 18.2% with Weld County included, both close to the 17.7% national figure). Every other number in this report (the stat tiles, the play-level chart, and the employment/wage/poverty figures) uses all 21 counties, including Weld County.

Population: a story about one county, not a play

Population-weighted, the 21 counties grew 13.0% against a 6.5% national rate — but this is driven almost entirely by Weld County, CO (259K → 341K, +31.7%), which sits on the fast-growing Front Range/Denver-Greeley corridor where suburban growth, not oil and gas employment alone, is plausibly doing much of the work. As shown above, with Weld County (FIPS 08123) EXCLUDED, the remaining 20 counties' population-weighted growth drops to 5.65% — BELOW the 6.5% national rate. Treating each of the 21 counties equally instead (a truer picture of "the typical fracking county," and the figure used throughout the rest of this report unless stated otherwise), average population growth was 6.0%, essentially tied with the national rate, and population actually FELL in 11 of the 21 counties — nearly all of them in the Marcellus (PA/WV) and Eagle Ford (TX) plays, which lost 3.0% and 5.6% of their combined populations respectively over the decade. Only the Bakken (+51.3%) and, to a lesser extent, the Permian (+17.5%) plays saw clear population gains.

Jobs and wages: fracking counties trailed the national pace

Summed across all 21 counties (Weld County included, no exclusions here), BLS QCEW all-industry, all-ownership employment rose from 407,777 to 453,458 jobs, +11.2% — slower than the 14.4% national gain (134.7M → 154.1M jobs) over the same 2013-2023 window. Total annual wages rose from $21.6B to $33.8B in the 21 counties (+40.9% nominal) versus $6.68T to $11.11T nationally (+45.4% nominal); expressed as real average wage per job (deflated to 2023 dollars), fracking-county pay per worker rose 7.7% versus 11.2% nationally — a real-terms shortfall. This is a workplace-based measure (where the job is located, not where the worker lives), so it captures the fracking counties' own labor markets directly, without the commuting-inflow distortion that can affect a single small county's resident-based statistics.

Household income and poverty: a narrow win on income, a lag on poverty

By the resident-based ACS measures (all 21 counties, Weld County included, no exclusions here), fracking counties look somewhat better on income: population-weighted real median household income rose 16.3% versus 13.8% nationally, and real per-capita income rose 18.2% versus 17.7% nationally (essentially a tie). But the poverty rate — arguably the more direct "better off" measure — improved less: population-weighted, the fracking-county poverty rate fell 2.4 percentage points (13.3%→10.9%) against a 3.0-point national decline (15.7%→12.7%). Unweighted across the 21 counties the gap is starker: the average county's poverty rate fell only 1.1 points, and poverty actually ROSE in 8 of the 21 counties, most sharply in Dimmit County, TX (Eagle Ford), where the measured poverty rate rose from 26.5% to 44.8% as the county's population fell by 17% — a small-county ACS estimate that should be read with the wide margins of error inherent in 5-year estimates for counties this size (poverty universe of only ~8,500-10,000 people).

This matches the published literature on Appalachian gas counties

A February 2021 Ohio River Valley Institute report, "Appalachia's Natural Gas Counties: Contributing more to the U.S. economy and getting less in return," examined the 22 Ohio/Pennsylvania/West Virginia counties producing over 90% of the region's natural gas from 2008-2019 (a set overlapping five of this analysis's Marcellus counties). It found combined jobs in those 22 counties grew just 1.6% while national jobs grew 9.9% over the same period, even as the counties' economic output grew 60% (more than triple the national rate) — the gas-extraction gains largely did not translate into broad local job or population growth. Their shares of the nation's personal income, jobs, and population all fell (income share -6.3%, jobs share -7.6%, population share -~11%) between 2008 and 2019. This corpus's independent measurement of the Marcellus subset here (Bradford, Greene, Susquehanna, Tioga, Washington PA; Doddridge, Wetzel WV) — population loss of 3.0% for the group from 2013-2023 — is directionally consistent with that finding, despite different counties, years, and metrics. Separately, a 2019 Dallas Fed analysis found the national shale boom (2010-2015) added roughly 1% to US GDP overall through cheaper fuel and improved trade balance — a real but modest national spillover, and one that says nothing about whether the extraction counties themselves captured a proportional local benefit.

Bottom line

"How much better off" depends heavily on which measure and which county you pick. In aggregate, nominal dollar figures in fracking counties rose sharply over the decade — but so did dollar figures everywhere, and after adjusting for inflation and comparing to the national figures, the honest answer is: modestly better off on income, especially in the Bakken and Permian; roughly flat to worse off on jobs, wages, and poverty reduction; and outright worse off on population in the Marcellus and Eagle Ford plays. A single booming county, Weld County CO (FIPS 08123), drives most of the positive population and income headline; with it EXCLUDED, the group's edge over the national figures mostly disappears, as shown in the robustness check above. This lines up with the academic and think-tank literature's general finding that fracking's economic benefits were real but front-loaded in the boom years, concentrated narrowly in a subset of counties and industries, and did not durably compound into broad-based local prosperity a decade later.

Every query behind this report

15 warehouse calls ran in this session, in order. Each is reproducible against the same snapshot.

query — 42 rows — 13480 ms
WITH counties(county_fips, county_name, play) AS (VALUES
  ('38053','McKenzie ND','Bakken'), ('38061','Mountrail ND','Bakken'), ('38105','Williams ND','Bakken'), ('38025','Dunn ND','Bakken'),
  ('48255','Karnes TX','Eagle Ford'), ('48283','La Salle TX','Eagle Ford'), ('48127','Dimmit TX','Eagle Ford'), ('48311','McMullen TX','Eagle Ford'),
  ('48329','Midland TX','Permian'), ('48317','Martin TX','Permian'), ('48389','Reeves TX','Permian'), ('48301','Loving TX','Permian'), ('48461','Upton TX','Permian'),
  ('42125','Washington PA','Marcellus'), ('42059','Greene PA','Marcellus'), ('42115','Susquehanna PA','Marcellus'), ('42015','Bradford PA','Marcellus'), ('42117','Tioga PA','Marcellus'),
  ('54017','Doddridge WV','Marcellus'), ('54103','Wetzel WV','Marcellus'),
  ('08123','Weld CO','Niobrara')
)
SELECT c.county_fips, c.county_name, c.play, q."year",
  SUM(CASE WHEN q.industry_code='10' AND q.own_code='0' THEN q.annual_avg_emplvl END) AS total_emp,
  SUM(CASE WHEN q.industry_code='211' THEN q.annual_avg_emplvl END) AS oilgas_emp,
  SUM(CASE WHEN q.industry_code='10' AND q.own_code='0' THEN q.total_annual_wages END) AS total_wages,
  SUM(CASE WHEN q.industry_code='10' AND q.own_code='0' THEN q.annual_avg_wkly_wage END) AS avg_wkly_wage
FROM counties c
JOIN econ.county_qcew q ON q.area_fips = c.county_fips AND q."year" IN ('2013','2023')
GROUP BY c.county_fips, c.county_name, c.play, q."year"
ORDER BY c.play, c.county_name, q."year"
query — 42 rows — 4424 ms
WITH counties(county_fips) AS (VALUES
  ('38053'),('38061'),('38105'),('38025'),
  ('48255'),('48283'),('48127'),('48311'),
  ('48329'),('48317'),('48389'),('48301'),('48461'),
  ('42125'),('42059'),('42115'),('42015'),('42117'),
  ('54017'),('54103'),
  ('08123')
)
SELECT p."year", c.county_fips, p.total_population
FROM counties c
JOIN census.acs_population p ON p.county_fips = c.county_fips AND p."year" IN ('2013','2023')
ORDER BY c.county_fips, p."year"
query — 42 rows — 5143 ms
WITH counties(county_fips) AS (VALUES
  ('38053'),('38061'),('38105'),('38025'),
  ('48255'),('48283'),('48127'),('48311'),
  ('48329'),('48317'),('48389'),('48301'),('48461'),
  ('42125'),('42059'),('42115'),('42015'),('42117'),
  ('54017'),('54103'),
  ('08123')
)
SELECT y."year", c.county_fips, y.median_household_income, y.per_capita_income
FROM counties c
JOIN census.acs_income y ON y.county_fips = c.county_fips AND y."year" IN ('2013','2023')
ORDER BY c.county_fips, y."year"
query — 42 rows — 1790 ms
WITH counties(county_fips) AS (VALUES
  ('38053'),('38061'),('38105'),('38025'),
  ('48255'),('48283'),('48127'),('48311'),
  ('48329'),('48317'),('48389'),('48301'),('48461'),
  ('42125'),('42059'),('42115'),('42015'),('42117'),
  ('54017'),('54103'),
  ('08123')
)
SELECT pv."year", c.county_fips, pv.poverty_universe, pv.below_poverty,
  ROUND(100.0*pv.below_poverty/NULLIF(pv.poverty_universe,0),1) AS poverty_rate_pct
FROM counties c
JOIN census.acs_poverty pv ON pv.county_fips = c.county_fips AND pv."year" IN ('2013','2023')
ORDER BY c.county_fips, pv."year"
query — 2 rows — 1012 ms
SELECT "year",
  SUM(total_population) AS us_population
FROM census.acs_population
WHERE "year" IN ('2013','2023') AND geography = 'county'
GROUP BY "year"
query — 2 rows — 4540 ms
-- national population-weighted median household income and poverty rate across counties
SELECT i."year",
  SUM(i.median_household_income * p.total_population) / SUM(p.total_population) AS us_weighted_median_hh_income,
  SUM(i.per_capita_income * p.total_population) / SUM(p.total_population) AS us_weighted_per_capita_income
FROM census.acs_income i
JOIN census.acs_population p ON p.county_fips = i.county_fips AND p."year" = i."year" AND p.geography='county'
WHERE i."year" IN ('2013','2023') AND i.geography = 'county'
GROUP BY i."year"
query — 2 rows — 1279 ms
SELECT "year", SUM(below_poverty)*100.0/SUM(poverty_universe) AS us_poverty_rate_pct
FROM census.acs_poverty
WHERE "year" IN ('2013','2023') AND geography = 'county'
GROUP BY "year"
query — 21 rows — 5417 ms
WITH counties(county_fips, county_name, play) AS (VALUES
  ('38053','McKenzie ND','Bakken'), ('38061','Mountrail ND','Bakken'), ('38105','Williams ND','Bakken'), ('38025','Dunn ND','Bakken'),
  ('48255','Karnes TX','Eagle Ford'), ('48283','La Salle TX','Eagle Ford'), ('48127','Dimmit TX','Eagle Ford'), ('48311','McMullen TX','Eagle Ford'),
  ('48329','Midland TX','Permian'), ('48317','Martin TX','Permian'), ('48389','Reeves TX','Permian'), ('48301','Loving TX','Permian'), ('48461','Upton TX','Permian'),
  ('42125','Washington PA','Marcellus'), ('42059','Greene PA','Marcellus'), ('42115','Susquehanna PA','Marcellus'), ('42015','Bradford PA','Marcellus'), ('42117','Tioga PA','Marcellus'),
  ('54017','Doddridge WV','Marcellus'), ('54103','Wetzel WV','Marcellus'),
  ('08123','Weld CO','Niobrara')
),
pop AS (
  SELECT county_fips, "year", total_population FROM census.acs_population WHERE "year" IN ('2013','2023') AND geography='county'
),
inc AS (
  SELECT county_fips, "year", median_household_income, per_capita_income FROM census.acs_income WHERE "year" IN ('2013','2023') AND geography='county'
),
pov AS (
  SELECT county_fips, "year", poverty_universe, below_poverty FROM census.acs_poverty WHERE "year" IN ('2013','2023') AND geography='county'
)
SELECT c.county_fips, c.county_name, c.play,
  p13.total_population AS pop_2013, p23.total_population AS pop_2023,
  i13.per_capita_income AS pci_2013, i23.per_capita_income AS pci_2023,
  i13.median_household_income AS mhi_2013, i23.median_household_income AS mhi_2023,
  ROUND(100.0*pv13.below_poverty/pv13.poverty_universe,1) AS pov_2013,
  ROUND(100.0*pv23.below_poverty/pv23.poverty_universe,1) AS pov_2023
FROM counties c
LEFT JOIN pop p13 ON p13.county_fips=c.county_fips AND p13."year"='2013'
LEFT JOIN pop p23 ON p23.county_fips=c.county_fips AND p23."year"='2023'
LEFT JOIN inc i13 ON i13.county_fips=c.county_fips AND i13."year"='2013'
LEFT JOIN inc i23 ON i23.county_fips=c.county_fips AND i23."year"='2023'
LEFT JOIN pov pv13 ON pv13.county_fips=c.county_fips AND pv13."year"='2013'
LEFT JOIN pov pv23 ON pv23.county_fips=c.county_fips AND pv23."year"='2023'
ORDER BY c.play, c.county_name
query — 1 rows — 216 ms
WITH counties(county_fips, county_name, play, pop_2013, pop_2023, pci_2013, pci_2023, mhi_2013, mhi_2023, pov_2013, pov_2023) AS (VALUES
('38025','Dunn ND','Bakken',3786,4043,33788,51754,60500,94688,10.1,7.2),
('38053','McKenzie ND','Bakken',7377,14280,33078,48665,64866,88289,13.8,12.8),
('38061','Mountrail ND','Bakken',8280,9567,33803,41281,68722,81292,12.3,13.2),
('38105','Williams ND','Bakken',25024,39368,38738,45793,76210,90224,8.6,8.8),
('48127','Dimmit TX','Eagle Ford',10270,8507,17516,20919,36681,33409,26.5,44.8),
('48255','Karnes TX','Eagle Ford',14916,14819,19899,28251,42862,59103,23.3,21.3),
('48283','La Salle TX','Eagle Ford',6921,6946,13307,16317,26756,55469,21.7,22.0),
('48311','McMullen TX','Eagle Ford',616,623,27375,23859,39500,45833,19.2,9.1),
('42015','Bradford PA','Marcellus',62624,59971,23667,35298,46963,62482,13.3,13.4),
('54017','Doddridge WV','Marcellus',8213,7767,17334,32472,34817,61164,15.5,14.5),
('42059','Greene PA','Marcellus',38362,35265,21819,33316,44388,66870,14.7,12.5),
('42115','Susquehanna PA','Marcellus',42948,38349,24477,39044,48231,66930,12.9,10.9),
('42117','Tioga PA','Marcellus',42267,41078,22621,32785,44187,62932,15.3,11.8),
('42125','Washington PA','Marcellus',208047,209778,28433,44392,53693,77487,10.5,9.4),
('54103','Wetzel WV','Marcellus',16435,14233,21653,28398,37969,53341,19.7,16.6),
('08123','Weld CO','Niobrara',258780,340711,25468,41661,57180,93287,14.7,9.0),
('48301','Loving TX','Permian',87,54,34068,86035,68750,51087,12.0,9.3),
('48317','Martin TX','Permian',4956,5230,20859,46701,42607,77083,15.8,8.1),
('48329','Midland TX','Permian',142289,171496,33672,48908,62993,93984,10.4,10.6),
('48389','Reeves TX','Permian',13775,13219,15467,24438,40571,56056,21.9,21.9),
('48461','Upton TX','Permian',3323,3227,22953,30320,51750,52321,17.1,17.1)
)
SELECT
  SUM(pop_2013) AS total_pop_2013,
  SUM(pop_2023) AS total_pop_2023,
  ROUND(100.0*(SUM(pop_2023)-SUM(pop_2013))/SUM(pop_2013),2) AS pop_growth_pct,
  SUM(pci_2013*pop_2013)/SUM(pop_2013) AS wavg_pci_2013,
  SUM(pci_2023*pop_2023)/SUM(pop_2023) AS wavg_pci_2023,
  SUM(mhi_2013*pop_2013)/SUM(pop_2013) AS wavg_mhi_2013,
  SUM(mhi_2023*pop_2023)/SUM(pop_2023) AS wavg_mhi_2023,
  SUM(pov_2013*pop_2013)/SUM(pop_2013) AS wavg_pov_2013,
  SUM(pov_2023*pop_2023)/SUM(pop_2023) AS wavg_pov_2023
FROM counties
query — 1 rows — 91 ms
WITH counties(county_fips, county_name, play, pop_2013, pop_2023, pci_2013, pci_2023, mhi_2013, mhi_2023, pov_2013, pov_2023) AS (VALUES
('38025','Dunn ND','Bakken',3786,4043,33788,51754,60500,94688,10.1,7.2),
('38053','McKenzie ND','Bakken',7377,14280,33078,48665,64866,88289,13.8,12.8),
('38061','Mountrail ND','Bakken',8280,9567,33803,41281,68722,81292,12.3,13.2),
('38105','Williams ND','Bakken',25024,39368,38738,45793,76210,90224,8.6,8.8),
('48127','Dimmit TX','Eagle Ford',10270,8507,17516,20919,36681,33409,26.5,44.8),
('48255','Karnes TX','Eagle Ford',14916,14819,19899,28251,42862,59103,23.3,21.3),
('48283','La Salle TX','Eagle Ford',6921,6946,13307,16317,26756,55469,21.7,22.0),
('48311','McMullen TX','Eagle Ford',616,623,27375,23859,39500,45833,19.2,9.1),
('42015','Bradford PA','Marcellus',62624,59971,23667,35298,46963,62482,13.3,13.4),
('54017','Doddridge WV','Marcellus',8213,7767,17334,32472,34817,61164,15.5,14.5),
('42059','Greene PA','Marcellus',38362,35265,21819,33316,44388,66870,14.7,12.5),
('42115','Susquehanna PA','Marcellus',42948,38349,24477,39044,48231,66930,12.9,10.9),
('42117','Tioga PA','Marcellus',42267,41078,22621,32785,44187,62932,15.3,11.8),
('42125','Washington PA','Marcellus',208047,209778,28433,44392,53693,77487,10.5,9.4),
('54103','Wetzel WV','Marcellus',16435,14233,21653,28398,37969,53341,19.7,16.6),
('08123','Weld CO','Niobrara',258780,340711,25468,41661,57180,93287,14.7,9.0),
('48301','Loving TX','Permian',87,54,34068,86035,68750,51087,12.0,9.3),
('48317','Martin TX','Permian',4956,5230,20859,46701,42607,77083,15.8,8.1),
('48329','Midland TX','Permian',142289,171496,33672,48908,62993,93984,10.4,10.6),
('48389','Reeves TX','Permian',13775,13219,15467,24438,40571,56056,21.9,21.9),
('48461','Upton TX','Permian',3323,3227,22953,30320,51750,52321,17.1,17.1)
)
SELECT
  SUM(pop_2013) AS total_pop_2013,
  SUM(pop_2023) AS total_pop_2023,
  ROUND(100.0*(SUM(pop_2023)-SUM(pop_2013))/SUM(pop_2013),2) AS pop_growth_pct,
  SUM(CAST(pci_2013 AS DOUBLE)*pop_2013)/SUM(pop_2013) AS wavg_pci_2013,
  SUM(CAST(pci_2023 AS DOUBLE)*pop_2023)/SUM(pop_2023) AS wavg_pci_2023,
  SUM(CAST(mhi_2013 AS DOUBLE)*pop_2013)/SUM(pop_2013) AS wavg_mhi_2013,
  SUM(CAST(mhi_2023 AS DOUBLE)*pop_2023)/SUM(pop_2023) AS wavg_mhi_2023,
  SUM(pov_2013*pop_2013)/SUM(pop_2013) AS wavg_pov_2013,
  SUM(pov_2023*pop_2023)/SUM(pop_2023) AS wavg_pov_2023
FROM counties
query — 2 rows — 14682 ms
WITH counties(county_fips) AS (VALUES
  ('38053'),('38061'),('38105'),('38025'),
  ('48255'),('48283'),('48127'),('48311'),
  ('48329'),('48317'),('48389'),('48301'),('48461'),
  ('42125'),('42059'),('42115'),('42015'),('42117'),
  ('54017'),('54103'),
  ('08123')
)
SELECT q."year",
  SUM(CASE WHEN q.industry_code='10' AND q.own_code='0' THEN q.annual_avg_emplvl END) AS total_emp,
  SUM(CASE WHEN q.industry_code='10' AND q.own_code='0' THEN q.total_annual_wages END) AS total_wages
FROM counties c
JOIN econ.county_qcew q ON q.area_fips = c.county_fips AND q."year" IN ('2013','2023')
GROUP BY q."year"
query — 2 rows — 2364 ms
SELECT "year",
  SUM(CASE WHEN industry_code='10' AND own_code='0' THEN annual_avg_emplvl END) AS us_total_emp,
  SUM(CASE WHEN industry_code='10' AND own_code='0' THEN total_annual_wages END) AS us_total_wages
FROM econ.county_qcew
WHERE "year" IN ('2013','2023')
GROUP BY "year"
query — 1 rows — 449 ms
WITH counties(county_fips, county_name, play, pop_2013, pop_2023, pci_2013, pci_2023, mhi_2013, mhi_2023, pov_2013, pov_2023) AS (VALUES
('38025','Dunn ND','Bakken',3786,4043,33788,51754,60500,94688,10.1,7.2),
('38053','McKenzie ND','Bakken',7377,14280,33078,48665,64866,88289,13.8,12.8),
('38061','Mountrail ND','Bakken',8280,9567,33803,41281,68722,81292,12.3,13.2),
('38105','Williams ND','Bakken',25024,39368,38738,45793,76210,90224,8.6,8.8),
('48127','Dimmit TX','Eagle Ford',10270,8507,17516,20919,36681,33409,26.5,44.8),
('48255','Karnes TX','Eagle Ford',14916,14819,19899,28251,42862,59103,23.3,21.3),
('48283','La Salle TX','Eagle Ford',6921,6946,13307,16317,26756,55469,21.7,22.0),
('48311','McMullen TX','Eagle Ford',616,623,27375,23859,39500,45833,19.2,9.1),
('42015','Bradford PA','Marcellus',62624,59971,23667,35298,46963,62482,13.3,13.4),
('54017','Doddridge WV','Marcellus',8213,7767,17334,32472,34817,61164,15.5,14.5),
('42059','Greene PA','Marcellus',38362,35265,21819,33316,44388,66870,14.7,12.5),
('42115','Susquehanna PA','Marcellus',42948,38349,24477,39044,48231,66930,12.9,10.9),
('42117','Tioga PA','Marcellus',42267,41078,22621,32785,44187,62932,15.3,11.8),
('42125','Washington PA','Marcellus',208047,209778,28433,44392,53693,77487,10.5,9.4),
('54103','Wetzel WV','Marcellus',16435,14233,21653,28398,37969,53341,19.7,16.6),
('08123','Weld CO','Niobrara',258780,340711,25468,41661,57180,93287,14.7,9.0),
('48301','Loving TX','Permian',87,54,34068,86035,68750,51087,12.0,9.3),
('48317','Martin TX','Permian',4956,5230,20859,46701,42607,77083,15.8,8.1),
('48329','Midland TX','Permian',142289,171496,33672,48908,62993,93984,10.4,10.6),
('48389','Reeves TX','Permian',13775,13219,15467,24438,40571,56056,21.9,21.9),
('48461','Upton TX','Permian',3323,3227,22953,30320,51750,52321,17.1,17.1)
)
SELECT
  SUM(pop_2013) AS total_pop_2013,
  SUM(pop_2023) AS total_pop_2023,
  ROUND(100.0*(SUM(pop_2023)-SUM(pop_2013))/SUM(pop_2013),2) AS pop_growth_pct,
  SUM(CAST(pci_2013 AS DOUBLE)*pop_2013)/SUM(pop_2013) AS wavg_pci_2013,
  SUM(CAST(pci_2023 AS DOUBLE)*pop_2023)/SUM(pop_2023) AS wavg_pci_2023,
  SUM(pov_2013*pop_2013)/SUM(pop_2013) AS wavg_pov_2013,
  SUM(pov_2023*pop_2023)/SUM(pop_2023) AS wavg_pov_2023
FROM counties WHERE county_fips <> '08123'
query — 1 rows — 98 ms
WITH counties(county_fips, county_name, play, pop_2013, pop_2023, pci_2013, pci_2023, mhi_2013, mhi_2023, pov_2013, pov_2023) AS (VALUES
('38025','Dunn ND','Bakken',3786,4043,33788,51754,60500,94688,10.1,7.2),
('38053','McKenzie ND','Bakken',7377,14280,33078,48665,64866,88289,13.8,12.8),
('38061','Mountrail ND','Bakken',8280,9567,33803,41281,68722,81292,12.3,13.2),
('38105','Williams ND','Bakken',25024,39368,38738,45793,76210,90224,8.6,8.8),
('48127','Dimmit TX','Eagle Ford',10270,8507,17516,20919,36681,33409,26.5,44.8),
('48255','Karnes TX','Eagle Ford',14916,14819,19899,28251,42862,59103,23.3,21.3),
('48283','La Salle TX','Eagle Ford',6921,6946,13307,16317,26756,55469,21.7,22.0),
('48311','McMullen TX','Eagle Ford',616,623,27375,23859,39500,45833,19.2,9.1),
('42015','Bradford PA','Marcellus',62624,59971,23667,35298,46963,62482,13.3,13.4),
('54017','Doddridge WV','Marcellus',8213,7767,17334,32472,34817,61164,15.5,14.5),
('42059','Greene PA','Marcellus',38362,35265,21819,33316,44388,66870,14.7,12.5),
('42115','Susquehanna PA','Marcellus',42948,38349,24477,39044,48231,66930,12.9,10.9),
('42117','Tioga PA','Marcellus',42267,41078,22621,32785,44187,62932,15.3,11.8),
('42125','Washington PA','Marcellus',208047,209778,28433,44392,53693,77487,10.5,9.4),
('54103','Wetzel WV','Marcellus',16435,14233,21653,28398,37969,53341,19.7,16.6),
('08123','Weld CO','Niobrara',258780,340711,25468,41661,57180,93287,14.7,9.0),
('48301','Loving TX','Permian',87,54,34068,86035,68750,51087,12.0,9.3),
('48317','Martin TX','Permian',4956,5230,20859,46701,42607,77083,15.8,8.1),
('48329','Midland TX','Permian',142289,171496,33672,48908,62993,93984,10.4,10.6),
('48389','Reeves TX','Permian',13775,13219,15467,24438,40571,56056,21.9,21.9),
('48461','Upton TX','Permian',3323,3227,22953,30320,51750,52321,17.1,17.1)
)
SELECT
  COUNT(*) AS n_counties,
  ROUND(AVG(100.0*(pop_2023-pop_2013)/pop_2013),2) AS avg_pop_growth_pct,
  SUM(CASE WHEN pop_2023 > pop_2013 THEN 1 ELSE 0 END) AS n_pop_grew,
  ROUND(AVG(100.0*(pci_2023-pci_2013)/pci_2013),2) AS avg_pci_growth_pct_nominal,
  ROUND(AVG(pov_2023 - pov_2013),2) AS avg_poverty_pp_change,
  SUM(CASE WHEN pov_2023 < pov_2013 THEN 1 ELSE 0 END) AS n_poverty_fell
FROM counties
query — 5 rows — 365 ms
WITH counties(county_fips, play, pop_2013, pop_2023) AS (VALUES
('38025','Bakken',3786,4043),('38053','Bakken',7377,14280),('38061','Bakken',8280,9567),('38105','Bakken',25024,39368),
('48127','Eagle Ford',10270,8507),('48255','Eagle Ford',14916,14819),('48283','Eagle Ford',6921,6946),('48311','Eagle Ford',616,623),
('42015','Marcellus',62624,59971),('54017','Marcellus',8213,7767),('42059','Marcellus',38362,35265),('42115','Marcellus',42948,38349),('42117','Marcellus',42267,41078),('42125','Marcellus',208047,209778),('54103','Marcellus',16435,14233),
('08123','Niobrara',258780,340711),
('48301','Permian',87,54),('48317','Permian',4956,5230),('48329','Permian',142289,171496),('48389','Permian',13775,13219),('48461','Permian',3323,3227)
)
SELECT play, COUNT(*) n, SUM(pop_2013) pop13, SUM(pop_2023) pop23,
  ROUND(100.0*(SUM(pop_2023)-SUM(pop_2013))/SUM(pop_2013),1) AS growth_pct
FROM counties GROUP BY play ORDER BY growth_pct DESC

Sources

  1. Census ACS 5-Year population by county, 2013 & 2023
    Show SQL
    SELECT county_fips, "year", total_population FROM census.acs_population WHERE county_fips IN (...) AND "year" IN ('2013','2023') AND geography='county'
  2. Census ACS 5-Year median HH income & per-capita income by county, 2013 & 2023
    Show SQL
    SELECT county_fips, "year", median_household_income, per_capita_income FROM census.acs_income WHERE county_fips IN (...) AND "year" IN ('2013','2023')
  3. Census ACS 5-Year poverty by county, 2013 & 2023
    Show SQL
    SELECT county_fips, "year", poverty_universe, below_poverty FROM census.acs_poverty WHERE county_fips IN (...) AND "year" IN ('2013','2023')
  4. BLS QCEW county employment & wages, all industries, 2013 & 2023 (21 counties and US total)
    Show SQL
    SELECT "year", SUM(annual_avg_emplvl), SUM(total_annual_wages) FROM econ.county_qcew WHERE industry_code='10' AND own_code='0' AND "year" IN ('2013','2023') GROUP BY "year"
  5. CPI-U deflator, 2013 to 2023
    Show tool call
    adjust_inflation(amount=1, from_year=2013, base_year=2023)
  6. Ohio River Valley Institute, "Appalachia's Natural Gas Counties" (Feb 2021)
  7. Federal Reserve Bank of Dallas, "GDP gain realized in shale boom's first 10 years" (2019)