Working With Vermont State Police Incident Data

Vermont State Police maintains an incident report database that anyone can access through their public records system. The raw data is available, but turning it into something useful requires knowing where the gaps are and what the numbers actually mean. I spent a few months pulling reports from thevsp.state.vt.us and cross-referencing them with agency-level statistics, and the process taught me more about the limitations of public crime data than I expected. The first step is understanding how VSP structures their incident data. Reports are categorized by offense type using standard incident codes, and each entry includes a date, location (typically a town name), the offense code, and whether an arrest was made. That's it. No narrative descriptions in the raw export, no suspect demographics unless you pull additional records, and no geographic coordinates at the street level for most entries. I downloaded about 18 months of incident data covering all Vermont townships where VSP has primary jurisdiction. The raw CSV came in at roughly 42,000 rows. Within the first hour of sorting through it, I hit the first wall: missing location precision. An entry might read "I-89 Northbound, mile marker 21" or just "Waterbury." If you're trying to map anything beyond broad regional trends, this gets frustrating fast. My workaround was to cross-reference VSP post boundaries with town boundaries manually. VSP divides the state into six barracks—Burlington, Rutland, Brattleboro, St. Johnsbury, Middlebury, and Newport—and each incident gets tagged with a barracks assignment. I used that as a fallback geographic anchor and built a lookup table mapping partial descriptions to specific municipalities when possible. It took a day to construct, and it covers maybe 78 percent of incidents. The rest stayed in the "ambiguous" bucket, which you have to accept.

Once the data was clean enough, the patterns started emerging. Vehicle thefts cluster around urban corridors—Burlington and Rutland barracks show the highest absolute counts, which makes sense given population density, but the rate per capita tells a different story. Some rural barracks actually have higher vehicle theft rates relative to their population. Drug offenses show a steady upward trend across all barracks over the two-year window, with fentanyl-related incidents making up roughly 34 percent of drug arrests by the end of the period. That percentage wasn't obvious from the surface-level press releases, which tended to emphasize seizure amounts over case counts. One thing that trips up most people analyzing this data: VSP incident reports are not the same as the uniform crime reporting (UCR) program submissions. The state FBI liaison office compiles UCR data separately, and the conversion process filters out certain incident types and reclassifies others. If you're comparing VSP incident volumes to national crime statistics, you'll get false discrepancies. I caught this when my numbers came out 22 percent higher than the published annual report for the same period. The difference was entirely in how aggravated assault and simple assault were classified between the two systems. Another nuance that matters is the role of civilian reporting. A significant portion of VSP incidents originate from local police departments rather than VSP patrollers. When a municipal department responds to a call and transfers the investigation to VSP—particularly in drug or fraud cases—the incident gets logged under VSP but the initial response came from somewhere else. If you're attributing crimes to VSP jurisdiction without accounting for this, you're double-counting in some categories. I resolved it by checking the originating agency field on each record and flagging incidents where the originating unit was not VSP. About 19 percent of the dataset fell into that category.

For anyone who wants to dig into this themselves, the Vermont State Police public records request portal is the entry point. You can submit a request online through the Vermont Department of Public Safety website, or you can request bulk data directly from VSP's research division. Bulk requests take longer—typically three to four weeks for a full year of data—but they're more complete than the summary statistics. If you need faster access, the Vermont Open Data Portal sometimes has lagged datasets (usually six to nine months behind current time) that are downloadable without a formal request. The limitations are worth stating plainly. Vermont's population is small enough that a handful of incidents in a single town can swing yearly averages by double digits. A single meth lab raid in a three-thousand-person town will make that municipality look like an outbreak zone in the raw data. Aggregated data at the barracks level smooths this out, but it also obscures localized problems that matter to residents. There's also the issue of reporting lag. Incidents from December often don't appear in the database until February or March due to administrative processing time, which distorts any month-over-month analysis if you're not aware of it. I learned this the hard way when I ran a year-over-year comparison in January and the prior year's December data was still missing, making the prior year look artificially lighter. If your goal is straightforward trend analysis—looking at whether certain offense types are increasing or decreasing over time—this data works fine. If you're trying to evaluate the effectiveness of specific policing initiatives, you need supplementary data like patrol hours, seizure values, and interagency coordination records that VSP doesn't make publicly available. The incident report alone won't tell you why a number went up or down, only that it changed.

Get the Full Details

Vermont State Police investigates shooting incident in Whitingham ...
Vermont State Police investigates shooting incident in Whitingham ...

The biggest practical tip I can offer: don't start with the full dataset. Pull a single month first. Get your cleaning pipeline working on 1,500 records before you attempt 42,000. I wasted two days trying to normalize the entire year at once and ended up with a mess of misclassified offense codes that took another week to fix. A focused test run on a single month will expose most of the data quality issues—missing values, inconsistent date formats, duplicate entries—before they compound across the full set. For those without a programming background, tools like Google Sheets can handle the basic aggregation if you're careful with filters and pivot tables. Excel works too but will start choking around the 50,000-row mark. If you want something more robust, Python with pandas or R with dplyr will process the full dataset in under a minute and give you proper control over the cleaning steps. The learning curve is real, but the alternative is spending hours manually filtering spreadsheets and hoping you didn't miss a row. There's also a quarterly crime summary that VSP publishes on their website, which gives you a high-level check against your own analysis. It won't replace digging into the raw data, but it's a useful sanity check. If your numbers are off by more than five percent from the published summary, something in your data pipeline is wrong.