How the incident density score works

Incident density percentile, not a prediction of personal risk. The score ranks one place against the rest of its own city. It describes where police-reported incidents were recorded, not how safe any person is.

Computation

  1. Window. The last 12 months of data for the city, ending at that city's newest record (so a source that publishes late, like NYC, is still compared over a full year). Non-criminal police records (lost property, sick assists) are excluded.
  2. Point density. Incidents within radius_m (default 500 m) of your point, divided by the circle's area. Violent incidents (homicide, sexual offense, robbery, assault) count double; the rest count once.
  3. Reference cells. The city's data extent (trimmed of stray coordinates) is cut into cells of about 500 m. A cell is part of the city's occupied area if it holds at least one incident in the window or touches one (8-neighbourhood, inside the extent). Empty cells farther away, such as water, parks or unbuilt land, are left out, so they cannot inflate a percentile. Up to 400 occupied cells are sampled (a fixed pseudo-random sample, seeded by city and date; all of them if there are fewer). For each sampled cell we count the weighted incidents within the same radius as your request (rounded to the nearest 50 m, at least 50 m) of the cell's centre and divide by the circle's area, so a circle is compared with circles, not with square cells. The sample is cached per city, day and radius, and rebuilt daily. The response gives the number of cells used in reference_cells.
  4. Percentile. percentile_in_city is the share of the reference cells with a lower density than your point. score = 100 - percentile, so higher means fewer incidents. Grades: A 80-100, B 60-79, C 40-59, D 20-39, F 0-19.

The response also gives raw densities (incidents_per_km2_year, violent_per_km2_year, property_per_km2_year) and the exact window used. Sexual offenses use only their coarsened (about 100 m) location and date. The point must fall inside a covered city's data extent. Outside it, /v1/score falls back to the city-wide FBI figures (next section); if the point is in no incorporated place the FBI table covers, the API returns 400 "Not in a covered city". For a city whose first data is still loading it returns 503 and does not count the call.

Per-resident context (tract)

When the US Census services answer within 4 seconds, the response also carries a tract block; when they do not, it is simply absent and the score is unchanged. The point is matched to its census tract (Census Geocoder, coordinates rounded to 3 decimals, about 110 m) and the tract's land area AREALAND is taken from the same response. Total population is the 2020 Census count (POP100) for that tract from Census TIGERweb. Both lookups are cached.

estimated_residents_in_radius = tract_population / (AREALAND in m2) x (pi x radius_m^2)
incidents_per_1k_residents_year = incidents_within_radius_in_window / estimated_residents_in_radius x 1000

incidents_within_radius_in_window is the same unweighted count behind incidents_per_km2_year (non-criminal records excluded, 12-month window). This assumes the tract's residents are spread evenly over its land area, so the estimate is rough, especially where the circle is larger than the tract or crosses its edge. The rate is null if the tract has no residents. Tract residents only: commercial and nightlife areas have many visitors, so per-resident rates overstate risk there. The population is the 2020 count and has not been updated for change since.

Limits

Outside covered cities: city-level fallback

For an address in any other US city or town, /v1/score returns coverage: "city_fallback" instead of a score. The point is matched (Census Geocoder, incorporated place plus state) to the FBI Crime Data Explorer table "Offenses Known to Law Enforcement by State by City" (2025, public-domain US government data; cities of 1,000+ residents that reported). You get that city's reported violent and property crimes per 100,000 residents and the national percentile of each among all cities in the table. This is city-wide reported crime, not the neighbourhood: there is no A-F grade or block-level claim, agencies report differently, and small towns swing a lot year to year. Counts as one call. Inside covered cities nothing changes.

Why scores are not comparable across cities

The percentile is relative to the city's own grid, so an A in one city and an A in another mean "among the quietest parts of that city", not equal levels of crime. Different reporting rules, city shapes and occupied-area sizes shift the scale. To compare places in different cities, compare the raw densities, with the caveats above in mind.

Embed the scorecard

Data comes from each city's open-data portal under the licence shown. It is police-reported incident data, not convictions, and can be revised by the source. Compared with the FBI API · Terms · Refunds · Privacy · DPA · Contact
Operated by Shahar Frish, Israel.