Every record on this site follows the same sourcing standard, and this page states it in full. The short version: never guess, cite the underlying record, and let an empty field beat a wrong one.
The 2-halves rule
A full record needs 2 halves: proof the cameras exist and proof of how they were approved. An agency’s transparency portal proves deployment: camera counts and retention periods, published by the agency itself. The approval half needs its own source: a council journal, meeting minutes, a city release, or dated local news coverage. A portal alone makes a lead, never a record; candidates with no approval trail get listed as skips, with the reason stated.
Aggregators are lead sheets, never sources
Lists that compile other people’s reporting point us at candidates, and that is all they do. Every fact on a record cites the underlying source: the journal, the minutes, the agency page, or the outlet that reported it with a dateline. When a national list said 11 cities we had never checked canceled their contracts, all 11 were already on the tracker, sourced from their own records.
Look-alike discipline
City names repeat across states, and the dateline decides, never the headline. Delaware, OH is not Delaware. Monroe, WA is not Monroe County, IN. The portal index lists 3 Windsors and 2 Daytons, plus city names like University Heights that sound like campuses. Every record pins its jurisdiction before it exists, and campus agencies get their own names so they never block a city record.
Count conflicts
When a portal count and a documented purchase disagree wildly, the documented figure wins and the record says both. Gastonia, NC documents 9 purchased cameras while its portal reports 617; the record keeps the 9 and explains. Suffolk, VA documents 74 against a portal figure of 268. Modest gaps in the other direction, where a portal simply runs newer than old reporting, take the portal figure with the portal cited.
Votes and names
Vote tables store 1 row per official, with names exactly as the journal or article spells them. Unnamed rows read exactly that: not named in the source. A tally only becomes rows when the counts match a documented result, and termination tallies live in summaries. When a journal publishes names later, they replace the unnamed rows 1 for 1, the way Toledo’s 8-4 gained all 12 names from the council journal API.
The publish gate
A record cannot publish without sources and a last-verified date. Every write gets read back before it counts, and every batch ends with a verification pass: exports matching the record count, pages rendering, links resolving. Corrections follow the corrections standard when we get something wrong.
What we do not do
No anonymous claims, no forum threads as sources, no AI tools cited as authority, no vendor marketing as fact, and no mockery of any official by name. The records document decisions; readers judge them.
Terms the records use carry exact meanings; the glossary defines each one.
The data page documents the dataset fields and the export formats.