US Crime Incidents - 8 agencies, one offence taxonomy
Pricing
from $2.00 / 1,000 record scrapeds
US Crime Incidents - 8 agencies, one offence taxonomy
Police incident data from 8 US agencies (~16.3M records) normalised into one schema, with NIBRS crime-against buckets and explicit provenance for every classification.
Pricing
from $2.00 / 1,000 record scrapeds
Rating
0.0
(0)
Developer
Rishi Vinodkumar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
US Crime Incidents — 8 agencies, one offence taxonomy
Police incident data from eight US agencies, normalised into a single schema.
~16,313,654 incident records across 8 actively-maintained sources.
| Source | State | Records | Last verified |
|---|---|---|---|
| Chicago | IL | ~8,604,907 | 2026-07-23 |
| Austin | TX | ~2,659,603 | 2026-07-25 |
| Seattle | WA | ~1,551,250 | 2026-07-29 |
| Dallas | TX | ~1,506,789 | 2026-07-30 |
| San Francisco | CA | ~1,050,739 | 2026-07-28 |
| Montgomery County | MD | ~502,468 | 2026-07-30 |
| New York City | NY | ~279,513 | 2026-07-29 |
| King County | WA | ~158,385 | 2026-07-31 |
What this reconciles
Four incompatible offence taxonomies:
| Agency | Taxonomy | Offence fields |
|---|---|---|
| Chicago | IUCR | primary_type + description |
| Seattle | NIBRS | nibrs_offense_code_description + crime-against |
| Dallas | NIBRS | nibrs_crime + nibrs_crimeagainst |
| King County | NIBRS | nibrs_code_name |
| NYC | NY penal law | ofns_desc + law_cat_cd |
| San Francisco | bespoke | incident_category + incident_subcategory |
| Montgomery County | bespoke | crimename1 / crimename2 / crimename3 |
| Austin | UCR | crime_type + ucr_code |
NIBRS defines a crime_against axis — PERSON / PROPERTY / SOCIETY — which
is the closest thing to a cross-jurisdiction comparable. Four sources publish
it directly; for the rest it is derived from offence text.
Every record states which. crime_against_source is published,
derived, or none. A derived value presented as authoritative is
indistinguishable from a real one, and that is how bad crime statistics get
made. Set publishedClassificationOnly to restrict to agency-stated buckets.
Location precision varies by design
Police agencies deliberately blur incident locations. This is not missing data:
| Agency | Precision | Address | Coordinates |
|---|---|---|---|
| Montgomery County | street | full street address | yes |
| Dallas | street | street address | no |
| Chicago | block | 012XX W ADDISON ST | yes |
| Seattle | block | block address | yes |
| King County | block | block address | no |
| San Francisco | coordinates_only | none | yes |
| NYC | district_only | borough + precinct | yes |
| Austin | census_block | none | no |
location_precision travels with every record so a census-block centroid is
never mistaken for a street address. Use requireCoordinates or
requireAddress to filter — but note each excludes three sources.
Traps found while building this
1. updated_on is not when the crime happened. Chicago, King County and
others carry row-maintenance timestamps that are always fresher than the
occurrence date — every row gets touched on every refresh. A "pick the most
recent date column" heuristic selects them every time, yielding an event date
that means "when the row was last edited". Chicago uses date; King County
uses incident_datetime.
2. NYC really does spell it HARRASSMENT. Two Rs, in the live data.
Matching only the correct spelling silently drops every harassment complaint in
the city.
3. Non-crimes must not inflate real buckets. Missing Person contains
"person" and would count as a crime against a person; Found Property contains
"property". These map to OTHER.
4. Robbery is PERSON, not PROPERTY, under NIBRS — despite the property
element — because it involves force against a victim. Theft from person
remains PROPERTY.
5. Austin's occ_date_time is stale text stopping in 2025 while occ_date
is live. Dallas's date2_of_occurrence_2 contains typos into 2028.
Output
{"source": "chicago","state": "IL","incident_id": "JK344134","occurred_date": "2026-07-23","offense": "THEFT","offense_category": "THEFT","offense_detail": "OVER $500","crime_against": "PROPERTY","crime_against_source": "derived","severity": "UNKNOWN","taxonomy": "IUCR","premise": "APARTMENT","beat": "0523","neighborhood": "53","arrest": false,"address": "120XX S PERRY AVE","location_precision": "block","latitude": 41.675426798,"longitude": -87.624988687}
Only Chicago publishes an arrest flag. Only NYC publishes severity as
felony/misdemeanor/violation; NIBRS sources report Group A/B instead, so most
records are UNKNOWN on that axis.
Who this is for
- Proptech and insurance pricing location risk
- Retail site selection screening candidate locations
- Journalists and academics doing cross-city comparison
- Public-safety analytics vendors needing a multi-agency feed
Usage
Mappable violent crime, last quarter:
{"sources": ["chicago", "seattle", "montgomery_md"],"occurredAfter": "2026-05-01","crimeAgainst": ["PERSON"],"requireCoordinates": true,"maxResults": 5000}
Statistics-grade — agency-stated classifications only:
{ "occurredAfter": "2026-01-01", "publishedClassificationOnly": true }
Local development
pip install requestspython local_run.py --coveragepython local_run.py --after 2026-06-01 --limit 10python local_run.py --against PERSON --coords --after 2026-01-01python local_run.py --published-only --after 2026-01-01python verify.py # health-check every sourcepython test_classify.py # classification regression tests
Legal
Public, logged-out municipal open-data endpoints via each agency's official Socrata API. No authentication, no account, no terms accepted, no anti-bot circumvention. These are aggregate incident reports published deliberately at blurred precision; no source here identifies victims or suspects, and this actor does not attempt to re-identify anyone. Rate limits respected with exponential backoff.