When 311 Closed Your Ticket, Did Anything Actually Get Done?
The reader’s version of Lower-Income Philly: Closed 311 Tickets Got 31% Real Action, and the companion to Poor people wait ~1.5x longer for service through Philly 311
Pick a ZIP, a service, or an agency — or leave them all alone and see the city as a whole.
Action taken on 32.3% of 67,333 classifiable closures — 2.5% too ambiguous to code, 5.4% never coded. Under this filter, lower-income ZIPs get real action on 31.2% of classifiable closures and higher-income ZIPs on 56.7% — a gap of 25.5 points.
Action taken, by ZIP
The share of classifiable closures whose note records real work. Darker means the city closed more tickets without doing anything. Click a ZIP to select it.
What the closure note said
The mix for this selection against the same filter applied to lower-income and higher-income ZIPs. Every segment is a share of that row’s own closures, so the rows sum to 100%.
Notes, Sources, and Methodology
Closure notes come from the OpenDataPhilly 311 Service Requests table public_cases_fc, requests filed from January 2024 through June 8, 2026, closed only, with Information Requests excluded. Each note was read by a language model and given one of nine labels — action taken, information only, referred, unable to locate, aged out, duplicate, cancelled, unable to determine, or unfounded — across 73,100 closures with a note in an income-mapped ZIP code. Income tiers are quartiles of ACS 2022 five-year median household income across the 43 ZIP codes with a value: the bottom ten are the lower tier, the top ten the higher tier, the 23 in between the middle, with no dollar cutoffs.
The denominator. The headline share is a share of classifiable closures: the two labels whose notes cannot say whether work was done are set aside, and the tool shows that share beside the number rather than hiding it. Tickets that were never coded at all are carried as their own outcome, so every segment of the outcome mix sums to 100% of the selection. The share that is set aside is not the same in every tier, which is why dropping it changes the size of the gap rather than just its rounding.
Limitations. The outcome mix tracks which services people file, not only who lives where. Abandoned Vehicle is 99.7% information-only in lower-income ZIPs and 99.8% in higher-income ones, so a ZIP that files a lot of abandoned-vehicle tickets looks bad on the action rate regardless of how rich it is. Graffiti Removal runs the other way: 94.5% action taken in lower-income ZIPs against 89.0% in higher-income ones, both as shares of classifiable closures. That is why the service filter is not an extra — it is the difference between a real signal and a composition artifact. Read which complaints people file and how the gap breaks down by agency.
What is not here. Five Philadelphia ZIP codes have no ACS income value, so they have no tier and they are not on the map: 19104, 19109, 19112, 19119 and 19129. Nothing else is silently dropped — every closure in the cohort is in the tool.