A guide for California reporters and researchers
Over the past year numerous news outlets, including Santa Cruz Local, have investigated how data collected from Automatic License Plate Readers have been used by local and out-of-state law enforcement.
Thousands of police departments and sheriff’s offices across the country, including hundreds in California, have contracts with Flock Safety, one of the top providers of these cameras.
We have been asked how we reported on this story, and how it could be replicated other places. This guide aims to help journalists and other researchers obtain and analyze the data that shows when and why law enforcement searches for license plates in the camera data. This guide does not constitute legal advice.
Most of the records of how the data is used have not been made public. But members of the public can request the data from law enforcement agencies in California under the California Public Records Act.
For information about accessing public records in other states, consult your state’s public records law.
Jump to:
About the records
The Flock software used by law enforcement agencies has two main databases that record searches:
- An organization audit with searches officers in the agency have made.
- A network audit with outside searches of the agency’s data.
These can be exported as spreadsheets, each of which has several fields, or columns. They include:
- Name: the name of the officer logged as performing the search.
- Date: the date the search was performed.
- Org Name: the agency performing the outside search, in the network audit.
- Reason: entered by the officer for each search. This may be left blank.
- Total networks searched: how many agencies’ data was included in the search. This may be “1” if only the agency’s own data was searched.
- Total devices searched: how many cameras were included in the search.
- Time Frame: the timespan included in the data search.
- Filters: usually, filters the search for license plates from a particular state. They may also be for cars of a particular color, make or model.
Note that a search doesn’t mean that a particular license plate turned up in the data. From these databases, it’s not possible to see successful searches, or “hits”.
How to get the records
Under the California Public Records Act, any member of the public can request these records from any state or local law enforcement agency. Some researchers may be charged a fee for record production, while journalists or those acting in the public interest can request a fee waiver.
Some agencies have a portal or form to submit a public records request. If you’re unable to locate this form, you may email your request to a City Clerk, County Clerk, or directly to the law enforcement office.
Formulating your request
The request Santa Cruz Local and other researchers have used is as follows:
Please provide records related to the [city’s/county’s] Flock Safety automated license plate reader system:
- Organization Audit in Flock. The report should include data logged from the period of [date], to the date this request is processed. Per Flock’s documentation, the Organization Audit is available within the Insights tab and is defined as searches done within the agency.
- Network Audit in Flock. The report should include data logged from the period of [date], to the date this request is processed. Per Flock’s documentation, the Network Audit is available within the Insights tab and is defined as searches of the organization’s Flock network by any agency in the Flock System.
Based on our experiences, we’d also recommend adding the following:
I request that you:
- Provide documents in .csv format.
- Provide records on a rolling basis as they are produced.
- Segregate or redact any exempt information contained within a record so that the public information in the remainder of the record may be released.
- Broadly construe all provisions that further the public’s right of access, and apply any limitations on access as narrowly as possible, per Article 1, Section 3(b)(2) of the California Constitution.
- Provide a written justification for any denial of this request, in whole or in part, stating the specific exemptions from disclosure that you assert and the name and title or position of each person responsible for the denial.
Please contact me with any questions at [email/phone number].
See more details about the CPRA from the nonprofit First Amendment Coalition.
Troubleshooting responses
In California, agencies have 10 calendar days to respond to the request with a determination of whether the records exist, and if they do exist when they will be produced. In some cases, such as when there are many different records to be searched, agencies may extend the time for a response by 14 days.
You may face challenges receiving records following your request, including:
- Delays in providing the records.
- Excessive redactions.
- Claims that the entire request is exempt from public records requests.
The First Amendment Coalition operates a legal hotline to answer questions related to records requests. You can also try to:
- Call the staffer or law enforcement officer that handles records requests. Oftentimes, you can clarify your request, or negotiate about the timeline for a response.
- Push back against excessive redactions or delays with additional citations of the state’s public records laws, and examples of how other agencies have legally interpreted the same requests.
- Contact other staff, such as the city or county attorney, to alert them to possible violations of public records laws.
How to analyze the records
Ideally, the records you receive will be in a spreadsheet file format, such as .xlsx (Excel spreadsheet) or .csv (comma-separated values). In our experience, each of the two audits has one file per month.
There are two main ways we’ve used to look at and analyze the data. The first is the simplest: to use a spreadsheet program like Excel. This is great if you have no desire to engage with programming.
However, using a programming language like R or Python (we use R) is a more powerful and efficient way to combine all the data and analyse it. Programming can be intimidating, but you don’t have to be an expert to use it effectively.
Method one: in spreadsheets
These files can be opened with any spreadsheet software, like Excel or free equivalents like LibreOffice Calc.
These spreadsheets can be huge, with thousands of rows. Depending on your computer, they may be slow to open, and they may be too large to upload to Google Sheets.
Whatever software you choose, you can create filters for each of the columns (here’s how to do it in Excel and LibreOffice Calc). Those filters can help you find searches made on particular dates, for particular reasons, or by particular agencies.
Pivot tables are useful for aggregating data, like totalling the number of searches each agency makes.
Method two: in R
If you don’t already work with R, you’ll need to download two free programs: R itself, and R Studio, which provides a more friendly interface. This guide has more details on how to download the programs.
It’s worth spending some time getting familiar with R studio. But a lot of what you learn will likely come from trial and error.
We’ve created sample code that walks you through basic analysis, using network audits from Santa Cruz, Capitola, and Danville, Ill..
StackOverflow is useful for sorting out bugs. You can also try ChatGPT or other AI programs to help generate or check code. But as with all things, take AI-generated programming with a grain of salt, and double-check that it’s doing what you want it to do.
Overcoming redactions by cross-referencing datasets
Some agencies may not redact any fields, while others may redact several, including the dates and the reasons for searches. You may choose to fight back against these redactions during your public records request process. But if you’re unable to get the complete data, you may be able to fill in some of the redactions by using a dataset from a different agency.
For example, when Santa Cruz Local obtained Capitola Police’s Flock network audit, the reasons other agencies had searched Capiola’s data were redacted.
But most of those outside searches also included thousands of other agencies across the country, including Mukilteo Police Department in Mukilteo, Wash. Documents released from Mukilteo Police included the reasons for outside searches.
For example, Capitola’s data included a search at 2:41 a.m. on Jan. 1 from Dallas Police. The Mukilteo data included the same search from Dallas Police at the same time. That data listed the reason: “ICE+ERO,” likely referring to ICE’s Enforcement and Removal Operations.
You can match up searches by the timestamp and agency in Excel, or in R.
Here are some sources for other agency’s data:
What to look for
- Violations of SB 54, the California Values Act. Under this law, law enforcement agencies may not share someone’s personal information in most cases. Guidance from the California Attorney General has clarified that the law forbids agencies from any out-of-state sharing of license plate camera data.
- Violations of SB 34. The law prohibits sharing of license plate camera data with federal or out-of-state agencies.
- Searches for personal use, such as stalking.
- Vague or absent search reasons – these are generally not illegal, but they may violate agency policy.
Once you have the data, what next?
Depending on what your interests and goals are, there are many next steps you can take:
- If you’re a journalist covering a local agency that contracts with Flock, pitch your editors on a possible accountability story.
- If you’re not a journalist, you can pitch one to cover your findings. It helps if you can provide the original data so they can replicate your work.
- Contact your elected officials to share your findings.
- Ask your local law enforcement leaders to provide context or comment on the findings.
- Share the data online for others in your community to see – either through a personal blog, social media, a press release, etc.
- Link up with local organizers. There are many groups on social media who are already frequently publishing information on automated license plate readers.
If you’d like help requesting, analyzing or disseminating Flock data, Santa Cruz Local may be able to help or connect you with other resources. Email us at [email protected] or reach out to senior reporter Jesse Kathan at [email protected].
Example for analysis
This code provides an example for analysis of network audits from Flock Safety automated license plate readers.
This exercise requires:
- R itself, and R Studio, both free programs. This guide has more details on how to download. It’s worth spending some time getting familiar with R studio if you’ve never interacted with it before.
- Network audits from Capitola, Santa Cruz and Danville, Ill. obtained through public record requests. You’ll need to download and unzip them.
You’ll also need to know how to copy the file path for the folders containing the downloaded files, either in Mac or Windows.
For questions or suggested changes, create a pull request or email [email protected].
Questions or comments? Email [email protected]. Santa Cruz Local is supported by members, major donors, sponsors and grants for the general support of our newsroom. Our news judgments are made independently and not on the basis of donor support. Learn more about Santa Cruz Local and how we are funded.
