How We Counted 3.9 Million Searches — and How You Can Check Our Work
Our finding that five North Carolina agencies’ Flock cameras were searched nearly 3.9 million times in three months rests on 10.5 million rows of the agencies’ own audit logs. Extraordinary numbers deserve an ordinary standard: show your work. So here is the entire pipeline — every source file, every fingerprint, the code, and the deduplicated dataset — written so an independent reporter can reproduce the findings, or prove us wrong.
This is the technical companion to the main investigation. If you just want the story, start there. If you want to check our arithmetic, keep reading — and download everything.
The claim, and the arithmetic
We combined the Flock Network Audit files that five North Carolina agencies produced under public-records requests, each covering a recent three-month audit window in 2026 — the exact window differs by agency (UNC Charlotte’s covers March–May; UNC Pembroke’s April–July). A Network Audit logs every outside search that touches an agency’s cameras. Stacked together, the sixteen monthly files hold 10,486,248 rows. But one Flock search fans out across the shared network at once, so the same search — identical down to Flock’s unique search ID — appears in more than one agency’s file. Remove those duplicates and you are left with the number of distinct search events:
| Raw audit rows ingested | 10,486,248 |
| Duplicate search IDs removed | − 6,608,358 |
| Unique searches | 3,877,890 |
| Distinct searching agencies | 3,904 |
That is the whole trick, and it is not much of one: 10,486,248 − 6,608,358 = 3,877,890. The rest is bookkeeping you can redo.
Where the data comes from
Every raw file is published, unaltered, at the Internet Archive. Download them and check them against us:
Each file shares the Flock schema: ID, Name, Org Name, Total Networks Searched, Time Frame, License Plate, Reason, Case #, …. The field that carries the story is Org Name — the searching agency — which these five produced intact and which New Hanover County redacted. The Name field (the individual officer) is blacked out to *** in every production; we make no attempt to recover it.
The five steps
The whole pipeline is about a hundred lines of standard-library Python. It:
- Normalizes each of the sixteen files to seven columns and tags every row with the agency and file it came from (its provenance).
- Deduplicates on the
IDcolumn — first occurrence wins — so a search that hit four of our networks is counted once. - Assigns a state to each searching agency from its name: the two-letter code where present (“Houston TX PD”), otherwise the full state name (“Texas Department of Public Safety” → TX); the federal government is counted as one. About 0.5% cannot be classified.
- Parses the reason to its base category, so “Traffic Infraction” and “Traffic Infraction — redacted” count together.
- Tallies by agency, by state, and by reason.
The script prints the headline numbers and writes a deduplicated dataset you can open in anything.
Verification — how you know we didn’t cook it
We publish the SHA-256 fingerprint of every source file in a provenance manifest. A fingerprint is a short string that changes if even one byte of a file changes, so you can confirm the files you download are byte-for-byte the ones we analyzed. If the hashes match and the code is what we say it is, the output is not a matter of trust.
The complete package — the analysis code, the SHA-256 manifest, the deduplicated dataset, the spreadsheet of results, and the written methodology — is posted as a single Internet Archive item: archive.org/details/deflockilm-nc-flock-aggregate-2026.
How to challenge it
We would rather be corrected than wrong. Concrete ways to attack the finding:
- Recompute. Download the sixteen files, run the script, and see whether you get different totals.
- Re-classify. The state logic is one small function — swap in your own rules and watch whether the ~90% out-of-state figure moves. (It doesn’t, materially.)
- Attack the dedup. If you think the
IDcolumn is not a reliable unique key, test it: count distinct IDs a different way and compare.
Two limits we state up front, both of which push the real numbers up, not down: UNC Charlotte’s and Kure Beach’s monthly files are truncated at Excel’s 1,048,575-row cap, so their totals are floors — Kure Beach even re-produced its Network Audit as native CSV, and every monthly file still stopped at that exact row (the details are here); and some agencies produced the Reason field blank, so the traffic-infraction count is a floor too. And what the data cannot show: the audits name the searching agency, not the individual officer, the plate, or (in some files) the reason. We attribute no search to any named person and allege no wrongdoing by any specific searcher.
Take the whole thing
The source archives are linked above. The code, the fingerprints, the deduplicated dataset, and the results spreadsheet are all in the aggregate archive item. If you find an error, write to mark@deflockilm.org and we will correct it in public.
Methodology for “Who Is Searching North Carolina’s Flock Cameras?” Source records are the Flock Network Audits produced by the Carolina Beach and Kure Beach Police Departments and the police departments of NC A&T, UNC Pembroke, and UNC Charlotte (each agency’s most recent three-month audit window in 2026; the windows differ by agency), published in full at the Internet Archive. This page is general information, not legal advice. First published August 1, 2026.
You’re not a suspect. So stop being tracked like one.
It takes one minute. Add your name — then tell the officials who represent you to take the cameras down.
