Methodology

How we turn an announcement into a job estimate

Every number on this site links back here. This page explains, in plain language, where projects come from, how facts are extracted, how duplicate mentions become one project, and exactly how a job estimate is computed — including where we're confident and where we're not.

1. How we find projects

We poll a source registry (config/sources.yaml) rather than scraping arbitrarily — adding a new source is a YAML entry, not new code. The registry currently mixes three kinds of feeds:

We store the raw article text as collected and only filter/classify it downstream — nothing is discarded at ingest time because it looked irrelevant.

2. How facts get extracted

Each stored article is run through an LLM extraction step that pulls structured fields — company, project type, location, capex, power (MW), phase, and any job numbers the announcement itself claims — along with a confidence score for the extraction. Low-signal or non-announcement articles (e.g. unrelated news that merely mentions a keyword) are filtered out at this stage, not at ingest.

3. How duplicate mentions become one project

The same project is usually announced, re-announced, and covered by multiple outlets. We block candidate matches by county, then score them on a composite 0–1 basis blending company fuzzy match, project-name fuzzy match, and capex proximity (config/dedup.yaml):

Company match
weight 0.40
Project-name match
weight 0.35
Capex proximity
weight 0.25

Capex counts as a full proximity match within a 20% relative difference, decaying linearly to zero at 3x that tolerance (covering typical rounding across re-announcements, e.g. “$10B” becoming “$10.2B” in a later article). Missing fields on either side drop that component and renormalize the remaining weights, rather than penalizing to zero — many announcements omit a project name.

Scores ≥ 0.90 auto-merge into the existing project. Scores in [0.65, 0.90) are ambiguous — a new project is still created so the data isn't lost, but the match is queued to a review queue for human/LLM adjudication. Scores below 0.65 are treated as a genuinely distinct project. The thresholds are deliberately conservative: a false auto-merge silently corrupts the dataset, while a missed merge just creates a duplicate that review can catch later.

4. How job demand is estimated

Every demand number on this site carries a basis: claimed or modeled.

The ratios below are versioned and cited in config/ratios/v1.yaml. Entries marked NEEDS_HUMAN_SOURCING are extrapolated beyond what the working spec states outright and are flagged for replacement with real BLS/industry sourcing before being treated as authoritative — we show them anyway, with the flag, rather than hide the assumption.

Project typeConstruction ratioOps ratioBuild duration
Hyperscale data center
400 peak workers / $1B capex
spec §5.4: “~400 peak workers per $1B for data centers”
32 staff / 100 MW
spec §5.4: “~25–40 staff per 100 MW hyperscale” (midpoint used)
30 months
Colocation (colo)
400 peak workers / $1B capex
NEEDS_HUMAN_SOURCING — assumed same crew intensity as hyperscale per $1B; spec only states the hyperscale figure
28 staff / 100 MW
NEEDS_HUMAN_SOURCING — assumed slightly below hyperscale (less owner-operator headcount)
24 months
Chip fab
600 peak workers / $1B capex
spec §5.4: “higher [than data centers’ ~400/$1B] for fabs” — 1.5x multiplier used as a directional placeholder
60 staff / 100 MW
NEEDS_HUMAN_SOURCING — fabs are far more staff-intensive per MW (cleanroom + process engineering); spec only says “higher for fabs” with no figure
36 months
Power generation
350 peak workers / $1B capex
NEEDS_HUMAN_SOURCING — not spec-cited; placeholder below the datacenter figure (more equipment capex, less finish trade work)
15 staff / 100 MW
NEEDS_HUMAN_SOURCING — power plants typically run leaner permanent headcount per MW
30 months
Transmission
300 peak workers / $1B capex
NEEDS_HUMAN_SOURCING — not spec-cited; substation/line buildout is generally less labor-dense per dollar than vertical construction
8 staff / 100 MW
NEEDS_HUMAN_SOURCING — minimal permanent on-site staffing relative to generation or data center facilities
24 months
Other / unclassified
400 peak workers / $1B capex
NEEDS_HUMAN_SOURCING — falls back to the spec's datacenter figure as a neutral default
25 staff / 100 MW
NEEDS_HUMAN_SOURCING — falls back to the low end of spec §5.4's hyperscale range
30 months

Occupation split (hyperscale data center — construction phase)

Each phase's total headcount is divided across occupations by fixed fractions that sum to 1.0. The hyperscale-datacenter split (also reused, with small variations, for colo and the “other” fallback) is modeled on the spec's named occupations plus standard heavy-commercial-construction crew composition — NEEDS_HUMAN_SOURCING, not independently cited:

SOC codeOccupationFraction
47-2061Construction Laborers0.22
47-2111Electricians0.18
47-2031Carpenters0.12
47-2152Plumbers, Pipefitters, and Steamfitters0.10
49-9021HVAC Mechanics and Installers0.10
47-2073Operating Engineers0.08
11-9021Construction Managers0.06
47-2211Sheet Metal Workers0.05
47-1011First-Line Supervisors, Construction Trades0.05
49-9098Helpers — Installation, Maintenance, and Repair0.04

Known simplification: the operational-phase (permanent staff) headcount is split using the same construction trade-mix proportions as the build phases, because the ratio config doesn't yet have a distinct operational-occupation split. In reality, construction crews and a facility's permanent staff have different compositions — electricians dominate a build, while a data center's permanent staff skews toward technicians and network administrators. We flag this rather than silently assume it away; a future ratio-config revision will add a dedicated ops split.

5. Honest limitations

Massachusetts pilot

We're piloting this methodology in Massachusetts first — Holyoke's data-center development ban, the Westfield hyperscale campus, National Grid's transmission upgrades — before expanding source coverage and geocoding precision nationwide. The pipeline itself is not Massachusetts-specific; the current source registry and GDELT keyword set simply prioritize Massachusetts coverage during the pilot.