NYC Crime Map

About this data

The map shows complaints reported to the New York City Police Department from 2016 to 2025, from the city's open data. This page explains what that means.

Complaints, not crimes

Each record is a complaint: a report of a felony, misdemeanor or violation that the NYPD took down. It is not an arrest, a charge or a conviction, and some complaints turn out not to be crimes at all. Many crimes are never reported, and reporting rates differ between offenses and between neighborhoods, so the map shows where complaints were made, not where crime happened or how safe a place is.

"Enforcement offenses" (drugs, weapons, traffic and impaired driving, public order) mostly record what police officers found on patrol. They rise and fall with where and how police work.

The map uses 18 offense types of its own, built on the NYPD's offense codes, in four groups. It never shows the age, race or sex of suspects or victims.

Report date, not occurrence date

Complaints are counted by the day they were reported. That date is always present and is how the NYPD publishes the data. The day and time a crime happened is often missing or uncertain (it may be a range, such as "while I was away"), so it is used only in the "Day and hour" chart. A complaint reported in January about something that happened in December counts in January.

Data runs from January 2016 through December 2025. The NYPD updates the historic file quarterly; this map is rebuilt from it.

Locations are rounded

To protect privacy, the NYPD moves each complaint to the middle of the block or to the nearest intersection. Many complaints share the same point. When you zoom in, each dot is one of those points, sized by how many complaints it holds and colored by its most frequent offense group; it is never one person's address.

Hot spots group complaints into hexagons about 180 meters on a side (roughly eight blocks), so that rounding to a block doesn't matter at that scale.

Withheld locations

For rape and sex crimes (including sexual exploitation) the NYPD withholds where they happened, to protect victims, and places them at the precinct station house instead. The map counts these complaints in the city, borough and precinct totals but never draws them on hexagons or as points: every station house would show up as a false hot spot. They are marked † in the offense list.

A small share of other complaints has no location at all. Those are counted in the totals and the one-sentence summary says how many.

Rates and their caveats

Precincts and boroughs are colored by complaints per 1,000 residents a year, because raw counts mostly measure how big or busy a place is. Residents come from the 2020 Census, summed from census blocks inside each precinct.

How colors are set

On the light map, darker means more; on the dark map, brighter means more. Precincts and boroughs follow the same rule as the hexagons, so each map reads one way.

Hexagons are split at the 20th, 40th, 60th, 80th and 95th percentiles of the hexagons with complaints anywhere in the city, rounded, so the deepest shade is the top 5% and the busiest areas can still be told apart. Column height shows the count too. Precincts are split into six classes with about the same number of precincts each. The classes are computed for the whole city, so panning or zooming never recolors a place; they change only when you change the dates or offenses. The key always shows the ranges, the unit and the period.

When you zoom in, the key switches to the dots: their color is the offense group with the most complaints at that location, and their size grows with the number of complaints there.

The density color is a single plum hue, chosen because it reads as neither water, parks nor alarm. The four offense groups have their own colors, used only for the dots and the offense list. Highlighter yellow marks the block or neighborhood you are pointing at in a chart.

Why I made this map

I built this as a personal project, but it started two years ago. For a university project, I made a scrollytelling piece about New York's 311 complaints, the things New Yorkers call the city about. It was the first time I looked at a whole city through what its people report. What stayed with me was how plainly it showed inequality: counted per resident, some parts of the city reported far more problems than others. A few simple numbers made the city's social divides hard to ignore. I was left wanting more than a story you scroll through once.

This year I started working on a newspaper's data team in Buenos Aires, where I've been building maps of my own city's complaints, block by block, with a search by address. That work changed how I think about data. On a map you start from your own street, and the numbers stop being abstract. What better and more reliable way to understand data than a map?

I'm finishing my degree in data science, and this is the project I wanted to close it with: going back to New York, now with ten years of NYPD complaints and everything I've learned since. I want people to understand where they live, how they live and how it changes through time.

Ramón Eppens

How it was built

Everything comes from public data. From NYC Open Data:

Resident counts come from the 2020 Census (U.S. Census Bureau API). To check the numbers, the map is compared with the NYPD's own CompStat figures for the seven major felonies: citywide totals are within 1% of CompStat in every year from 2016 to 2025, and 97% of precinct-years are within 2%.

A set of Python scripts downloads the data, cleans it, places each complaint in its neighborhood, precinct and street, and writes small files the map reads. The map runs entirely in your browser: MapLibre draws the streets, deck.gl draws the data and DuckDB answers each filter on your own device, without a database server. Base map by CARTO, map data from OpenStreetMap contributors. Type: Newsreader and Schibsted Grotesk.

I wrote the code with the help of Claude Code, an AI coding assistant. The decisions are mine: what to count, how to group offenses, how to compare places, what to leave out, and checking the results against NYPD's figures. Each one is written down, with the reason, in the project's decision log.

The code, the data notes and the decision log are open on GitHub under the MIT license.