Search events per month click a bar for one month, or use the slider
Where the searchers are click a state to filter — every state is clickable, including the small ones
Type of agency
Camera networks swept per query how wide each search reached
Stated reason category top 20 — read this first, the field changed completely in 2025-12
Agencies click a row to pin one agency — or use the agency search at the top to match several
Reason text what officers typed, with personal names masked
Every distinct wording used three or more times. Filtering by agency, state or agency type narrows this list and recounts it — so you can see what one department actually typed. Month, search type, reason category and networks-swept filters do not reach it. Searching the box below filters this list only; the charts above are not narrowed by it.
What “era” means
The reason field was a free-text box until 2025-12, then became a dropdown of preset categories. Each wording is tagged by where its events fall:
- free-text era used only before the change — somebody typed it. Nearly all distinctive wording is here.
- dropdown era used only after — almost always one of Flock's preset categories.
- spans the change used on both sides, which mostly means a preset category that also existed as typed text.
Filtering to one era also keeps the wordings that span it, since those genuinely occur in both. More on the change.
How the search was run the tool used, never the purpose
How to read this
What a search event is, what each field means, and the things about this data that will mislead you if nobody says them out loud.
What a search event is
One search event is one searcher running one query. An officer at some department types in a plate (or a description, or a time and place) and asks the network what it has. That is one event, whether the query reached one camera network or seven thousand.
This corpus holds — search events run by — agencies. It is every query that reached the cameras of six Connecticut towns whose audit exports we hold — so it is a floor. A query that touched none of those six is invisible here, however many other networks it swept.
Which town's export happened to carry a row is data lineage, not a property of the search, so it is not a filter on the dashboard. It is listed at the bottom of this page.
The reason field changed completely in December 2025
For most of this corpus the “reason” was a free-text box — type anything, or nothing. In 2025-12 it became a dropdown of preset categories. The changeover took about two months:
| Month | Search events | Using a preset category | Share |
|---|
What that looks like in the actual data
The most common reasons officers gave, either side of the change. This is the whole point — these are two different instruments, not two samples of one:
free text November 2025
Whatever an officer typed. Note inv,
investigation, Investigation and
INVESTIGATION arriving as four different values for one
idea, and how little any of them tells you.
dropdown March 2026
Picked from a menu. Consistent, countable — and no
longer capable of saying anything the menu does not offer. The trailing
- is where free text would go if the officer added any.
Why this matters for searching the text
Because officers largely cannot type anything any more, searching the reason text mostly tells you about the past. Finding few recent mentions of a term does not mean the activity stopped — it means the box people typed it into stopped existing.
| Reason text mentions… | Free-text era | Dropdown era | Share before the change |
|---|
So if you search the reason list for
ICE and find little after 2025, that is a fact about the
form, not about immigration enforcement. The reason list has an
era filter for exactly this reason: compare like with like, or say plainly
that you cannot.
Search type — what each one actually does
This field records which tool produced the query. It never records the purpose, and no type is inherently more or less legitimate than another.
| Type | What the officer did | What it returns |
|---|---|---|
lookup |
Started from a specific plate — they already have the number and want its history. | Everywhere that plate was photographed, across every network the query reached. |
search |
Started from a place and a time, or a vehicle's characteristics — colour, make, body type — rather than a plate. | Every vehicle matching, e.g. everything that passed a given camera in a window. This is the one that sweeps people who were simply driving past. |
… - Mobile |
The same query from the phone app rather than a desktop console. | Identical results. It tells you where the officer was, not what they were doing. |
convoy |
Asked which other vehicles were travelling with a given one. | Vehicles repeatedly seen alongside the subject — an association tool, not a location one. |
visual / freeform |
Typed a written description of a vehicle instead of a plate. | Vehicles matching the description. Searching by appearance rather than by identity. |
multiGeo |
Ran one query across several separate areas at once. | Matches from every area in the set. |
searchSummary |
Retrieved a summary of a previous search rather than running a new one. | Nothing new — a review action. |
Naming is Flock's own, from the export.
The descriptions of convoy, multiGeo and
searchSummary are our reading of the product's behaviour;
lookup and search are unambiguous in the data.
Camera networks swept — the most misread number here
Every Flock customer — a police department, but also a business park or a homeowners' association — operates a network of cameras. When an agency shares its network outward, other agencies' searches run against it too.
“Networks swept” is how many of those a single query reached. It is recorded per event as a count, never a list, so you can see that a query touched thousands of networks but never which ones.
- A query sweeping one network is a department searching its own cameras.
- A query sweeping thousands is a nationwide search. The town whose export captured it was one network among those thousands — not a target.
- So a high count against any town means that town's data was inside somebody's wide query, not that anyone was investigating the town. This is the single most common misreading of this data.
- It also means a raw event count measures how heavily an agency uses the platform, far more than any interest in Connecticut.
Every other field
| Field | What it is | What to watch for |
|---|---|---|
| Month | When the query ran, Eastern time. | Coverage differs by town, so the earliest and latest months are thinner than the middle. |
| Agency | The organisation that ran the query, as the export names it. | No officer or user is recorded. You cannot tell whether a department's events came from one person or a hundred. |
| Agency state / type | Parsed from the agency name, then classified. | Names arrive in a dozen formats, so state totals move a little depending on how they are resolved. |
| Reason | The justification given. Free text, then a preset category — see above. | Never validated against a case or a statute. A blank reason means you were not told, not that nothing was written. |
What this record cannot tell you
- Who ran the search. Agency only, never the officer.
- Which plate, or what came back. The log records that a query ran — not the result, a hit, a stop or an arrest.
- Which camera, or where. No location per event.
- Whether a search was proper. Nothing here identifies misuse, and no reading of a single row could.
- That something did not happen. With no officer, no plate, and a reason field that was optional and is now a menu, absence means not recorded — not did not occur.
- A missing case number is not a finding. Around 89% of events carry none; that is how the vendor exports data.
Obtained by other people’s work
None of these records were volunteered. Each export was released only after somebody asked and waited. Row counts here are rows carried by that export, so they sum to more than the number of search events — most queries appear in more than one town's copy.
| Export | Rows carried | Covering | Obtained by |
|---|
Names in reason text are masked
Officers type people into the reason
box — suspects, partners, witnesses, people who were simply nearby.
Those are replaced with [name]. The rule comes from the corpus
itself: a word is masked unless it is ordinary vocabulary or the data shows
it to be shared police shorthand. It deliberately over-masks — a masked
acronym costs a reader nothing, an unmasked surname costs a stranger
something.