Traffic crashes sourced from the Chicago Data Portal.
Crashes
17,219
2018-01-01
2026-10-11
Injuries by Month — last 24 months
FatalIncapacitating
2026
Oct
2 / 53
Sep
6 / 162
Aug
8 / 171
Jul
14 / 195
Jun
10 / 175
May
6 / 148
Apr
10 / 139
Mar
6 / 115
Feb
6 / 79
Jan
10 / 101
2025
Dec
10 / 113
Nov
12 / 138
Oct
8 / 149
Sep
6 / 160
Aug
7 / 205
Jul
9 / 165
Jun
8 / 187
May
6 / 124
Apr
9 / 135
Mar
9 / 139
Feb
3 / 90
Jan
6 / 102
2024
Dec
6 / 102
Nov
10 / 164
Oct
8 / 107
Locations
Category
Count
intersection
23,877
neighborhood
98
street
1,832
ward
50
API Endpoints
GET/api/status
Database status and row counts
GET/api/crashes/nearpoint
Crashes near a lat/lng point — latitude (required), longitude (required), since (optional, YYYY-MM-DD), until (optional, YYYY-MM-DD), distance_feet (default 2640), severe_only (default false; true narrows to severe crashes only)
GET/api/crashes/recent
Most recent crashes citywide — limit (default 20, max 50), fatal_only (default false), include_people (default false), severe_only (default false; true narrows to severe crashes only)
GET/api/crashes/fatalities
Every fatal crash in the database, fully hydrated (people, vehicles, stories)
GET/api/crashes/brief
All crashes with a brief field set for heatmaps and bulk visualization — since (optional, YYYY-MM-DD), until (optional, YYYY-MM-DD), location_category + location_id (optional, both required together), limit (default 50000, max 50000; response carries truncated:true if total exceeds limit), severe_only (default false; true narrows to severe crashes only)
GET/api/crashes/summary
Aggregated crash and casualty totals — crashes, people killed, people injured, pedestrians, cyclists — for one location or citywide — location_category + location_id (both required together; omit both for citywide), since (optional, YYYY-MM-DD), until (optional, YYYY-MM-DD), severe_only (default false; true narrows to severe crashes only)
GET/api/crashes/date-count
Crash injury counts grouped by time period — unit (day | month | year, default month), last (integer, default 6; ignored when year is given), year (optional, YYYY — returns that year instead of a rolling window), month (optional, 1-12 — narrows to that calendar month), severe_only (default false; true narrows to severe crashes only)
GET/api/fetch-stories
All news stories, deduped by URL, each with the crashes it covers — limit (optional, N newest stories; 0 or absent = all)
GET/api/locations/search
Search locations by name — q (required)
GET/api/crashes/<crash_record_id>
Fetch a crash detail payload including related neighborhood, ward, street, and intersection locations
GET/api/locations/<category>/<location_id>
Fetch a single location by category and id
GET/api/locations/<category>/<location_id>/nearby
Fetch nearby locations in the same category — limit (default 5, max 20), severe_only (default false; true narrows to severe crashes only)
GET/api/locations/for-point
Neighborhood and ward containing a lat/lng point, with crash counts — latitude (required), longitude (required), severe_only (default false; true narrows to severe crashes only)
GET/api/neighborhoods/stats
Crash stats aggregated by neighborhood (includes rank and percentile per area) — include_geometry (default true), severe_only (default false; true narrows to severe crashes only)
GET/api/wards/stats
Crash stats aggregated by ward (includes rank and percentile per area) — include_geometry (default true), severe_only (default false; true narrows to severe crashes only)
GET/api/streets/stats
Crash stats aggregated by street (includes rank and percentile per area) — severe_only (default false; true narrows to severe crashes only)
GET/api/intersections/top
Top intersections by crash count from crash_locations mapping — recent_days (default 90), limit (default 20), severe_only (default false; true narrows to severe crashes only)