← Back to home
Obtained via FOIA from the City of Chicago

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.

FOIA #F118906-110325 · Dept. of Finance

Every Chicago ticket, 2019–2024

Ticket-level records for six years — roughly 5 million tickets a year. 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.

What this proves: 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.)
2019tickets_2019.zip98 MB2020tickets_2020.zip71 MB2021tickets_2021.zip140 MB2022tickets_2022.zip148 MB2023tickets_2023.zip139 MB2024tickets_2024.zip136 MB
📄 City response letter (PDF)
Columns
Ticket Number · Issue Date/Time · Street Num/Dir/Name · Plate State · Plate Type · Zipcode · Violation Code · Violation Desc · Unit · Unit Description · Vehicle Make · Fine Level 1 · Fine Level 2 · Current Amount Due · Total Payments · Ticket Queue · Queue Date · Notice Level · Dispo · Notice · Officer

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.

FOIA #H118909-110325 · Dept. of Administrative Hearings

Every contest outcome, 2019–present

1.2 million administrative-hearing decisions. 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).

What this proves: 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 (169,609 of 287,532).
Hearing outcomeshearing_outcomes_2019-present.txt.gz80 MB
📄 City response (GovQA, PDF)

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.

Columns
TCKT_NUM · ISS_DT_TIME · ST_NUM · ST_DIR · ST_NM · WARD · VIOL_CD · VIOL_DESC · DISPO_DT · CRT_CNTST_QUE_NM (contest method) · HEAR_OFFICE · HEAR_LOC · DISPO(the ruling — “Not Liable” = won) · RSN · NOTE

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: 169,609 came back "Not Liable" (won) out of 287,532 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.

See how we use it
The live data
Win rate computed live from the file above — by violation type and by contest method.
The math
How the billed-revenue and per-driver dollar figures are calculated, query by query.
By the numbers
The $429M citywide picture: base fines vs. late penalties, and where we fit.

Questions about the data or the requests? Email randyvollrath@gmail.com.