Stations and zips: who PFD answers to
128,420 dispatches, 69 active stations, 13 battalions. The geography of who answers what, and where the calls actually land.
Start with the bones. Philadelphia is divided into 13 fire-department battalions — the operational geography that decides which house rolls first on any given alarm. Each battalion is a chief, a portfolio of stations, and a chunk of the city's incident load.
On the map, the ink polygons trace those boundaries. They don't follow zip codes and they don't follow neighborhoods. They follow staffing.
Inside the battalions: 69 active stations, each housing a mix of apparatus — engines, ladders, the chief's rig, frequently a medic unit, a long tail of specialty rigs (PIPE, foam, hazmat, marine). Hover any cobalt dot for what's parked there.
Stations are roughly evenly distributed by area. The next two beats show why that "roughly" hides everything that matters.
Now the call load. Brick bins land on the zip-code centroids; radius scales with how many PFD dispatches that zip generated since 2024. Center City and Northeast disappear into the noise. The river-ward zips and a band across North Philly swell.
128,420 dispatches across 48 zips. The volume isn't spread evenly across geography — it's spread evenly across area, which is a very different thing.
Filter to the 10 busiest zips. Out-of-top-10 fades back; the bars below slide into a tight ranking. 52,072 incidents — the lion's share of all PFD work — fall in just these ten.
The fire-only ranking from Where Philly burns had 19134 on top with 3,129 structural fires. Look at the top-10 here and you see the same zip name in the same place — Kensington isn't just leading on fires, it's leading on every kind of dispatch.
Now flip the view: instead of zips, weight each station by the load of the zips nearest it. The cobalt dots resize. Stations buried in a single dense zip swell; stations in low-density Northeast Philly shrink. The top-10 busiest stations absorb roughly 48% of all PFD dispatches.
The "busiest station" approximation is centroid-to-nearest, not first-due assignment — see the data caveat above. But the shape holds even at the rough end of the proxy.
Profiles · the four busiest neighborhoods
Counters tween from zero on first paint so the cards feel built-up, not stamped. The numbers themselves are frozen at deploy.
North Philly
19121
- PFD dispatches
- 27,082
- Share of all
- 21%
West Philly
19104
- PFD dispatches
- 22,250
- Share of all
- 17%
Northeast Philly
19124
- PFD dispatches
- 20,697
- Share of all
- 16%
Center City
19107
- PFD dispatches
- 17,014
- Share of all
- 13%
Data Sources
Primary datasets: Philadelphia Fire Department stat360_fire_incidents, Fire_Dept_Facilities, and FIRE_BattalionBoundaries — all ArcGIS Feature Services. Frozen at deploy (2026-05-13); the live Philly Fire dataset shell stays current.
Queries: incidentsGroupByUrl('postal_code', …) for the all-dispatch and fire-only zip
rolls, facilitiesUrl() for the station markers, and battalionsUrl() for the seven battalion polygons. Defined in src/lib/data/datasets/philly-fire.ts. Neighborhood rollups via src/lib/data/static/philly/zip-to-neighborhood.json.
Methodology & caveats: Station-load is approximated via centroid-to- nearest spatial join because PFD's published incident layer omits per-incident station and apparatus columns — see data we'd like to find for the gap and where to look. "Busiest neighborhood" cards use the same zip→neighborhood lookup as the maps; ties broken by total dispatches.