Poor people wait ~2x longer for service through Philly 311

311 is Philadelphia's equalizer — one number, same service for everyone. So why do poor neighborhoods wait 50%-300% longer?

311 Response Time by Philadelphia Zip Code
Loading map...

Interactive map — hover over each zip code to see median wait time. Source: OpenDataPhilly 311 Service Requests (2024-2025), n=466,114 requests after filtering.

311 is the city's main customer service line. You call one number, you get one response. That's the promise — the same service, at the same cost, no matter where you live in the city.

But the data shows something different. When you call 311 to report a missed trash pickup, a pothole, or a street light out in Center City — zip codes 19103 or 19146 — the median response time is about 4-5 days. When you make the same call from North Philadelphia (19132) or Kensington (19134), the median wait is 7-9 days. From Elmwood (19142), it's 18 days. That's not a typo. Eighteen days to address a sanitation complaint, compared to 4 days just across town.

The data comes from OpenDataPhilly — 466,000 service requests from 2024-2025 with both an SLA promise (service_notice) and an actual close date. I excluded cases pending longer than 365 days to focus on typical turnaround times while avoiding cases that skew averages due to extreme delays unrelated to operational factors. When you break it down by zip code, the pattern is unmistakable: lower-income neighborhoods wait nearly twice as long as wealthy ones.

7.4 days
Lower-income zips median wait
4.8 days
Higher-income zips median
2.6 days
Extra wait in poorer areas

I've seen this firsthand. For two years I lived at Sedgley and Ridge in 19121 — Strawberry Mansion, right next to where then-Council President Darrell Clarke had his offices. For those who don't know, Strawberry Mansion is one of the poorest Philadelphia neighborhoods, with decades of housing abandonment and city-side neglect in its recent past. Right next door to where I lived sat an abandoned house. The roof had already caved in. Vines were growing out of every window. Wild cats lived inside. The backyard was so overgrown with vines that I had to take a machete to it once a year just to keep the back alley escape route open — the one an entire block relied on. L&I had boarded up the front door before I moved in and left it that way for years. But what worried me most was the 40-foot tree growing wild in that backyard — leaning hard toward my house and the neighbor's. I called 311. Explained the danger. They didn't get back to me for two months. And then only after I filed the same report a third time.

They ultimately couldn't do anything. Pennsylvania law, apparently, won't let the city touch a property until a tree actually falls and damages something. Then — and only then — you can sue the owner. A strange rule, especially for properties already condemned. This one happened to be on Mayor Parker's list of abandoned houses slated for demolition in North Philly. The city knew about it. The city had plans for it. But the bureaucracy that decides whether a leaning tree is an emergency and the bureaucracy that's supposed to demolish blighted houses don't talk to each other. So I kept watching.

The Numbers

Here's what I can hear someone saying: maybe lower-income neighborhoods just file more 311 requests, and the system is overwhelmed. Maybe that's the explanation. The data cannot determine whether operational capacity fully explains the gap, but with 466,000 service requests across 46 zip codes, the observed difference between lower-income and higher-income median wait times (7.4 days vs. 4.8 days) produces a p-value well below any conventional threshold[1]. Chance is an implausible sole explanation.

The scatter plot adds another layer: zip codes sorted by median household income from US Census data show a clear negative trend — richer zips get faster service. One possible explanation is resource allocation — the city simply deploys more crews to wealthier areas. Another is geographic clustering. Another is historical routing based on response time targets that advantage already-served areas. The data is consistent with wealth-based differences. The data cannot determine which mechanism dominates.

What's Next

This is a topic that interests me, and the data is rich. There are several angles I haven't touched: what kinds of requests each neighborhood makes (a pothole and a condemned building aren't the same thing operationally), how often requests actually get closed versus left open or dismissed, and which city departments account for what share of the gap. I intend to write more on each.

A few things I'm working on but haven't published yet:

  • Are poor neighborhoods waiting longer for the same things, or asking for different (harder) things? Compare wait times within each service category — potholes in 19142 vs. potholes in 19103, head to head — to see how much of the gap is composition vs. delivery.
  • What fraction of tickets are simply never closed? A non-trivial share of 311 requests are still listed as "Open" months or years after they were filed. Are some neighborhoods disproportionately likely to have their requests just sit there?
  • When the city closes a ticket "without action," whose tickets are those? The 311 data has free-text status notes. Mining them reveals whether some neighborhoods' complaints are disproportionately dismissed as duplicates, unable to locate, or otherwise not addressed.

I also want to be upfront that the correlation in this article has alternative explanations. One is that poorer neighborhoods generate harder requests (illegal dumping cleanups, abandoned property issues) that take longer to close regardless of where they sit. Another is that the city routes crews based on travel time or historical patterns, not just current need. I'll test these in future analyses. I don't know which way the answers will come out — that's part of the fun of digging into a dataset without a political agenda in mind. The saying goes, the truth shall set you free.


[1] Methodology:

  • Data sources: 311 service requests from OpenDataPhilly (table public_cases_fc, via the CARTO SQL API), and zip-code-level median household income from the US Census Bureau's 2022 five-year estimates.
  • Time window: Requests submitted on or after 2024-01-01 that have both a target close date and an actual close date.
  • What I dropped: Rows with no zip code, no close date, negative wait times (data-entry mistakes), or wait times over 365 days (so the comparison reflects typical service, not the long tail of forgotten reports).
  • Income tiers: "Lower-income" zip codes have a median household income below $35,000; "higher-income" ones above $65,000. Fourteen lower-income and ten higher-income zip codes passed the minimum-volume threshold; the rest were left out.
  • Wait time: Calendar days from request to close, using the median (the middle request) per zip code. A few extreme delays can't distort the median the way they would an average.
  • Statistical comparison: Standard tests confirm the gap between groups is too large to be random chance. That proves the difference is real — not what causes it.
  • What this can't tell you: Volume, service mix, and crew dispatch patterns are all plausible explanations; the data can't pick a winner.

Replicating the data pull: The query below returns the same starting table — about 466,000 rows from 2024-01-01 onward with zip codes and close dates required. Run it against https://phl.carto.com/api/v2/sql, OpenDataPhilly's CARTO endpoint. The 365-day cap, the income bucketing, and the median (not average) calculation all happen after the pull.

SELECT zipcode, service_notice, service_name,
       requested_datetime, closed_datetime,
       expected_datetime, status
FROM public_cases_fc
WHERE requested_datetime >= '2024-01-01'
  AND zipcode IS NOT NULL
  AND zipcode != ''
  AND closed_datetime IS NOT NULL
ORDER BY requested_datetime;