PoliceCensus

Home / Downloads

Downloads & API

Every figure on this site is available as a file, not just a page. This is the same data the site itself renders, keyed by ORI (the FBI’s agency identifier) or by two-letter state code — nothing here is a summary or a sample of something larger. Machine-readable orientation for the whole site is at /llms.txt.

Per-agency

Identity, workforce history, military-surplus receipts, federal oversight matters and officer-assault figures for one agency, looked up by ORI.

FormatURL patternContains
JSON/api/agencies/{ori}Identity, full workforce history, military-surplus summary and items, federal oversight matters, and officer-assault series — the same sections the agency page shows.
CSV/api/agencies/{ori}/csvIdentity columns plus one row per year of reported workforce data. An agency with no workforce return still gets one identity row, with those columns blank — it does not vanish from the file.

The ORI for any agency is on its page, in the URL pattern /agencies/{state}/{slug} and in the page’s “Source” section.

Per-state (bulk)

The full agency roster — identity fields only, no workforce or equipment detail — for one state at a time.

FormatURL pattern
JSON/api/states/{xx}
CSV/api/states/{xx}/csv

There is no single endpoint for all 19,625 agencies at once. Bulk export is bounded to one US state or territory per request on purpose — a request for the whole country still means one request per jurisdiction (up to 51), never one unbounded response. Every state’s roster, however large, comes back complete or not at all: if a read cannot be proven complete, the endpoint returns an error instead of a shorter file that would look like a smaller state.

What every export does NOT include, and why

Deaths during police encounters (Mapping Police Violence data) is excluded from every download on this site, as of 2026-08-30. That data is used on this site’s own pages under written permission. Whether that permission covers redistributing derived counts in a downloadable file — as distinct from displaying them on a web page — is an open question that has not been put to the source and answered. Excluding it here is reversible the moment that is settled; shipping it and then having to retract a file that copies may already have been made of is not. This site would rather publish less than publish something it might have to take back.

No export contains a victim name, ever. deaths.victim_name and deaths.agency_text exist in the database only as cross-source matching keys and are excluded from every page and export by construction — not just because the deaths table itself is excluded above. That is enforced by an automated check against the live site, not by convention: scripts/gate-no-name-leak.sh.

No export contains an estimate, a modelled figure, or a ratio this site computed by combining numbers from different sources or different years. A rate reported directly by a source — an agency’s own officers-per-1,000 figure, as it filed with the FBI — is included as-is; a rate this site would have to calculate itself from two mismatched bases is not. See Method & sources.

Reliability

Every endpoint above reads the database at request time and fails closed: if a read does not complete, the response is an HTTP 503 with an explanatory body, never a 200 with fewer rows than the real count. A short file and a genuinely small result would look identical to anyone who saved it, so this site treats that ambiguity as unacceptable rather than convenient.

Believe something in an export is wrong? Tell us — every correction is published on Corrections.