Lee la versión en español de este artículo. Copublished with Outlier Media.
Local police in Michigan arrested and reported migrants to federal immigration agents hundreds of times in recent years.
Public records obtained by Michigan Public and Outlier Media offer a rare look at the role of local law enforcement in the Trump administration’s effort to detain and deport as many people as possible.
Key conclusions of our reporting:
- Michigan law enforcement agencies reported migrants at least 388 times between 2021 and 2026.
- These arrests typically occurred as a result of minor issues, like a cracked windshield, jaywalking, a broken-down car, or simply an officer’s suspicion.
- Some agencies made dozens of calls in 2025 and 2026, compared with few or none in 2021-24.
- Forty-three agencies, including six Michigan State Police units, recorded at least one such incident between 2021-26.
Key limitations of our reporting:
- The data is incomplete and likely undercounts police involvement. We cannot confirm our data captures every immigration arrest or every agency involved. Communities not represented may still have had such arrests.
- We do not definitively know whether most people in the incidents we compiled were ultimately detained, deported, or remain free in the U.S.
Got tips?
Outlier Media is investigating the role of metro Detroit police departments in federal immigration enforcement. Share your story with reporter Koby Levin via Signal at koby_det.18 or email at koby@outliermedia.org.
Michigan Public is investigating immigration detention and local police collaboration across the state. Reporter Adam Yahya Rayes can be reached at rayesa.24 on Signal or rayesa@umich.edu.
Where the data comes from
Most of our data — 304 of 388 reports — comes from incident reports obtained via Freedom of Information Act (FOIA) requests to local law enforcement agencies. These documents include written narratives from officers explaining the circumstances of the arrests.
We requested records from 86 agencies. We identified those agencies through a statewide crime database and federal court rulings on habeas corpus petitions for detained migrants. We also requested records from almost every municipality bordering Detroit.
Copy our work
Is your police department working with U.S. Border Patrol? Use this template to obtain the latest information. Make a copy of the form, fill out the highlighted portions, and email it to your municipality’s Freedom of Information Act coordinator.
Another 76 incidents in our dataset come from Border Patrol Facebook posts about arrests. These posts were screenshotted and cataloged manually.
We only counted Facebook posts that clearly described collaboration with local law enforcement. We excluded posts that appeared to describe the same incident as one of our records obtained through FOIA, as well as posts that lacked enough detail to be effectively cross-referenced.
A small portion of the dataset, seven incidents, comes directly from the Michigan Incident Crime Reporting (MICR) database managed by Michigan State Police. We obtained the database through a FOIA request for incidents categorized as immigration arrests.
When a MICR record matched a Border Patrol Facebook post by date, locality and number of arrestees, we replaced the Facebook post with the MICR record in our final dataset.
Our records requests evolved as we learned how agencies recorded immigration arrests.
We initially requested incidents coded as immigration arrests, categorized as “03000.” After reviewing the MICR data, we began requesting records of specific incidents, as well as any records referencing calls to, collaboration with, or detainer requests from federal immigration enforcement.
Some agencies initially said they had no immigration incidents. But subsequent requests citing specific MICR incident numbers returned records the agencies previously said did not exist.
The Michigan Incident Crime Reporting database helped identify immigration incidents but was not reliable enough to use without additional confirmation.
We excluded hundreds of MICR incidents after discovering that some departments miscoded immigration arrests. A common error was using the “illegal entry” immigration arrest code instead of the “unlawful entry” code for burglary cases.
At the same time, records obtained directly from law enforcement agencies revealed that many immigration reports did not appear in the Michigan Incident Crime Reporting database because they weren’t coded as immigration-related.
Many agencies fulfilled our requests for free or at low cost. Some set high costs we could not reasonably pay, saying their systems could not easily search for immigration-related incidents.
Some denied requests, citing various exceptions in state law, or failed to respond before statutory deadlines.
Because our requests evolved over time, agencies searched different date ranges. As a result, some agencies’ records include more recent incidents than others.
How we processed the data
We relied on a manual review of the crime codes and citations, along with the narratives provided in the police reports, to describe the severity of the alleged offenses.
We defined law enforcement encounters as “minor” if there was no alleged crime, or if the alleged crime was a misdemeanor traffic violation (such as driving with an invalid license) or civil infraction (like jaywalking or driving with excessively tinted windows). We classified driving under the influence of drugs or alcohol to be a “serious” crime, even though it is technically a misdemeanor.
All Border Patrol social media posts and MICR incidents in our dataset were counted as “unknown,” because those sources did not provide enough detail about the circumstances of the police encounter.
We used Google Pinpoint’s “structured data” tool to extract key data points from all our incident reports. This tool uses our annotations on a set of example documents to extract similar pieces of information across a larger set of documents. It is separate from Pinpoint’s generative AI tools.
We extracted data from police reports, agency by agency, into spreadsheets.
Separate spreadsheets tracked Border Patrol Facebook posts and MICR incidents.
We also manually reviewed each document to ensure it belonged in our dataset and was categorized correctly.
Then, we used a Google Apps Script to merge all the extracted data into one master spreadsheet; standardize case numbers, dates and place names; remove duplicates; and flag potential duplicates for manual review.
The script flagged 120 potential duplicates. We removed 33 records, as most of them duplicate Border Patrol Facebook posts. Some agencies wrote more than one report and case number for a single incident. Those duplicates were flagged and removed as well.
We used chatbots Claude and Gemini to help write the script.