Check our numbers yourself.
Every stat we publish comes from public records we requested from the City. Below are the two datasets that back them — the raw files plus the City's own response letters — so you can reproduce the numbers from scratch.
Every Chicago ticket, 2019–2024
Ticket-level records for six years — 26,823,488 tickets. Each row carries the City's own money columns — what was paid and what's still owed — so you can reproduce the billed figure straight from it. Files are $-delimited text inside a zip, one per year.
the $429M billed citywide figure. Add up two columns — Total Payments (what drivers paid) plus Current Amount Due (what they still owe) — across every ticket. (The win rate comes from a different file — the hearings data below.)
How to reproduce the billed figure: billed = Total Payments + Current Amount Due (what drivers actually paid plus what they still owe), averaged over the three matured years 2022–24 ≈ $429M/yr. Of that, ~$140M is late penalty (billed minus Fine Level 1). We do not sum Fine Level 2 across all tickets — that would assume every ticket escalates to the late price and overstates the total by roughly a third. The exact formulas are on The Math and By The Numbers.
Every contest outcome, 2019–2025
1,198,075 administrative-hearing records, 1,171,926 of them decided Not Liable or Liable. This is the cleanest source for the win rate broken out by how a ticket was contested — by mail, in person, or virtually. Delivered as a $-delimited text file (gzipped).
the contest win rate — including our headline 59% mail-in number. Each row is one decision, and one column is the ruling: "Not Liable" means the driver won, "Liable" means they lost. This is the only file that reproduces the 59% — it's the share of mail contests decided in 2023–2025 that came back Not Liable (185,170 of 316,144).
The request & response: the City's Department of Administrative Hearings replied through GovQA (its FOIA portal) on Nov 10, 2025 — restating the full request (“all hearing outcome records for parking, traffic, and camera enforcement, 2019–present”) and producing the data file A52156_20251106. The PDF above is that City response, sent from chicagoil@govqa.us under request #H118909-110325.
How to check the 59% yourself: open the file and keep only the rows where the contest-method column says Mail and the decision lands in 2023–2025. Count the rulings: 185,170 came back "Not Liable" (won) out of 316,144 decided = 59%. Want the in-person or virtual numbers? Same steps, just pick that method instead. The live data page does it all for you.
Also in our database
Two later requests extended both datasets. They aren't posted on this page yet — email the address below if you need a copy.
Cases in both hearing files: 34,424 rows in the 2019–2025 file are for tickets that also appear in the 2012–2018 file — tickets issued by 2018 but decided in 2019 or later. Our 3,066,667 total counts each of those cases once.
Why each case was decided: the RSN column holds one of 54 set reasons the hearing officer picks — for example “Signs were Missing or Obscured” or “Violation is Factually Inconsistent”. It is filled in on 2,997,347 of the 2,997,348 decided cases across both files, and 1,931,051 also carry the officer's written note.
Questions about the data or the requests? Email randyvollrath@gmail.com.