This document records every data source, every analytical choice and every known limitation behind the map of New York City misdemeanors and violations. The two scripts that produce the data are public and re-runnable.
Every record New York City's Police Department classifies as a misdemeanor or a violation — the two lowest tiers of offense, below felonies — from January 1, 2015 through March 31, 2026, aggregated to the city's 78 police precincts. Felonies are excluded entirely. Two separate lenses are offered:
All data comes from New York City Open Data and was retrieved on May 21, 2026.
| Dataset | ID | Used for |
|---|---|---|
| NYPD Complaint Data Historic | qgea-i56i | Complaints, 2015–2025 |
| NYPD Complaint Data Current (Year to Date) | 5uac-w243 | Complaints, 2026 Q1 |
| NYPD Arrests Data Historic | 8h9b-rp9u | Arrests, 2015–2025 |
| NYPD Arrest Data Year to Date | uip8-fykc | Arrests, 2026 Q1 |
| Police Precincts (boundaries) | y76i-bdw7 | Map polygons |
Complaints are dated by report date (RPT_DT), the date the incident was reported
to police — not the date the offense is alleged to have occurred (CMPLT_FR_DT), which can be years
earlier for some offenses. Arrests are dated by arrest date (ARREST_DATE).
The map separates offenses whose recorded counts move with policing strategy from those that mostly reflect underlying victimization. Each offense type is assigned to one of three groups. This is a documented editorial judgment, not an official NYPD category — the complete assignment is exported to classification.csv so it can be inspected or contested.
Enforcement-sensitive Discretionary, officer-initiated offenses. A police officer largely decides whether these become a recorded incident, so the counts rise and fall with proactive enforcement: dangerous drugs, cannabis offenses, criminal trespass, theft of services (fare evasion), gambling, loitering, prostitution, disorderly conduct, weapon possession, intoxicated/impaired driving, vehicle-and-traffic-law offenses, alcoholic-beverage offenses, fraudulent accosting, jostling, burglar's tools, fortune telling.
Complaint-driven Offenses typically reported by a victim or witness, where a member of the public, not an officer, usually initiates the record: petit larceny, assault 3, harassment, criminal mischief, sex crimes, forcible touching, fraud, unauthorized use of a vehicle, possession of stolen property, offenses against children, endangering welfare.
Other / mixed Administrative catch-alls, ambiguous grab-bag categories and offenses that arise downstream of police contact rather than from a push to police a behavior: offenses against public administration (resisting arrest, obstructing governmental administration), "offense against public order/sensibility," administrative code, miscellaneous penal law, other state laws, anticipatory offenses, escape, agriculture & markets law, health code, uncoded entries.
More generally: complaint data measures reported crime, which is shaped by public willingness to report; arrest data measures police activity, not the amount of crime occurring. Neither is a direct measure of how much low-level offending happens.
The map's third shading option divides each precinct's complaints by its arrests (for the selected offenses and offense level, in the selected year, using both lenses at once). A high ratio means reporting outpaces enforcement; a low ratio means the precinct is enforcement-heavy relative to how much is reported.
Because complaints structurally outnumber arrests almost everywhere, the diverging color scale is centered on the citywide ratio for that year and selection (about 2.4 complaints per arrest citywide in 2025), not on 1.0. Red shades a precinct that is more arrest-heavy than the city as a whole; blue shades one that is more complaint-heavy. The scale spans roughly 1.8× either side of the city average on a log scale. Precincts with zero arrests for the selection are treated as maximally complaint-heavy; precincts with no records are left uncolored.
ADDR_PCT_CD for complaints,
ARREST_PRECINCT for arrests). Records with no precinct are dropped.The rate per 1,000 residents shading divides a precinct's incidents (for the selected lens, offense level, offenses and year) by its residential population, then multiplies by 1,000. Because NYPD precincts are not census geographies and precinct populations change over time, the denominator is built to be both real and time-varying:
Rates are a comparison aid, not a risk score. The full per-precinct, per-year population and rate for any selection is available through Download CSV.
CRIMINAL MISCHIEF & RELATED OF and
CRIMINAL MISCHIEF & RELATED OFFENSES), which are merged to one label.LAW_CAT_CD (MISDEMEANOR/VIOLATION in
complaints; M/V in arrests). Felony, infraction and unclassified levels are excluded.GROUP BY queries); no raw
person-level records are stored or shipped.Two scripts regenerate everything:
fetch_data.py — pulls precinct × year × offense × level counts from the four NYPD datasets. It
auto-detects the latest complete calendar quarter from the year-to-date datasets (so nothing has
to be hand-edited when a new quarter lands) and writes the resolved window to data/meta.json.build_data.py — canonicalizes offenses, applies the classification, attaches per-year populations
and neighborhood names, simplifies the precinct boundaries and writes data.json,
precincts.json and classification.csv.Run python3 fetch_data.py && python3 build_data.py. No API key is required. A monthly GitHub
Action re-runs both and commits the result only when the data changes.