PA OZ 2027 — Methodology (v1.4)

Project: Statewide ranking of Pennsylvania census tracts for the OBBB Opportunity Zone designation round — Philadelphia County excluded (see BPN's Philly memo for Philadelphia recs). Universe source: IRS Rev. Proc. 2026-14 Appendix (xlsx, published 2026-04-06). Census basis: ACS 2020–2024 5-year (matches IRS); TIGER 2020 tract polygons. Built by: Build Philly Now Research, May 2026.


1. Universe construction

The IRS Appendix lists 25,332 US tracts eligible for 2027 QOZ designation. PA: 866 tracts total. 218 are in Philadelphia County and are excluded from this analysis — defer to BPN's standalone Philly memo for those.

This analysis ranks the 648 non-Philadelphia eligible tracts (374 non-rural, 274 rural-flagged).

We attached to each PA tract: - Geometry (TIGER 2020) - ACS 2020-2024: median family income, poverty rate, total population - CBSA membership; metro MFI (B19113) for the proper OBBB denominator - IRS eligibility flag and rural flag - Municipality (TIGER COUSUB), PA House district (TIGER SLDL), PA Senate district (TIGER SLDU)

Master file: data/master_tracts.geojson (3,446 PA tracts including Philly; the rankings below operate only on non-Philly eligible).


2. Track 1 — TOD of all kinds (urban / suburban / Pittsburgh corridor)

Filter: non-Philly LIC-eligible tracts within 2 mi of any rail transit station in PA.

Station set (415 total stations):

System Stops included Notes
Amtrak (intercity) 20 confirmed Keystone (11) + Pennsylvanian (8) + Lake Shore Limited (1). Proposed Scranton-NYC stops excluded (platform locations TBD by PennDOT/Amtrak).
SEPTA Regional Rail 103 (non-Philly) All 13 lines; stops in Bucks, Chester, Delaware, Montgomery counties — Philly stops spatially excluded.
SEPTA Urban Rail 188 (non-Philly) MFL (69th St Terminal area, Delaware Co), NHSL (Upper Darby → Norristown entirely outside Philly), Trolleys 101/102 (Delaware Co Media/Sharon Hill branches), T-trolley western termini (Darby/Yeadon).
PRT (Pittsburgh) 104 T light rail (BLUE/RED/SILVER) plus Duquesne Incline + Monongahela Incline.

Candidate set: 174 eligible tracts within 2 mi of any station.

5-pillar composite (v2.1) — adjustable in the browser via sliders + 3 strategy presets ("Walkable" / "Balanced" / "Industrial"). Each pillar is a percentile rank of one or more underlying signals.

Pillar Default weight What's in it Sources
🚶 Walkable urbanism 25% 0.50·transit walkshed (S1) + 0.25·building density (S2) + 0.25·pre-1940 housing share (S3) TIGER + Amtrak/SEPTA/PRT GTFS + Microsoft USBuildingFootprints + ACS B25034
💼 Jobs access 20% Sum of jobs (LEHD WAC C000) within 5 mi of tract centroid LEHD LODES8 WAC PA 2022
📊 General market 20% Mean pct_rank of: STIP projects in county, RACP awards in county (2018+), Main Street Matters within 5 mi, PHFA LIHTC within 5 mi PA STIP + RACP + DCED MSM + PHFA
🏭 Industrial capex 15% Mean pct_rank of: PA SITES within 5 mi, PJM Ready-to-Build in county, hand-curated DC targets within 5 mi DCED PA SITES + PJM + user-curated DC list
⚡ Energy infrastructure 20% Distance + voltage to nearest transmission line, OSM substation, EIA-860 operating plant (statewide, all 648 eligible tracts) HIFLD + OSM + EIA-860

Strategy presets:

Preset 🚶 💼 📊 🏭 ⚡
Walkable urbanism 50% 25% 20% 5% 0%
Balanced (default) 25% 20% 20% 15% 20%
Industrial / Energy 5% 10% 15% 35% 35%

Why these pillars (not 3, not 8): Three pillars hid the difference between "OZ as TOD investment" vs "OZ as industrial/energy capex." Eight signals were too granular. Five pillars cleanly express two competing strategies (walkable urbanism vs rural industrial) plus jobs and general market as connective tissue.

Pittsburgh permits dropped: Earlier versions used WPRDC PLI permits as an S4 sub-signal. Removed in v2.1 because no equivalent feed exists for Lancaster, Harrisburg, Erie, Allentown, etc. — including Pittsburgh-only gave an unfair advantage to one city. Housing-pipeline coverage is now via statewide PHFA LIHTC (real awards with addresses); county-level construction proxy is STIP.

Composite: rank-percentile mean across the 5 signals (NULLs skipped). Tracts with >1 NULL signal flagged data_limited. With S5 covering all tracts and S4's planned-projects component covering most, 0 candidates were flagged data-limited.

S3 caveat. Brief specified "count of pre-1940 commercial parcels via PASDA county assessor data" — heterogeneous across PA's 67 counties; commercial year_built isn't publicly queryable. ACS B25034 pre-1940 housing share is the uniform statewide proxy. NRHP point + district counts are retained as context columns in the output CSV (not in the composite) for analyst use.

S4 caveat — county-level signals. STIP, RACP, and PJM are aggregated to the tract's COUNTY (none have lat/lng). All tracts in the same county get the same STIP/RACP/PJM signals; these establish a "this county has investment momentum" floor. Tract-level differentiation within a county comes from DC targets (5-mi radius), permits (Pittsburgh only), and the other four signals (S1, S2, S3, S5). v2 could add tract-level geocoding for STIP projects (state route + section → road segment) but that's substantial work.

S4 caveat — what's still missing. PHFA / LIHTC housing pipeline, IIJA federal infrastructure, DCED/ARC awards, major announced industrial site selections. These remain blind spots in S4.

S5 caveat. "Jobs within 5 mi" is an approximation of jobs access. A proper transit-routing-based score (like DVRPC's 30-min transit-accessible-jobs for SEPTA stations) would be more accurate but requires GTFS routing across multiple agencies for the whole state. The 5-mi-buffer LEHD measure is uniform statewide and a defensible v1 baseline.

S4 caveat. Per the NULL-where-unavailable rule. 147 candidates have S4 NULL but still have S1+S2+S3 — scored on 3 signals (NOT flagged data-limited; >1 NULL threshold).

Composite: rank-percentile mean over available signals, 0–100. 0 candidates were flagged data-limited.

Top 75 by composite, distribution by system: - Amtrak: 33 - SEPTA Regional Rail: 21 - SEPTA Urban (MFL/NHSL/trolleys): 14 - PRT: 7

Outputs: data/track1_top75.csv · data/track1_rankings_full.csv.


3. Track 2 — Rural energy / data-center (v1.3, all 6 signals)

Filter: IRS rural-flagged AND non-Philly LIC-eligible. 274 tracts.

Signals: S5 transmission, S6 substations, S7 PJM Ready-to-Build queue (county-level), S8 ACS broadband (proxy), S9 PA DEP PWS service area, S10 EIA-860 operating generation. Brief's original weights.

Outputs: data/track2_top50_dc.csv, data/track2_top50_gen.csv, data/track2_rankings_full.csv.


4. Crossover tier

Definition: Tracts that are BOTH (a) IRS rural-flagged AND (b) within 2 mi of any TOD station. 21 tracts, all on the Pennsylvanian Amtrak line (Altoona/Blair, Johnstown/Cambria, Lewistown/Mifflin). The SEPTA/PRT TOD additions did not add new crossover tracts because no PRT-served Allegheny tracts and no SEPTA-suburb tracts are IRS rural-flagged.

Output: data/crossover_tier.csv.


5. Validation against user-supplied DC list

35 proposed/active PA data-center projects geocoded to municipality centroids. 3 sit in IRS-eligible rural-flagged tracts (Panther Creek/Carbon, Project Hazelnut/Luzerne, West Hazleton/Luzerne); 32 in non-LIC tracts. Track 2 v1.3 surfaces 1 of 3 in DC-tilted top 50, 2 of 3 in GEN-tilted top 50. Full overlap analysis: data/dc_targets_geocoded.csv.


6. Map layers

The interactive map supports toggleable layers and filters:

Click any tract for a popup with all rank columns, signal raw values, demographics, and the tract's municipality / PA House / PA Senate.


7. Known v2 refinements

Topic v1 state v2 plan
Pre-1940 commercial parcels (Track 1 S3) ACS B25034 housing proxy County-by-county PASDA assessor pulls
City permits (Track 1 S4) Pittsburgh WPRDC only Add Lancaster, Harrisburg, Erie, Allentown, Chester County boroughs
HV substations (Track 2 S6) HIFLD 55-station subset PJM substation registry, PA PUC, OSM power=substation
Fiber availability (Track 2 S8) ACS B28002 broadband-subscription proxy FCC BDC fiber-availability dataset
Proposed Scranton-NYC stations Excluded Re-add with confirmed PennDOT/Amtrak platform coords
Weight sliders on map Static visualization Dynamic re-computation in browser

8. Reproducibility

All raw inputs cached in data/raw/ with timestamped filenames. Processing scripts in scripts/:

Script Purpose
step1_universe.py Build master_tracts.geojson universe
step2_track1_*.py Original Amtrak-only Track 1 (superseded by step5d)
step3_dc_geocode.py Geocode user's DC targets list
step3_track2_fetch.py Fetch HIFLD, EIA-860
step3b_pull_pws.py Pull PA DEP PWS service areas
step3_track2_score.py Track 2 6-signal scoring + composites
step4_crossover.py Original crossover (superseded by step5d)
step5d_consolidated_build.py Track 1 TOD expansion + drop Philly + emit web/index.html with overlays