Magnetic Norse Magnetic Norse Records releases
The file room

Every record I pry loose
ends up right here.

The whole file, plus the paperwork that pried it loose. The only rows I touch are the ones with somebody's name typed into them, and every one of those is logged.

Free · No email · No account

Kalamazoo, Michigan · Released August 2026
Kalamazoo Department of Public Safety
Flock camera audit logs
Michigan FOIA request P022224-061526
116,017
Distinct searches
182
Days covered
9
Outside agencies
78.5%
Run from outside town
57.2%
No case number
0.30%
Rows I redacted
Download the whole production
ZIP · both audit logs, 10 analysis tables, the contract, the camera deployment tracker, the appeal, the Mayor's determination
Fund the next request
The City didn't charge me for this one. Agencies usually do.

Read it without downloading it

These three are in the zip as well. They open in the browser so nobody has to pull 18 MB onto a phone to find out whether this is real.

Count the rows and you get a bigger number

The file the City produced has 140,561 rows in it. There are not 140,561 searches in there.

Flock hands over two overlapping reports. One logs every search that queried Kalamazoo's camera network. The other logs every search run by a Kalamazoo Public Safety account, wherever it reached. A search that is both gets written down twice.

140,561 rows produced
− 24,544 repeat rows
= 116,017 distinct search IDs

24,542 search IDs show up more than once. All but one show up exactly twice, and one shows up four times. The repeats are identical on all 10 substantive columns and differ only on which report they came from and on the officer name field, which is blank on the network report. Both files are in the download, so you can run the dedupe yourself and get the same answer.

Which number should you use

Use 116,017 for searches. The 140,561 figure is the row count of the export, and it inflates Kalamazoo's own department by about 21% because the doubling only touches the agency that owns the cameras.

Who else was searching

78.5% of the searches of Kalamazoo's cameras came from somewhere other than Kalamazoo. Michigan State Police alone ran 74,448 of them, which is 64.2% of the whole log. Behind that, 4,953 from the Department of Corrections and 4,428 from Grand Rapids.

The Mayor's determination says the City supplemented its response by providing "complete and unredacted versions of all data-sharing agreements, memoranda of understanding, or interoperability agreements between the Kalamazoo Department of Public Safety and any federal agency, state agency, or private entity governing access to or use of Flock Safety ALPR data."

What arrived was one memorandum of understanding, with Kalamazoo County Consolidated Dispatch. It is in the download. Nothing was produced that covers Michigan State Police, who ran 64.2% of the searches.

That one memorandum has two problems on its face. Only Flock signed it, on June 11, 2026, and the signature and date fields for both Kalamazoo County Consolidated Dispatch and Kalamazoo Public Safety are empty, while the document says it starts once fully executed. Its numbered sections also run 8, 10, 11. There is no section 9. It is in the download exactly as it was produced.

What I took out

Agencies get named. People do not.

417 rows carry a redaction, which is 0.30% of the file. That is 103 distinct entries: free-text operator notes where somebody typed a name, an address or a plate into a field nobody was checking. 225 case labels were replaced with tags like [CASE-A] so you can still count how often one investigation repeats without me republishing a case number the City itself withheld.

The City had already redacted the plate and case-number columns before it sent me the file. That is the City's call, not mine, and it is why nobody, including me, can tie a search in this log to a car or a person.

Worth knowing, because it is the first thing a skeptic asks. The blanks in those two columns are not redactions. 98,737 rows read REDACTED under License Plate and the other 17,280 are blank because those search types take no plate at all. Under Case #, 49,617 read REDACTED, meaning a case number was there. The other 66,400 are blank because nobody entered one. That is the 57.2% above, and it is a gap in the record rather than a gap in what the City handed over.

Full row-by-row accounting is in REDACTION_LOG.csv inside the download.

Who paid for this

Getting this file took a records request, a partial denial, an appeal, and the Mayor's signature on a written determination. That was before anybody read anything.

Then came the reading. 140,561 rows. 1,611 operator notes gone through one at a time, because that is the only way to find the ones where somebody typed a person's name into a field nobody was checking. 417 rows came out by hand.

Nobody funds this. No organization behind it, no sponsor. It's me, a records budget I do not actually have, and a pile of Claude credits.

The file stays free either way. If it was worth something to you, what your money buys is the next one.

Fund the next request

Nobody has to vote to keep it

The contract is in the download. It runs $99,900 a year for 39 plate readers and one Flex camera, and it renews for another 12 months on its own unless somebody sends a written notice of non-renewal 30 days before the term ends. Keeping it takes no vote and no signature. Ending it takes a letter.

The copy in the download was signed for the City by its Chief Operating Officer in August 2025. Kalamazoo put its first Flock cameras up in 2021, and I have not gone back to check whether anybody voted on that. I am not going to tell you nobody approved it when I have not looked.

The order form also does not state a term commencement date on its face, so I am not going to tell you when the notice window opens or closes. The City can answer both of those in a sentence each. Those are fair things to ask them.

Your town probably runs the same cameras
The request letters that pried this loose are free at foia.magneticnorse.com. Fill in your agency, send it, and tell me what comes back.