Crime context.
With the source in view.
Police-reported incident data for agent builders and listing pages. A shared schema, explicit coverage, and attribution that stays with the result.
For AI agents
For agent builders (MCP). Connect your tools to reported incidents, category counts and within-city context.
Add to your MCP client configuration
{ "mcpServers": { "crime-data": { "type": "http", "url": "https://crimedata.dev/mcp" } } }
Example tool call
{ "name": "crime_stats", "arguments": {
"lat": 37.788, "lon": -122.4075,
"radius_m": 500
} }
No API key required for MCP. Check crime_coverage first; retain the returned source and freshness.
For listings
For real-estate agents and rental hosts. Add factual neighbourhood context to your listing with a copy-paste scorecard.
Illustrative demo from the widget fixture. No measured crime data; date unavailable. All values below share this demo source.
Incident coverage: San Francisco, New York City, Seattle, Dallas, Cincinnati, Kansas City, Boston, Washington, Minneapolis, Milwaukee. 2 more cities loading. Elsewhere, city-wide FBI rates are available through the score fallback where covered; no street-level incidents or grade. Sources and record dates.
Explore the incident data
Crime data for any address in 10 US cities (2 more loading). Checked nightly; each city shows its latest record date.
Real figures from our database, built 2026-11-03.
Three calls, one schema
curl "https://crimedata.dev/v1/stats?lat=37.788&lon=-122.4075&radius_m=500" \ -H "x-api-key: $CRIME_API_KEY"
const res = await fetch("https://crimedata.dev/v1/incidents?lat=40.758&lon=-73.9855&radius_m=300&category=theft", {
headers: { "x-api-key": "YOUR_KEY" },
});
const { incidents } = await res.json();
import requests
r = requests.get("https://crimedata.dev/v1/cities",
headers={"x-api-key": "YOUR_KEY"})
for c in r.json()["cities"]: print(c["name"], c["newest_record"])
Embeddable scorecard
One tag, no dependencies: grade, score, top categories, 12-month trend and day/night split, in a shadow DOM that follows light and dark mode. It makes two API calls per render (/v1/score and /v1/stats) with a publishable widget key (pk_). Create it server-side with your secret key and an exact origin allowlist; calls share your secret key’s quota. Up to 10 widget keys per secret key; rotating the secret key revokes them all. Keep the secret key off your page. Incident density percentile, not a prediction of personal risk. How the score works.
<script src="https://crimedata.dev/embed.js" async></script> <crime-scorecard lat="37.788" lon="-122.4075" radius="500" api-key="pk_YOUR_WIDGET_KEY"></crime-scorecard>
Attributes: lat and lon (or address), radius in metres (default 500), api-key. Keep the small attribution link in place.
curl -X POST 'https://crimedata.dev/v1/keys/widget' -H "x-api-key: $CRIME_API_KEY" -H 'content-type: application/json' --data '{"origins":["https://example.com"]}'
# Revoke with the parent secret:
curl -X DELETE 'https://crimedata.dev/v1/keys/widget/w_WIDGET_ID' -H "x-api-key: $CRIME_API_KEY"
Widget keys allow only GET /v1/score and /v1/stats with a matching Origin header. They cannot manage keys or read usage. Origin is a browser control only; non-browser clients can forge that header. Each widget has a daily cap (default up to 1,000 calls, configurable with daily_cap up to the parent’s remaining quota) and calls are also limited per IP.
Endpoints
GET /v1/incidents?lat=&lon=&radius_m=500&from=&to=&category=&limit=100&cursor=&format=json|geojson
GET /v1/incidents?address=1+Market+St+San+Francisco&... (or bbox=minLon,minLat,maxLon,maxLat)
GET /v1/stats?lat=&lon=&radius_m=500&from=&to=&category= (or address=, bbox=)
GET /v1/compare?points=lat,lon;lat,lon&radius_m=500 (2-5 points)
GET /v1/score?lat=&lon=&radius_m=500 (0-100 incident density score and A-F grade; or address=)
GET /v1/usage (your plan, calls used, upgrade links)
POST /v1/keys (free key; optional JSON body {"email": ...})
POST /v1/keys/rotate (new key for the same plan; the old key stops working)
GET /v1/cities
Categories: homicide sexual_offense robbery assault burglary vehicle_theft theft_from_vehicle theft fraud vandalism weapons drugs dui trespass harassment public_order traffic non_criminal other
Coverage
NYC publishes quarterly, so its newest records are about three months old. Cincinnati publishes lesser offenses only as "Part 2" with no detail, so they appear as other. Live freshness: GET /v1/cities.
Elsewhere in the US, /v1/score still answers with the city-wide FBI rates and national percentiles (coverage: "city_fallback"), not street-level incidents or a grade.
Need another city?
MCP server for AI agents
MCP for AI agents: tools, limits and connections
Free: last 180 days, 1 km radius, 50 rows per call. Tools: crime_incidents, crime_stats, crime_compare, crime_score, crime_coverage. Pass address instead of lat and lon.
{ "mcpServers": { "crime-data": { "type": "http", "url": "https://crimedata.dev/mcp" } } }
Pricing
A live app or internal tool
Paid plans open soon — start with a free keyListing sites and dashboards
Paid plans open soon — start with a free keyBatch scoring and data teams
Paid plans open soon — start with a free keyOver your quota, calls return 429 until next month or until you upgrade. Never a surprise bill. Need bulk history or a city we don't cover? Ask in the issue tracker linked from the docs.
Get a free API key
500 calls a month, no card. The key is shown once. Email is optional: we use it only to recover access and to send notices about your key or the service.
Upgrade an existing key
Paste your key to see this month's usage and your upgrade links. The key is sent only to this API.
Rotate key issues a new key with the same plan, usage and billing link. The old key stops working immediately.
Attribution
San Francisco: source (ODC PDDL (public domain))
New York City: source (NYC Admin Code 23-502(d): no restrictions on use; source identified)
Seattle: source (Public Domain)
Dallas: source (ODC-BY (attribution required))
Cincinnati: source (Public Domain)
Kansas City: source (Public Domain)
Boston: source (ODC PDDL (public domain))
Washington: source (CC BY 4.0 (attribution required))
Minneapolis: source (City of Minneapolis has waived all copyright and related or neighboring rights to Open Data (CC0 1.0), to the extent possible under law)
Milwaukee: source (CC BY (attribution required))
Denver: source (CC BY 3.0 (attribution required))
Baltimore: source (Open licence by city ordinance, commercial use allowed (Baltimore City Code 9-8))
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.