Home / Sources
Source inventory
Method & sources explains what Police Census is and how it reads. This page is the machine-truth companion: a live row count and the latest load status for each of the 19 datasets listed below, read straight from the database at request time — the count is taken from that list, so it cannot say something the database does not currently hold.
| Dataset | What it is | Live rows | Source | Last ingest | Gate |
|---|---|---|---|---|---|
| Agencies agencies | The agency spine: identity, ORI, type, county, coordinates and NIBRS status for every law enforcement agency on the FBI’s register. A full refresh and upsert on every run. Puerto Rico, the two Virgin Islands district agencies (St. Thomas and St. Croix) and Guam were added 2026-08-30 — the register held them all along, this table simply had not asked for them yet. | 19,645 | FBI Crime Data Explorer | ok 2026-10-13 12:12 19,640 written | A guard rejects any state code returning zero agencies unless it is on an explicit expected-empty list, so a broken fetch cannot pass as "no agencies here". |
| Crime & clearances agency_crime | Monthly offence and clearance counts per agency from the FBI’s summarised agency series, as reported by the agency itself. A count is what the agency filed, not a measure of how much crime occurs there; reporting to the FBI is voluntary. 16,242 agencies, 2019–2026 | 2,479,870 | FBI Crime Data Explorer | ok 2026-10-13 13:25 642,086 written | scripts/test-guard.ts proves the ingest guard (agencySeries) rejects a state- or national-level series being written in as if it were a single agency’s — the exact mistake that would silently inflate one department’s numbers with its whole state’s. |
| Arrests agency_arrests | Monthly arrest counts per agency, all offences combined, from CDE. Only the agency’s own series is kept: the same response also carries its state’s and the nation’s, and those are discarded rather than read as the agency’s. 18,679 agencies, 2019–2026 | 1,377,396 | FBI Crime Data Explorer | degraded 2026-10-13 14:15 354,256 written | The same agencySeries guard as crime (scripts/test-guard.ts). It refused one payload — the Crime Data Explorer returned a territory-wide series for Puerto Rico in answer to a request for one agency — so Puerto Rico has no arrest figures here and that run is recorded as degraded. |
| Workforce agency_employment | Officer and civilian headcount by year, and the population the agency itself reports for, 1960–2025. | 736,539 | FBI CDE, bulk employment file | ok 2026-10-13 12:12 736,539 written | No dedicated verbatim gate. Values are the FBI’s own reported series, loaded by a full refresh; nothing here is estimated or interpolated. |
| Military surplus (1033 programme) agency_equipment | Equipment transferred to police under the DoD 1033 programme. DLA does not publish an ORI for recipients, so records are matched to agencies by name — 88.9% matched. An unmatched record is left unattached rather than assigned to a guess. | 75,087 | DLA Law Enforcement Support Office | ok 2026-08-25 16:03 75,087 written | match_method records how (or whether) each row was matched, so a bad matching rule can be found and undone later. See /equipment for the live match rate. |
| Deaths during encounters deaths | Deaths recorded during police encounters, from two sources: Mapping Police Violence and Fatal Encounters, whose coverage years are in the table below. Where both recorded the same death it is counted once; the live-rows figure is that deduplicated count, never the sum of the two sources. See "Deaths: two sources" below. Police Census publishes counts only — the person’s name is never rendered. deduplicated: 15,550 Mapping Police Violence + 22,406 Fatal Encounters; 9,091 duplicate records excluded | 37,956 | Mapping Police Violence, Fatal Encounters | ok 2026-08-30 15:55 31,497 written | scripts/gate-no-name-leak.sh scans the actual served HTML of the agencies with the most deaths on record for a real victim name, and self-tests its own detector so a broken check cannot silently pass. |
| Federal funding grants | COPS Hiring, Byrne JAG and DNA Backlog Reduction awards since October 2019, reported at state and programme level only. The recipient of a federal award is usually a city, not a police department — only 2.6% of awards name a law enforcement agency directly, so no page on this site attributes an award to a specific department. | 13,585 | USAspending.gov | ok 2026-08-25 16:35 13,585 written | Structural, not a script: the query layer has no per-agency grants function, so a per-agency figure cannot be printed even by mistake. |
| Legal authorities legal_authorities | US Code sections and CFR parts that give the legal basis for something on the site. | 47 | govinfo.gov (US Code), eCFR (CFR) | ok 2026-08-25 20:34 32 written | scripts/gate-legal-verbatim.sh refetches every row from its live source and asserts a token unique to that section is still present, plus that the stored body hash still matches the stored text — catching upstream drift and DB-side drift separately. |
| Case law legal_cases | Case-law citations tied to a specific context on the site, e.g. Graham v. Connor for use-of-force. | 31 | CourtListener, bulk citation index | failed 2026-08-25 20:00 30 written | Every row requires human_verified before a query can return it. A citation such as 488 U.S. 1001 can resolve to more than a dozen different CourtListener clusters, so nothing reaches the site without a human confirming which cluster is the actual case. |
| Federal oversight federal_oversight | DOJ Civil Rights Division pattern-or-practice matters (34 U.S.C. § 12601) against named agencies. | 28 | DOJ Special Litigation Section | ok 2026-08-26 14:27 28 written | scripts/gate-oversight-verbatim.sh refetches DOJ’s own case list and reports a LABEL CHANGE (e.g. Enforcement → Closed) distinctly from a row DOJ has removed entirely — the two look the same in a naive diff but mean very different things to print about a named department. Every row also requires human_verified, same rule as case law. |
| State statutes state_statutes | Sections of the California Penal Code, reproduced verbatim from the California Legislature’s own bulk archive. California only. The heading stored with a section is the structural node it sits under in the code, not a description of what the section says. | 12 | California Legislature, leginfo bulk archive | ok 2026-10-08 23:58 12 written | scripts/gate-ca-statutes-verbatim.sh re-reads the live archive and asserts each section still has exactly one active row, the same version id, the stored text hash and a token unique to that section — and checks the stored text against its own hash separately, so drift at the source and drift in the database are reported apart. |
| Washington use-of-force policy register wa_force_policy | The Washington Attorney General’s register of whether each agency’s use-of-force policy is consistent with the AGO model policy: the AGO’s own status string and “Last Updated” date, reproduced as published. The status is not a yes/no — some rows read “Contracts with” another agency, which is not a failure to submit a policy. | 271 | Washington Attorney General | ok 2026-10-08 23:28 271 written | scripts/gate-wa-policy-verbatim.sh re-fetches the AGO page and compares every stored status, date and link byte for byte, reporting a changed label, a changed date and a removed row as three different things. |
| UCR/NIBRS participation state_participation | Reporting participation to the FBI’s UCR/NIBRS programme, by state and year. | 3,659 | FBI CDE participation file | failed 2026-08-30 09:14 | State-level only by construction: this table carries no ORI and no agency rows, so it structurally cannot be reported per-agency. |
| Officers assaulted leoka_assault | Assaults on officers by year and weapon type, 1995–2025. The source file carries no ORI, so agencies are matched by state and name — 78.7% matched. The FBI’s own officers-killed columns are empty on every row of the file as pulled; this table reports assaults only, and no page on this site states an officers-killed figure. | 381,145 | FBI LEOKA bulk file | ok 2026-08-30 10:25 0 written | match_method records how each row was matched, the same reversible pattern as the 1033 equipment table; an unmatched row is left ori = NULL rather than guessed. |
| Officers assaulted, by assignment and time leoka_assignment | The second LEOKA file: assaults on officers by time of day and by weapon split by whether the officer was injured. It counts the same kind of event on a different breakdown from the table above and the two do not agree, so they are never added together or placed in one row. The file’s officers-killed columns are empty on every row as pulled and no page states an officers-killed figure. | 158,070 | FBI LEOKA bulk file | ok 2026-08-30 10:25 0 written | match_method records how each row was matched to an agency, the same reversible pattern as the table above; an unmatched row is left ori = NULL rather than guessed. |
| Officer pay (state level) officer_pay | Bureau of Labor Statistics wage estimates for three police occupations — patrol officers, first-line supervisors and detectives — by state. These are survey estimates, not measured values, so each is only ever shown with the BLS’s own release label. State level only: there is no agency column, and a state median is never attributed to a named department. May 2025 OEWS Estimates | 153 | BLS Occupational Employment and Wage Statistics | failed 2026-08-30 15:45 | Structural: the table has no ORI column, so a figure cannot be attached to an agency. The ingest refuses to load at all if it cannot read the BLS’s own release label from the source file. |
| California POST certification actions (statewide only) ca_post_agency_actions | Peace-officer certification actions published by California POST, aggregated before storage; no officer name is stored. Statewide only, never a per-agency measure: POST’s own footnote says “Last Employing Agency” is not necessarily the reporting agency or the agency where the serious misconduct occurred, so these actions are not attributed to any department. statewide only: 7 action types, each published as its own total — the types cover different periods, so they are never summed | 338 | California POST, Peace Officer Certification Actions | degraded 2026-10-09 00:10 338 written | The ingest searches the aggregated buckets, the stored rows and the run note for officer names and rolls the load back on any hit. POST itself states it is aware of issues affecting the accuracy of the certification status it lists. |
| Hate crime incidents hate_crime_incidents | One row per hate crime incident the FBI’s bulk file lists, with the FBI’s own bias and offense wording kept verbatim. A count exists only where the file has one: an agency with no row for a year may have reported zero, may not have reported, or may not take part in the hate crime programme, and nothing this site holds can tell those apart. So no page states a zero, and there is no rate anywhere. Rows whose ORI is not in the current agency register are kept here but never reach an agency page. incidents the FBI's file lists, 1991–2025; 11,231 ORIs have at least one | 277,135 | FBI Crime Data Explorer, hate crime bulk file | ok 2026-10-12 15:21 277,135 written | scripts/gate-hate-crime.sh compares a sample of stored agency-years with the FBI’s per-agency API and checks the load itself, so a lost or mis-parsed row is caught. It cannot establish participation, and an API zero is not read as evidence of one. |
| Texas racial-profiling report filings (TCOLE) tx_profiling_filings | Texas only. Whether each department filed a racial-profiling report with the Texas Commission on Law Enforcement (Full or Exempt, TCOLE’s own words), and when. A filing fact, never the report’s contents: the demographic columns are not loaded. Re-use terms are not verified: TCOLE publishes no licence or re-use statement for these workbooks, only a copyright footer. Credited to TCOLE. Texas only: filing records for 2,752 departments, report years 2024–2025 | 5,490 | Texas Commission on Law Enforcement | ok 2026-10-12 15:30 5,490 written | scripts/gate-tcole-filings.sh re-reads TCOLE’s workbooks and compares every stored status, stop count and department name, and asserts against the live database that the table holds no demographic column, label or value. |
The status shown for each dataset is its most recent load attempt, not necessarily its last success; Method & sources lists the last successful load of every source.
Deaths: two sources
| Source | Coverage | Records | Terms |
|---|---|---|---|
| Mapping Police Violence (MPV) | 2013–2026. The only source covering 2022 onward. | 15,550 | Attributed to its compiler. The written scope of this site’s right to display the data is being confirmed (note dated 11 October 2026). |
| Fatal Encounters | 2000–2021. The project wound down in 2021. | 31,497 | Stated on fatalencounters.org: “we let anyone use the data for any reason for free”. Checked 11 October 2026. |
| Deaths counted, deduplicated | Each death once, wherever it was recorded. | 37,956 | 15,550 MPV + 22,406 Fatal Encounters. |
Deduplication rule. The two overlap where their years overlap. A Fatal Encounters record is flagged as a duplicate, and excluded from every count, when it matches an MPV record on state, exact incident date and the first and last name of the person (the name is used only to match and is never displayed). 9,091 Fatal Encounters records are excluded on this rule, leaving 15,550 + 31,497 − 9,091 = 37,956 deaths. The excluded records are kept in the database, flagged, so the match can be inspected. A death recorded with a different date or spelling in the two sources would not be matched. Every record count on this page is read from the database when the page is requested.
Fatal Encounters publishes the agency as free text, so its records are attached to an agency only when the name resolves to exactly one agency in that state. Until 11 October 2026 the duplicates were not excluded and this site published 47,047; see Corrections.
Integrity rules, in brief
Every gate above runs against the live site or the live upstream source, not against a fixture that can go stale — several of them exist specifically because a source that returned a clean 200 turned out to be a soft-404, a paywall interstitial or a relabelled case. A build-time gate also refuses to ship any page carrying a degraded-read message baked into it, because the build container has no database connection at build time and would otherwise freeze that failure into the deployed image. Datasets marked human_verified above default to false: a row is invisible to every query until a person confirms it, not once an automated match merely looks plausible.
If a number on this page or elsewhere on the site looks wrong, see Corrections for how to report it and how every published fix is logged.