Raw Chicago incidents available for aggregate refreshes.
Methodology
CrimeAtlas methodology and caveats
CrimeAtlas imports raw incidents into PostgreSQL, stores normalized dimensions, and refreshes monthly and yearly aggregate tables offline. The current Chicago snapshot includes 7,855,000 imported incidents plus precomputed yearly and monthly tables for the main reference pages.
Rows currently stored in the yearly city aggregate table.
Rows currently stored in the monthly city aggregate table.
Yearly category aggregate rows used by crime type pages.
Context
How the data pipeline works
Additional reading notes to help interpret the statistics on this page.
Aggregate tables power the main SEO pages so totals, breakdowns, and trend charts load quickly and stay consistent across routes.
The Chicago importer is resumable and idempotent, which allows backfills and later revisions to reuse the same raw storage without duplicate rows.
Supporting lists on page templates intentionally show recent samples rather than the full raw table, keeping HTML output compact and crawl-friendly.
Pipeline
The MVP uses explicit import and refresh steps so the data flow stays easy to inspect and rerun.
1. Bootstrap the city and source datasets.
2. Import Chicago community areas into the neighborhoods table.
3. Import crime incidents in batches via Socrata using checkpoint-aware upserts.
4. Refresh yearly and monthly aggregate tables used by the SEO pages.
How to read the data
CrimeAtlas presents reported incidents as published by the source and does not infer broader safety conditions from the counts alone.
CrimeAtlas summarizes reported incidents and official classifications as published by the source. It does not attempt to infer unreported crime or safety conditions beyond the dataset.
Citywide, neighborhood, and crime-type pages use aggregate tables refreshed offline so page generation stays fast and consistent.
Incident lists and the map are intentionally constrained to recent rows to keep payload size manageable.
Important context
Methodology and caveats
These pages summarize reported public records. Use source notes and methodology before drawing comparisons.
Reported crime data can lag the real world and may exclude the most recent days.
Case classifications can change after additional investigation or administrative review.
Map coordinates are approximate because the source data is redacted to the block level.
Counts on this site summarize reported incidents and should not be treated as a complete measure of safety.
Read the methodology page for pipeline details and the about page for source notes.
Sources
Official data sources
CrimeAtlas is built from public datasets published by city agencies. Each page links back to the underlying source and the latest import timestamp.
Chicago community areas
Publisher: City of Chicago
Dataset ID: igwz-8jzy
Refresh cadence: Updated as needed
Last imported: March 12, 2026
Chicago crime incidents
Publisher: Chicago Police Department
Dataset ID: ijzp-q8t2
Refresh cadence: Daily
Last imported: March 12, 2026
Chicago neighborhood boundaries reference
Publisher: City of Chicago
Dataset ID: 9wp7-iasj
Refresh cadence: Legacy file dataset
Last imported: Not available
Explore more
Related pages
Move between citywide, map, category, neighborhood, and year-specific routes with descriptive internal links.
FAQ
Frequently asked questions
Short answers about data coverage, definitions, and how to read these pages.
Does CrimeAtlas calculate pages from raw incidents on every request?
No. The app imports raw incidents into normalized tables and then refreshes monthly and yearly aggregate tables used by the core SEO pages.
Can older records change after import?
Yes. Source systems can revise classifications or other attributes, so the importer is idempotent and designed to handle updates cleanly.