scroll · 2026-05-13 · ~5 min · live data

Trash in transit

Two of Philadelphia's waste-related 311 categories — illegal dumping and missed rubbish/recyclable collection — leave very different fingerprints on the map. Roughly 48,408 dumping reports and 80,658 collection complaints since 2024-01-01, mapped together.

Two of Philadelphia's most spatial 311 categories are about waste, but they describe two very different failure modes. Illegal Dumping is what residents file when someone drops a couch on a vacant lot, dumps a load of construction debris in an alley, or empties a truck of yard waste behind a closed business. Rubbish/Recyclable Material Collection is what they file when the city's regular pickup misses their bin. The first is about where people put waste they shouldn't. The second is about where the city's pickup system breaks down.

Where the couches land 🗑️

Illegal dumping concentrates along the river-adjacent industrial belt — the Kensington / Port Richmond corridor — and bleeds into the vacant-lot zones of North Philadelphia. These are the blocks where the cost of a legal disposal is highest relative to the chance of getting caught: out-of-the-way lots, dead-end streets, lightly-trafficked alleys.

Each fluoro dot is a ~500m hex bin. Bigger means more dumping reports filed against an address in that cell since 2024-01-01.

Where the pickup misses ♻️

Missed-collection complaints sit on a completely different geometry. They spread evenly across residential street grids — Northeast Philly, West Philly row-house blocks, the Northwest — because they ride the trash truck's route, not the dumper's. A missed bin is a fact about routing, scheduling, or staffing. A dumped couch is a fact about disposal economics.

Cobalt dots, same ~500m hex grid. The two patterns are spatially distinct: dumping concentrates, collection diffuses.

The same city, two failures

Auto-cycling between dumping in front, collection in front, and both stacked. The contrast is the point — collection's residential blanket sits over almost everywhere people live, while dumping's bright spots punch through in a tight set of corridors.

Where they overlap is interesting but not causal: a missed pickup and an illegal dump in the same hex don't share a block, a week, or a household. The overlap is spatial co-occurrence in two complaint streams.

Which complaint owns each cell

Joining the two feeds onto a shared coarse grid (≈500m a side) and asking, per cell, which complaint stream is louder: fluoro means dumping dominates, cobalt means missed collection dominates. Cells where the two are within three reports of each other are omitted as noise.

The resulting map is two-toned, not blended. Dumping cells cluster tightly along the industrial belt. Collection cells fan out across the row-house neighborhoods. The in-between zones — Center City, the universities, parts of West Philadelphia — drop out either because complaints balance or because counts fall under the hex threshold.

Densest dumping-skewed cell: +278 net reports. Densest collection-skewed cell: -298 net reports.

loading map…

🗑️ Illegal Dumping · where residents report unauthorized disposal

Illegal Dumping Rubbish/Recyclable Collection

What overlap doesn't prove

It's tempting to read the overlap as a feedback loop: missed pickups beget illegal dumping, or vice versa. The data on this page can't show that. Two complaints that share a 500m hex are not the same incident, the same block, or even necessarily the same week. The overlap is spatial co-occurrence — meaningful as a description of the city, but not enough to claim a pipeline between the two. A causal version of this story would need parcel-level address matching (the addresses on the two complaints are typically reported by callers, not geocoded from a fixed lookup) and time-series controls for reporting rate by neighborhood. Neither is shown above.

Data Sources

Primary dataset: Philadelphia 311 service-and-information requests (public_cases_fc) via phl.carto.com. Calls since 2024-01-01, frozen at deploy (2026-05-13).

Queries: VIEWS.hexMap with since = '2024-01-01' and category = 'Illegal Dumping' for the fluoro dumping layer, and the same view with category: 'Rubbish/Recyclable Material Collection' for the cobalt collection layer. Both defined in src/lib/data/datasets/philly-311.ts. The hex grid is ~500m a side; HAVING count(*) > 5 drops singleton bins, so the captured totals are less than citywide totals by construction. The "which dominates" beat joins both feeds onto a 1/200° grid and renders delta = dumping − collection in diverging mode, dropping cells with |delta| < 3.

Methodology & caveats: Call locations come from the address logged with the ticket, not a geocoded incident — see the caveat box above. Two complaints sharing a bin are not the same incident, the same block, or even the same week; the overlap is spatial co-occurrence, not a pipeline between the two categories. A parcel-level join + a time-series control for reporting rate by neighborhood would be needed to upgrade co-occurrence to causation; this story does neither. For the full caveat list, see how we read the data.