Voidly · Custody & enforcement accountability

The 287(g) Wave — Who Signed Up

Section 287(g) lets ICE deputize local police into federal immigration enforcement, one signed memorandum at a time. ICE publishes the list; this dataset reads all of it: 2,123 agreements across 1,804 agencies — 129 of them signed before 2025, 1,994 in the eighteen months since.

Agency level only; zero personal data. No officer, detainee, or any individual appears in the source columns or in this dataset — every record is a government body and a signed agreement. Memorandum links are unwrapped to bare ice.gov paths with tracking parameters removed, and the raw workbook is never republished (its file metadata carries ICE employee names). Source defects — misspelled counties, literal error strings, a five-digit year — are preserved and corrected in the open, never silently. Figures are ICE's own (participating-agencies file, workbook last modified 2026-07-10); this compilation was generated 2026-07-11. To dispute or correct an entry, contact us. Built under our data standards.

Signed agreements
2,123
Law-enforcement agencies
1,804
Signed since Jan 2025
1,994
States + territories
38 + 2

The wave, month by month

The program's own dates tell the story. From 2019 through 2024 the file accumulates 129 agreements. In 2025 alone it adds 1,100; 2026 has added 894 more through 2026-07-10. The earliest task-force agreement in the file is dated 2025-01-30 — every one of the 1,417 street-level enforcement agreements postdates it.

Agreements signed per month since January 2025, from the SIGNED column of ICE's own file. The pre-2025 base (129 agreements, 2019–2020) is summarized rather than charted, to keep this view on the 2025–2026 surge.

Three models, one signature

An agency signs one memorandum per model, and 319 of the 2,123 agreements are second or third models held by the same agency. The jail models operate inside custody; the task-force model deputizes officers on the street.

ModelAgreementsWhat it deputizes
Task Force Model (TFM)1,417Immigration-enforcement authority exercised during routine police work — the street-level model. First appears in the file 2025-01-30.
Warrant Service Officer (WSO)528Serving ICE administrative warrants on people already held in the agency's jail.
Jail Enforcement Model (JEM)178Interrogating and processing people in the agency's custody for immigration violations.

Signers by government type: 1,204 county agencies, 839 municipal, 80 state-level.

Where the signatures are

Zero is data here. Twelve states record no signed agreement at all — the four Pacific states (California, Oregon, Washington, Hawaii), a seven-state Northeast cluster (New Jersey, Connecticut, Rhode Island, Vermont, Maine, Maryland, Delaware), and Illinois — while Texas alone holds 463 agreements. The file records the zeros without comment; several of those states bar their agencies from signing by statute.

AK2ME0WI23VT0NH25WA0ID13MT6ND15MN10IL0MI7NY13MA1RI0OR0NV5WY19SD8IA2IN43OH22PA108NJ0CT0CA0UT19CO1NE9MO114KY50WV38VA30MD0DE0AZ10NM2KS50AR128TN99NC28SC53DC0OK88LA65MS51AL70GA81HI0TX463FL349

Signed agreements per state, from the file's own rows. Guam and the Northern Mariana Islands (3 agreements) have no tile.

Top 15 states

StateAgreementsAgenciesTFMWSOJEMFirst signed
Texas463378261148542019-11-05
Florida34928427465102019-04-24
Arkansas1281027934152020-06-18
Missouri1141021021022025-03-21
Pennsylvania108108105302025-03-07
Tennessee99833356102020-06-08
Oklahoma888076752020-03-13
Georgia81643727172019-12-31
Alabama7054519102020-06-09
Louisiana6555491062025-02-28
South Carolina5348361432020-06-08
Mississippi514442542025-03-17
Kansas5039182842020-03-17
Kentucky504845232025-03-05
Indiana433933732025-03-03

All 38 states, Guam and Northern Mariana Islands, and every agreement row ship in the keyless JSON.

The file, as ICE keeps it

The authoritative federal register of local immigration-enforcement power is a spreadsheet with literal error strings in its county column. This dataset preserves every defect and publishes every correction rather than silently fixing them:

  • 235 rows carry a literal spreadsheet error string (#N/A, #NA, N/A) where the county should be — counted here as “no county recorded in ICE's file,” never guessed.
  • 41 rows needed a verified county correction — misspellings (“Pulaksi,” “Flager,” “Kenawha”), an invented Louisiana parish, a Virginia independent city recorded as a county. Each correction was checked against the agency named on the row and is listed in the defect ledger.
  • 4 county values are unresolvable without guessing — including a “Washington County” in West Virginia, which has none — and are kept exactly as recorded, with the reason published.
  • One state is misspelled (“NEW HAMSPHIRE”), one signing date reads 6/30/20026, and 217 memorandum links arrived wrapped in Outlook email-security redirects — unwrapped here to their bare ice.gov targets.
  • A dated observation (2026-07-10): ICE's program page claimed 34 warrant-service states and 39 states overall; the file it links to supports 33 and 38. Stated as a file-versus-page discrepancy only.

Method & caveats

  • Source: ICE's 287(g) participating-agencies file (ice.gov), a US government work in the public domain. The file updates near-daily; this build reflects the participating-agencies file, workbook last modified 2026-07-10.
  • One record per signed agreement (agency × model). Agencies holding multiple models appear once per model, so agreements (2,123) exceed distinct agencies (1,804).
  • County FIPS codes join the Census county-equivalents gazetteer on (state, normalized county): 1,884 of 2,123 rows resolve; 235 record no county; 4 are kept as recorded with a published reason.
  • Regenerate: python3 scripts/build_287g.py. Every gate fails closed — an unknown column, state, model, or county value stops the build until a human reviews it.
  • The dataset records who signed what, when — it does not measure enforcement activity conducted under any agreement.

Machine access

The full dataset — metadata, defect ledger, state and monthly aggregates, and all 2,123 agreement records — is one keyless fetch:

import requests
d = requests.get("https://ai-analytics.org/287g/index.json").json()
tfm = [a for a in d["agreements"] if a["model"] == "TFM"]
print(len(tfm), "task-force agreements;", d["meta"]["byYearSigned"])

Also listed in the Voidly datasets manifest and /data. License: public domain source; this compilation CC0.

The federal-custody trio: the Detention Ledger (the ICE detention system) and the BOP Ledger (whom the federal government holds directly). Same file discipline, same honest defaults, same keyless access.