Chicago potholes over time
What the City’s own records show about pothole reports, how long they take to close, and how much patching gets done.
In 2025, Chicago’s 311 system received 20,911 distinct pothole reports and took a median of 14.9 days to close one; 71.2% of completed reports had a recorded patch, and crews recorded filling 248,541 potholes.
Reports measure attention; fills measure work. Neither measures pavement. No figure on this page is adjusted for winter severity.
01 Explore the map
77,274 figuresPick a layer and a year. The map and the sorted list beside it show the same figures, so you can see where an area sits and how far apart two areas really are.
How to use the map
- Layers: Reports is what residents and ward offices told 311. Response time is how long 311 took to close a report; its patch measures are the same closing time for the reports that have a patch record, because the patch is logged when the report closes. Filled is the per-block count crews enter. Alleys is the separate alley request type.
- Color: five frozen classes, palest to darkest. The direction words sit at each end of the legend ramp, because darker does not always mean worse. Hatched areas are not shown — too few records for a stable figure — and the list still gives their record count.
- The sorted list: each row carries a dot on a shared axis, so the gap between two areas is visible rather than inferred from color. Click either the map or a row; both highlight. Esc clears.
- Years: the period buttons switch the whole view. Full years compares complete calendar years; Jan 1–Aug 31 compares the same months in every year, which is the only fair way to read 2026.
- Wards: boundaries changed on 2023-05-15. Earlier years are drawn on today’s map for comparison, with a banner saying so and an optional overlay of the old lines.
- Hover for the standing figures: pointing at any area on the map or in the list shows its reports, the share still open, the median days to close and the median days to a patch — whichever layer is on, because those are the questions that do not change when the color does.
- 2019 is not on the map. It was the first full year of the current 311 system and its records are misallocated at several times the later rate. It stays in the download.
- Keyboard: the map is one tab stop and arrow keys walk the areas in list order. The list is a listbox with type-ahead. “View as table” opens the same figures as a real table.
77 community areas · 50 wards · 77,274 published figures · 2020 to 2026-08 on the map, 2019 to 2026-08 in the download
More reports per street mile is not more potholes per street mile, and a closed 311 report is not a patched pothole. Reports measure attention; fills measure work. Neither measures pavement.
Community-area table, 2025
| No. | Community area | Reports | Reports per street mile | Median days to close | Reports with a recorded patch | Potholes filled per street mile |
|---|---|---|---|---|---|---|
| 1 | Rogers Park | 339 | 9.11 | 7.2 | withheld (n = 333) | 100.93 |
| 2 | West Ridge | 455 | 6.11 | 7.8 | withheld (n = 448) | 60.18 |
| 3 | Uptown | 341 | 8.57 | 9.0 | 87.6% | 89.55 |
| 4 | Lincoln Square | 402 | 8.68 | 5.2 | 77.4% | 70.47 |
| 5 | North Center | 416 | 9.33 | 9.2 | 79.4% | 85.29 |
| 6 | Lake View | 551 | 8.04 | 9.9 | 81.5% | 68.92 |
| 7 | Lincoln Park | 662 | 10.59 | 9.8 | 75.5% | 104.54 |
| 8 | Near North Side | 489 | 7.61 | 9.9 | 60.2% | 43.42 |
| 9 | Edison Park | 147 | 5.43 | 25.0 | 81.6% | 73.10 |
| 10 | Norwood Park | 512 | 5.42 | 45.8 | withheld (n = 502) | 75.91 |
| 11 | Jefferson Park | 273 | 5.31 | 56.9 | withheld (n = 262) | 46.97 |
| 12 | Forest Glen | 348 | 5.87 | 29.9 | 58.9% | 67.27 |
| 13 | North Park | 291 | 9.47 | 14.0 | 76.3% | 91.41 |
| 14 | Albany Park | 431 | 9.86 | 33.8 | 63.5% | 71.75 |
| 15 | Portage Park | 572 | 6.47 | 36.0 | 76.9% | 53.17 |
| 16 | Irving Park | 487 | 6.99 | 40.8 | 76.5% | 66.46 |
| 17 | Dunning | 304 | 4.08 | 39.0 | withheld (n = 295) | 51.74 |
| 18 | Montclare | 135 | 6.72 | 42.1 | 61.5% | 72.03 |
| 19 | Belmont Cragin | 496 | 6.11 | 47.9 | 76.5% | 56.26 |
| 20 | Hermosa | 127 | 5.11 | 50.9 | 81.1% | 39.98 |
| 21 | Avondale | 246 | 5.85 | 28.3 | 76.6% | 71.69 |
| 22 | Logan Square | 531 | 6.29 | 32.6 | 72.4% | 57.01 |
| 23 | Humboldt Park | 278 | 3.90 | 52.2 | 66.9% | 26.22 |
| 24 | West Town | 784 | 7.60 | 27.9 | 78.3% | 52.54 |
| 25 | Austin | 542 | 3.94 | 44.9 | 62.0% | 29.45 |
| 26 | West Garfield Park | 129 | 4.21 | 69.7 | 62.5% | 26.13 |
| 27 | East Garfield Park | 165 | 3.79 | 40.5 | withheld (n = 163) | 19.32 |
| 28 | Near West Side | 660 | 5.59 | 32.1 | 56.5% | 43.48 |
| 29 | North Lawndale | 214 | 3.15 | 50.8 | 54.5% | 21.03 |
| 30 | South Lawndale | 289 | 4.55 | 22.4 | 68.3% | 46.99 |
| 31 | Lower West Side | 238 | 5.08 | 31.8 | 62.5% | 46.51 |
| 32 | Loop | 333 | 9.69 | 5.9 | 51.2% | 65.71 |
| 33 | Near South Side | 129 | 4.54 | 15.9 | 61.7% | 62.60 |
| 34 | Armour Square | 93 | 4.60 | 13.0 | 68.8% | 64.92 |
| 35 | Douglas | 50 | 1.56 | 19.4 | 54.0% | 37.85* |
| 36 | Oakland | 39 | 3.48 | 48.8 | 82.0% | 58.75 |
| 37 | Fuller Park | 46 | 3.42 | 8.9 | 71.7% | 54.00 |
| 38 | Grand Boulevard | 97 | 2.51 | 31.7 | 55.7% | 26.37 |
| 39 | Kenwood | 64 | 3.37 | 16.4 | 68.8% | 81.55 |
| 40 | Washington Park | 82 | 3.28 | 27.1 | 61.0% | 63.12 |
| 41 | Hyde Park | 144 | 4.72 | 16.8 | 57.6% | 72.39 |
| 42 | Woodlawn | 180 | 4.77 | 17.8 | 54.2% | 70.37 |
| 43 | South Shore | 283 | 4.29 | 9.9 | 67.8% | 69.55 |
| 44 | Chatham | 210 | 3.65 | 8.1 | 79.0% | 76.01 |
| 45 | Avalon Park | 60 | 2.07 | 6.8 | 70.0% | 33.53 |
| 46 | South Chicago | 217 | 4.11 | 7.8 | 73.3% | 77.48 |
| 47 | Burnside | 33 | 4.06 | 6.9 | 72.7% | 143.63* |
| 48 | Calumet Heights | 138 | 3.61 | 5.9 | 60.9% | 53.84 |
| 49 | Roseland | 267 | 2.68 | 6.0 | 70.3% | 66.00 |
| 50 | Pullman | 35 | 1.50 | 6.7 | 48.6% | 77.59* |
| 51 | South Deering | 216 | 4.22 | 6.0 | 70.8% | 68.54 |
| 52 | East Side | 174 | 4.07 | 5.1 | 69.5% | 44.12 |
| 53 | West Pullman | 232 | 3.27 | 7.7 | 71.4% | 72.49 |
| 54 | Riverdale | 47 | 2.45 | 11.4 | 63.8% | 61.13* |
| 55 | Hegewisch | 133 | 4.21 | 11.1 | 63.6% | 61.63 |
| 56 | Garfield Ridge | 397 | 4.90 | 7.8 | withheld (n = 386) | 55.93 |
| 57 | Archer Heights | 128 | 4.52 | 6.9 | 84.2% | 57.58 |
| 58 | Brighton Park | 241 | 4.84 | 12.4 | 74.7% | 76.73 |
| 59 | McKinley Park | 145 | 5.30 | 12.0 | 76.5% | 70.95 |
| 60 | Bridgeport | 224 | 5.39 | 14.1 | 70.4% | 74.79 |
| 61 | New City | 251 | 3.37 | 16.1 | 73.7% | 60.01 |
| 62 | West Elsdon | 194 | 7.73 | 11.8 | 71.5% | 86.83 |
| 63 | Gage Park | 258 | 5.91 | 10.9 | 74.4% | 72.85 |
| 64 | Clearing | 278 | 6.20 | 11.0 | 76.6% | 45.64 |
| 65 | West Lawn | 281 | 6.01 | 11.9 | 76.7% | 85.45 |
| 66 | Chicago Lawn | 364 | 5.30 | 10.0 | 72.0% | 68.79 |
| 67 | West Englewood | 215 | 3.10 | 11.6 | 67.0% | 50.97 |
| 68 | Englewood | 124 | 1.84 | 16.5 | 75.8% | 43.86 |
| 69 | Greater Grand Crossing | 184 | 2.88 | 7.3 | withheld (n = 182) | 52.48 |
| 70 | Ashburn | 575 | 6.17 | 7.7 | 68.0% | 101.81 |
| 71 | Auburn Gresham | 335 | 3.98 | 7.0 | 65.6% | 66.20 |
| 72 | Beverly | 183 | 3.06 | 6.9 | withheld (n = 179) | 75.86 |
| 73 | Washington Heights | 180 | 2.82 | 5.9 | 63.3% | 75.95 |
| 74 | Mount Greenwood | 260 | 5.90 | 6.0 | withheld (n = 257) | 89.34 |
| 75 | Morgan Park | 270 | 4.33 | 7.2 | withheld (n = 266) | 89.15 |
| 76 | O'Hare | 90 | 2.96 | 51.8 | withheld (n = 87) | 62.81 |
| 77 | Edgewater | 442 | 12.44 | 8.8 | withheld (n = 437) | 110.72 |
Ward table, 2025
| Ward | Reports | Reports per street mile | Median days to close | Reports with a recorded patch | Potholes filled per street mile |
|---|---|---|---|---|---|
| Ward 1 | 438 | 7.31 | 24.0 | 79.7% | 57.68 |
| Ward 2 | 245 | 8.10 | 16.0 | 66.7% | 56.22 |
| Ward 3 | 195 | 2.75 | 20.0 | 60.5% | 48.11 |
| Ward 4 | 258 | 3.54 | 13.0 | 54.3% | 46.24 |
| Ward 5 | 334 | 4.87 | 16.4 | 57.5% | 72.80 |
| Ward 6 | 328 | 3.14 | 7.0 | 74.4% | 54.63 |
| Ward 7 | 371 | 4.05 | 7.8 | 72.2% | 70.00 |
| Ward 8 | 385 | 3.21 | 8.0 | 64.9% | 75.09 |
| Ward 9 | 376 | 2.73 | 6.9 | 70.7% | 78.13 |
| Ward 10 | 551 | 4.00 | 6.0 | 69.8% | 56.29 |
| Ward 11 | 397 | 5.01 | 14.0 | 70.0% | 69.07 |
| Ward 12 | 407 | 5.87 | 13.0 | 73.2% | 83.08 |
| Ward 13 | 566 | 5.88 | 11.9 | 75.4% | 54.62 |
| Ward 14 | 321 | 4.54 | 8.9 | 77.5% | 68.56 |
| Ward 15 | 325 | 5.18 | 12.7 | 75.1% | 71.33 |
| Ward 16 | 369 | 3.66 | 15.2 | 67.5% | 47.04 |
| Ward 17 | 313 | 3.25 | 6.0 | 69.5% | 60.51 |
| Ward 18 | 742 | 6.04 | 7.8 | 70.5% | 105.58 |
| Ward 19 | 634 | 4.58 | 6.9 | withheld (n = 624) | 83.74 |
| Ward 20 | 280 | 2.95 | 19.9 | 62.7% | 48.62 |
| Ward 21 | 499 | 3.18 | 6.2 | 66.0% | 69.85 |
| Ward 22 | 275 | 4.67 | 15.0 | withheld (n = 264) | 46.12 |
| Ward 23 | 478 | 5.74 | 7.3 | withheld (n = 473) | 69.64 |
| Ward 24 | 256 | 3.03 | 67.5 | 54.9% | 25.27 |
| Ward 25 | 224 | 3.64 | 41.5 | 59.6% | 32.70 |
| Ward 26 | 286 | 4.80 | 60.4 | 73.4% | 31.59 |
| Ward 27 | 582 | 4.65 | 40.7 | 60.5% | 29.77 |
| Ward 28 | 571 | 5.16 | 36.6 | 60.7% | 37.07 |
| Ward 29 | 329 | 4.18 | 45.5 | 60.2% | 35.63 |
| Ward 30 | 519 | 6.81 | 21.6 | 80.1% | 61.31 |
| Ward 31 | 352 | 5.90 | 37.0 | 79.5% | 52.21 |
| Ward 32 | 570 | 8.13 | 28.8 | 67.2% | 65.31 |
| Ward 33 | 420 | 8.63 | 50.0 | 61.0% | 63.87 |
| Ward 34 | 227 | 6.65 | 9.7 | 55.3% | 30.69 |
| Ward 35 | 327 | 5.31 | 46.0 | 73.5% | 64.50 |
| Ward 36 | 437 | 6.63 | 42.7 | 77.4% | 58.72 |
| Ward 37 | 330 | 4.68 | 43.9 | 67.9% | 40.90 |
| Ward 38 | 428 | 4.27 | 42.5 | withheld (n = 418) | 44.09 |
| Ward 39 | 806 | 7.58 | 24.8 | 69.6% | 73.57 |
| Ward 40 | 577 | 9.27 | 6.1 | 81.9% | 85.69 |
| Ward 41 | 711 | 5.56 | 40.4 | withheld (n = 698) | 79.86 |
| Ward 42 | 400 | 9.65 | 6.1 | 55.4% | 62.21 |
| Ward 43 | 512 | 11.07 | 6.9 | 81.4% | 115.45 |
| Ward 44 | 223 | 6.32 | 9.7 | withheld (n = 220) | 52.52 |
| Ward 45 | 591 | 5.41 | 56.1 | withheld (n = 576) | 57.93 |
| Ward 46 | 244 | 7.21 | 11.8 | withheld (n = 241) | 77.89 |
| Ward 47 | 731 | 11.38 | 6.1 | 82.8% | 97.19 |
| Ward 48 | 321 | 10.00 | 10.7 | 73.9% | 81.36 |
| Ward 49 | 323 | 8.92 | 7.0 | withheld (n = 317) | 102.30 |
| Ward 50 | 385 | 6.70 | 7.1 | withheld (n = 379) | 68.95 |
02 Winters and reports
weather onlyPavement engineers associate potholes with wet freeze–thaw cycles, deep frost and heavy precipitation, so it is natural to ask whether a year with more reports followed a harsher winter. The first chart scores each winter from O’Hare weather records alone. The ones under it show citywide reports and response times for the year that winter ended in. The score is there to help read them; no figure on this page is adjusted for it, and over the few years available the two do not move together in any way that can be told apart from chance.
How to read these charts
- The winter score is the plain average of four weather measures — wet freeze–thaw days, freezing degree-days, precipitation and snowfall — each compared with the 30 winters from 1991–92 to 2020–21. Zero is an average winter. The bar is the score; the four small marks are its parts. It uses no 311 or patching data.
- A winter runs Nov 1–Apr 30 and sits above the calendar year it ends in. Some of its damage is done in November and December, before that year’s reports begin; the footnote says how much.
- Reports and time to close cover Jan 1–Aug 31 of every year, so 2026 can sit beside the others. The second line is time to close for the reports that have a patch record — their patch date is their closing date — over full calendar years; 2026 is withheld while many of its reports are still open, and the line breaks rather than dropping to zero.
- The small scatter puts the winter score against days to close, one point per winter. It has no trend line: seven points cannot support one.
- 2019 and the 2018–19 winter are not shown, for the same reason 2019 is not on the map. Both stay in the download, and 2019 enters no comparison anywhere in the release.
- Hover or tab to a year for every figure behind it. “Show the figures as a table” opens the same numbers as a real table.
Open the charts on their own page ↗
7 winters, 2019–20 to 2025–26 · weather from NOAA’s O’Hare daily record · citywide 311 figures · the 2018–19 winter is in the download
03 Data & methods
Built from City of Chicago 311 service requests and the Potholes Patched dataset, linked together and aggregated to community areas and wards. Every number on the map is defined in a versioned methods document before it is computed.
Work in progress. The explanatory article and its conclusions are still to come.
What these numbers are — and what they are not
Three measures: reports (distinct pothole problems residents and ward offices tell 311 about, with repeat reports removed), response time (until 311 closes a report, and separately until a patch is recorded), and potholes filled (the per-block count crews enter on completed work). No dataset here measures how many potholes exist or the condition of any street. Reports measure attention; fills measure work. Neither measures pavement.
More reports does not mean more potholes
Weather, awareness, app use and ward-office practice all move the reporting number. A quiet area on the reports layer may be a well-paved one, or one that does not call. This is the single most common way a pothole map is misread, so the legend carries the warning rather than leaving it to a footnote.
Closing a report is not patching a pothole
A 311 closure is an administrative status. Only a linked Potholes Patched record indicates a recorded patch, and the Reports with a recorded patch metric is how often that actually happened — about 71% of completed 2025 reports. Time to a recorded patch is not a separate clock: for 99.95% of linked records the patch is logged within a minute of the 311 closure, so it is the closing time of the reports that got a patch record. Response times are estimated with a survival model, so reports still open are counted rather than dropped and recent years do not look artificially fast. That is also why every time on this page is a median, never an average: a mean would have to invent a closing date for every report that has not closed yet. The hover figures show the median days to close and, where the year has settled, the median days to a recorded patch.
Fill counts are crew-entered
Potholes filled is the number a crew enters for a block when it finishes. One report can lead to patching a whole block, so fills routinely exceed reports — about 249,000 fills against 21,000 reports in 2025. Some entries list 150 or more potholes on one block; they are kept as recorded, and an area-year where such entries make up 10% or more of the total is flagged in its popup.
Suppression and class breaks
A figure is withheld where fewer than 30 records sit behind it (100 for a 90th percentile), and the record count is published anyway so you can see how thin the cell was. For rates, suppression is based on the expected count for an area of that size rather than the observed one, so genuinely quiet areas are not hidden. The five color classes are quantile breaks cut from 2020–2025 and frozen at the methods version, so adding a year does not recolor earlier ones.
Wards, the 2023 remap, and alderpersons
Ward boundaries changed on 2023-05-15. Earlier years are drawn on today’s ward map so an area can be followed over time; the published ward_legacy_mix table records which old wards each current ward is built from. Nothing here grades an alderperson. Ward offices file requests; CDOT fills potholes. A pre-2023 figure on a current ward describes an area that different alderpersons represented, and no alderperson name appears anywhere in the release.
Geography, roads and coverage
Records are placed by point-in-polygon on their own coordinates, not on the ward or community-area field 311 stored at creation time. Per-mile rates use city centerline mileage excluding expressways, the Skyway and ramps, with boundary segments split between the areas that share them. Lake Shore Drive is the exception: enough fills are recorded on it that it stays in both the counts and the mileage. Alleys have no published mileage anywhere in city data, so the alley layer offers counts and response times only, and it is the sparsest view here — a fifth to three in ten community areas are withheld in a full year, and a quarter to a half in a year-to-date window, because alley reports are too few per area for a stable figure. Records that cannot be placed go to an unassigned bucket that never appears on the map.
Why 2019 is excluded from the map
2019 was the first full year of the current 311 system, and its records are misallocated at several times the rate of any later year. 2.09% of 2019 reports — 891 of 42,535 — could not be placed in a community area at all, against 0.37% to 0.78% in every later full year, and 46.8% of its requests carry a duplicate flag, the highest share in the series. Rather than show a year whose geography is that much less reliable beside years where it is solid, the map starts at 2020. The 2019 rows are still published in the downloadable data, flagged TRANSITION_2019, because leaving a year off a chart is not a reason to withhold it from the record. They enter nothing else: no pooled period, year-over-year change, color class or diagnostic uses 2019. Treat it as a weak baseline rather than a comparable year.
The winter score is context, not a correction
The winter harshness index is built only from NOAA’s daily weather record at O’Hare, never from 311 or patching data, and its four parts carry equal weights that were fixed before it was set beside any pothole figure. It is never used to adjust, normalize or predict a number on this page, and a harsh winter next to a high report count does not show that one caused the other. A rank correlation between the score and citywide reports is published in the validation report as a check on the index, not as a finding. Over the years available it cannot be told apart from zero, with or without 2019 (the figures are under Validation), and a handful of years could not establish an association either way. Snow readings are missing on some days in five of the thirty reference winters and count as zero, which nudges the published snowfall scores slightly high. The rule for every part of it is in the methods document, §11.
2026 is not over
The year-to-date mode compares Jan 1–Aug 31 in every year and observes response times as of the same date each year, which is the only fair way to put 2026 beside 2025. Choosing 2026 on the full-year timeline switches to that comparison rather than drawing a partial year as if it were complete.
Validation
Citywide totals are reconciled against the portal’s own aggregates, area figures must sum back to the city total, every suppression rule is re-derived from the published counts, and two builds from the same snapshot must match byte for byte. A check that fails is published as failed rather than loosened.
Of the 15 build-blocking checks the methods define (V1–V15), 13 pass and 2 fail and are published rather than loosened. V3 caps geography loss at 1.5% of each count in each year; 6 count-years exceed it: crew-logged records in 2021, 2022 and 2026, reports in 2019, staff-observed records in 2019 and reports including duplicates in 2019 (worst: crew-logged records in 2021, 2.16% on wards). V7b asks the survival-curve median to sit within 0.5 day of the median of closed reports alone where under 0.5% of reports are open; it misses in 12 of 2,398 cohorts, where counting the one or two open reports moves the median one report along, across a gap of more than half a day. An exact check (V7c) confirms the estimator in all 2,398 cohorts, those 12 included. 5 warning checks are open: V3w, geography loss between 1% and the 1.5% cap; W3, 56 area-years where crew entries of 150+ potholes make up 10% or more of fills; W4, 125 area-years above three times their own median, mostly alley closing times (57), street closing times (33) and patch times (25); W6, a race group too thin to stand alone, merged into “no majority” (majority-Asian tracts); W9, the Midway cross-check of the O’Hare winter score (ρ = 0.75 against a 0.85 target). 2 diagnostics miss their targets: D6, where 93.69% of reports lie within 100 ft of a street centerline against a 97% target (the rest count as unsnapped); D9, where the 311 ward field disagrees with the coordinates for 4.18% of pre-remap reports against a 2% trigger (placement never uses that field; the cause is not yet investigated). The winter score’s rank correlation with citywide reports is ρ = 0.2 over 2020–2025 (n = 6) and 0.5 with 2019 (n = 7); neither is distinguishable from zero (exact p = 0.71 and 0.27). Every result is in qa_report.json.
What changed on 2026-09-26
The release is built from a new snapshot of the City’s records, taken 2026-09-26 and holding records through 2026-09-25, under methods 0.5.1. Every full-year figure for 2019 to 2022 and for 2025 is unchanged, and so are the community-area and ward tables. A few for 2023 and 2024, and for the multi-year windows that include them, moved where reports still open at the last snapshot have since closed. The year-to-date figures moved in every year: that view observes response times as of the snapshot’s day in each year, now Sep 25 rather than Sep 20, and the City’s records for 2026 changed between the two snapshots. One validation rule changed. The check that citywide totals match the City portal (V1c) now compares the snapshot with the portal’s counts recorded when it was pulled, not with the live portal, so rebuilding a snapshot gives the same result on any later day; how far the live portal has moved since the pull is a new warning, V1e. On the new snapshot V3 fails on the same six count-years as before and V7b in 12 cohorts, one more; both failures are published, and no threshold moved. The ward view of reports per 1,000 residents now carries a caveat: every ward’s 2020 population is within 5% of the ward average, so that view tracks the raw report count closely. The winter chart reads the citywide figures from a small file of their own, site/data/city_series.json, instead of the full table. Methods 0.5.1 also gives the 2026-09-22 republish the new version it should have had, since its tie rule for snapping a report to a road changed a definition. community_area_summary.csv, ward_summary.csv, geo_denominators.csv, strata_tracts.csv, ward_legacy_mix.csv, winter_harshness.csv and winter_sensitivity.csv are byte for byte the 2026-09-24 release. The full list is in the release notes.
Download the data (CSV and JSON)
- Data release files, checksums, sources, license
- Project methodology ↗ Chicago-Potholes
- Data dictionary & limitations ↗ Chicago-Potholes
- checksums.sha256 published manifest
Blandford, Connor Ulrich. “Chicago potholes over time.” connorblandford.com, 2026-09-21 (data release 2026-09-26). https://connorblandford.com/projects/chicago-potholes/. Data: https://doi.org/10.5281/zenodo.22972212; all releases: https://doi.org/10.5281/zenodo.22972211.