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:
- Tract categories (always shown): crossover, Track 1 top 75, Track 2 DC top 50, Track 2 GEN top 50, other eligible (greyed)
- Rail overlays (4 systems): Amtrak / SEPTA RR / SEPTA Urban / PRT, each with line + station dots
- District overlays (4 layers): County boundaries (66), Municipalities (2,572), PA House (203), PA Senate (50)
- District filters (3 dropdowns): tracts outside the selected district dim to opacity 0.08
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 |