Part 8 of 9 in After You Call: A Deep Dive on Philly 311
Lower-Income Philly: Closed 311 Tickets Got 31% Real Action
In lower-income Philly zips, 31% of closed 311 tickets ended with real action; in higher-income zips, 57%. The 25-point gap is what 'closed' means.
Share of closed 311 tickets whose closure note records real action (verbs like resolved, completed, repaired, cleaned, removed, abated). The 25.5-pp gap between lower- and higher-income zips is the article. n = 20,926 lower-income, 30,876 middle-income and 15,531 higher-income closed tickets. Source: OpenDataPhilly public_cases_fc.
Picture a 311 user in Strawberry Mansion who calls about a chronic complaint on her block. Two months later, the ticket shows “closed,” with a note that the city “provided information,” and no record that any work was done.
“Closed” is the same word in every neighborhood. The work behind it is not. In Philadelphia’s lower-income zip codes, 31% of closed tickets end with the city actually dispatching a crew. In the higher-income zip codes, it’s 57%.
I worked through 69,135 closures from 2024 onward to find out what the word actually means, and what the gap is made of.
Most closed tickets in lower-income zips record no work
The table below breaks each tier’s closed tickets across the seven categories. Each row sums to 100%.
| Resolution | Lower-income zips | Middle-income zips | Higher-income zips | Lower − Higher |
|---|---|---|---|---|
| Action taken | 31.2% | 20.8% | 56.7% | −25.5 |
| Information only / no action | 57.5% | 67.2% | 25.5% | +32.0 |
| Out of jurisdiction / referred | 9.8% | 10.9% | 15.9% | −6.1 |
| Unable to locate | 0.8% | 0.6% | 1.6% | −0.8 |
| Aged out / no response | 0.4% | 0.2% | 0.1% | +0.3 |
| Cancelled | 0.1% | 0.2% | 0.1% | +0.1 |
| Duplicate | 0.2% | 0.1% | 0.2% | −0.0 |
n = 20,926 lower-income, 30,876 middle-income and 15,531 higher-income closed tickets with non-null status_notes, 2024-01-01 through 2026-06-08. Source: OpenDataPhilly public_cases_fc.
The two big columns are mirror images. In higher-income zips, the dominant closure is “Action taken” (56.7%): the city actually did the work. In lower-income zips, the dominant closure is “Information only / no action” (57.5%): the city called back, marked “Service Not Needed,” or scheduled an appointment. The action-taken gap is 25.5 percentage points.
Middle-income zips are the paperwork-heaviest of the three: 20.8% action taken, below the lower tier’s 31.2%. Income does not order these tiers; the mix of requests does.
Three closure types cover 96% of the closures
The 311 system uses a small fixed vocabulary of dropdown strings to record what the city did. I categorized 69,135 closures with an LLM using the full ticket context — service, agency, address, time-to-close, closure note. Nine categories fell out. Seven of them are in the table above; three of those cover 96% of the 69,135 closures I coded:
- Action taken: the city actually dispatched a crew and resolved the problem. Verbs like resolved, completed, repaired, cleaned, removed, fixed, filled, abated. This is what “closed” is supposed to mean. 21,761 tickets.
- Information only / no action: the city called back, told the resident something, scheduled an appointment, or marked the request “Service Not Needed.” No physical work was done. 36,748 tickets.
- Out of jurisdiction / referred: the city concluded the problem was somebody else’s. 7,886 tickets.
The slow category is also the no-action category
I also looked at how long each category takes to close. The fastest are “Out of jurisdiction / referred,” at a median of 0.54 days, where the city recorded the referral and moved on. “Action taken” tickets median 5.0 days.
I did not expect the no-action closures to be the slowest. They are, by a factor of fifteen: 78 days for “Information only / no action” versus 5 days for “Action taken.” A ticket closed with “Service Not Needed” or “Information Provided” sits open for more than two and a half months. It is meeting the procedural requirement: the ticket is closed.
The slowest closure type disproportionately applies to lower-income zips. The fastest one disproportionately applies to higher-income zips. A 311 user in Strawberry Mansion whose ticket ends in “Service Not Needed” waits more than fifteen times as long as one in Chestnut Hill whose ticket ends in “Issue Resolved,” and ends up with a different outcome.
Service by service, the two tiers close about the same
The 25-point citywide gap is broad enough to hide how it’s distributed across services. Here are the five top services by ticket volume, with the lower-vs-higher action-taken rate for each.
| Service | Action taken (lower) | Action taken (higher) | Gap (pp) | n |
|---|---|---|---|---|
| Abandoned Vehicle | 0.1% | 0.1% | −0.0 | 24,863 |
| Graffiti Removal | 91.7% | 83.9% | +7.8 | 19,810 |
| Street Trees | 4.3% | 6.5% | −2.2 | 9,536 |
| Homeless Encampment Request | 0.0% | 0.0% | −0.0 | 3,736 |
| Smoke Detector | 77.7% | 84.8% | −7.1 | 2,982 |
n = 24,863 abandoned-vehicle, 19,810 graffiti, 9,536 street trees, 3,736 homeless encampment and 2,982 smoke detector closed tickets across the five top-volume services.
Graffiti Removal is the surprise: the sign of the gap is the opposite of the citywide pattern. Lower-income zips get 91.7% action-taken; higher-income zips get 83.9%. It is the only one of the five services that separates the two tiers in the other direction. My read: graffiti is a category the city has explicitly resourced. The Community Life Improvement Program (CLIP) runs a dedicated removal unit.
Abandoned Vehicle is nearly all paperwork. It routes through the Police Department, and 99.7% of those tickets in lower-income zips close as “Information only,” the same share as in higher-income ones. The city tells the resident something (often a code-enforcement timeline) and moves on. The 311 system wasn’t built to dispatch crews on it. Smoke Detector, the fifth service in the table, runs the other way: 77.7% of lower-tier and 84.8% of higher-tier tickets close with the work actually done.
Homeless Encampment Request is the cleanest case of “not our job.” The Office of Homeless Services does the outreach; 311 routes the request, and 100% of lower-tier tickets close as “Out of jurisdiction / referred,” as do 99.9% of higher-tier ones. The system is being used to ask the city for something it has explicitly said it does not do. Street Trees shows a similar pattern: Parks and Recreation handles city-property trees, PennDOT handles state-road trees, the property owner handles the rest. 37.0% of lower-tier and 39.8% of higher-tier tickets get referred.
Lower-income zips ask for things the city says it does not do
I’m reading the city’s own dropdown vocabulary, so any errors in its coding are inherited. The tier differences are not noise.
The mix of services each tier calls 311 for differs, and most of the 25-point gap is that mix, not how the city handles calls within a service. The per-service table shows within-service action-taken rates mostly the same or flipped (graffiti, 91.7% vs 83.9%; abandoned vehicle nearly all paperwork in both). An earlier article in this series found the same for wait times — 76% mix, 24% within-service rate.
That’s not a defense of the system. It’s a sharper indictment. The reason the 25-point gap exists is that the city’s portfolio routes lower-income requests to services the city has said it does not do: Homeless Encampment (100% referred in lower-income zips), Abandoned Vehicle (99.7% information-only), Street Trees (37.0% referred). Within a service, the closure rates are the same in both tiers. The portfolio is the problem.
What I found, putting the decomposition aside: in the poorest zip codes, only 31% of closed tickets ended with the city actually doing the work. In the wealthiest, 57% did. Both got the same status. The closures look very different.
"Closed" is not equally closed for all
The 311 system reports publicly its "closed" rate as a success metric. And sure, a blended closed rate is not great at face value, but at least closed means it's done right? Instead, and quite sadly, my research revealed that not only does closed actually mean seven completely different things, the quality of how "closed" something is varies with how rich you are. Maybe only the rich deserve closure?
Notes, Sources, and Methodology
Data from OpenDataPhilly’s public_cases_fc 311 Service Requests table, 2024-01-01 through 2026-06-08: closed tickets with a non-null status_notes, excluding Information Requests, across the 43 Philadelphia zip codes that have an ACS income value — 73,100 closure notes. An LLM coded 69,135 of them into nine categories using the full ticket context; an independent regex pass agreed on 97.3% of closures.
Income tiers are quartiles of ACS 2022 five-year zip-code median household income: the ten lowest zips lower, the ten highest higher, the twenty-three in between middle. The headline table drops 1,771 “Unable to determine” and 31 “Unfounded” closures and re-normalizes the rest per tier; the tier difference is far larger than chance (χ² = 7,928 on the 3 × 8 tier-by-category table, dof = 14). The 311 table is live, so a fresh pull will not reproduce these numbers exactly.
https://nickjain.com/blog/311-closed-means-different-things-by-zip