Building a crime map with police scanner audio
This artical was originally published in the seventh edition of Unredacted Magazine by Michael Bazzell: https://inteltechniques.com/issues/007.pdf
In the third edition of Unredacted Magazine Michael Bazzell discussed the utility of police scanners monitoring neighborhood activity. I believe he also mentioned their utility for OSINT investigations on a podcast episode sometime around 2021. It gave me the idea at the time to start transcribing police scanner audio with one of Google Text To Speech APIs. I was trying to see if I could build a historical transcript database and cross-reference incidents with my university’s campus crime logs and mug shots from the county jail. I gave up on the project because speech-to-text was too expensive in 2021.
I had enough free time this summer to finish the project, https://copcrawler.com. It’s a police scanner transcript full text and semantic search engine. The audio archives are scraped from broadcastify.com, and I’m transcribing them with Whisper on a couple of old laptops. A concerning amount of police departments still share phone numbers, driver’s license numbers, addresses, license plates, vehicle descriptions, crossroads, and a bunch of other uniquely identifiable information on unencrypted radio.
Because of the low quality of most radio audio feeds, the transcripts are not that accurate, but good enough to find common police phrases like “shots fired”, “vehicle accident”, or a well spoken street name. The use cases for this will vary depending on what specific information you are seeking and none of this will work if the department encrypts their radio. I’m going to focus on something most of us would find useful, crime maps. You don’t have to use copcrawler to do this and can use this command line tool (https://github.com/NotJoeMartinez/broadcastify-cli) to download and transcribe the audio to any broadcastify feed, but you will need a premium account and have to build out your text search solution.
While I’m only choosing to make a crime map for demonstration purposes, I should note companies like LexisNexis offer publicly available crime maps however they tend to exclude small cities and rely on agency reporting for the dataset. One of those excluded cities is my former college town, Lubbock Texas.
As you’ll see in a bit it helps to be familiar with the street names of the area you are reaserching. Depending on the feed you are searching the transcripts are split up into 4-10-second segments and the recordings are usually 30 minutes. The short text segments mean keyword searches are more effective. The keywords we will map out are: “Shots Fired” and “Burglary”.
When you click on one of these rows it will launch an audio player with the full transcript of the 30-minute segment at the time stamp where the keyword matched.
Whenever the dispatcher announces a crime over the radio they usually give an address or crossroad with a brief description.
As I explained earlier, Whisper is only good enough to get the important keywords, the correct transcription of the above is “Burglary possibly in progress in the area of 2nd and Uvalde”. We can use the Google maps autocomplete feature to complete the address.
The operators often use landmarks like restaurant and apartment names with the address of the incident and you can use these to verify what you heard. After you have verified the address grab the coordinates with a right click then paste that data into a spreadsheet.
Date, Address, Lat Lon
"August 12, 2024 at 09:40 PM",6320 19th St,"33.5785, -101.9539"
"August 12, 2024 at 11:48 AM",5215 S Loop 289,"33.5349, -101.9249"
"August 12, 2024 at 12:19 AM",4702 86th St,"33.5163, -101.9132"
Continue this for as many days as you like, it will depend on the frequency of the incidents and the size of the city. For a small town like Lubbock, I felt 50 shots fired calls between August and May was enough to get a picture of where the hot spots were. There a several free sites to plot coordinates on a map but I recommend this one (https://mobisoftinfotech.com/tools/plot-multiple-points-on-map/), you’ll need to remove all spaces from the CSV and add ,blue,marker
to each row before pasting it into the box and you should get something like this back.
I did a little extra and added the shots fired data into MapBox with a HeatMap (https://github.com/NotJoeMartinez/lubbock-scanner-heatmap)
With only a month of audio data we were able to discover something anyone who’s spent a day in lubbock could tell you: stay away from Avenue Q.