About SlugMeter

Mapping parking enforcement
in Santa Cruz

A real-time map and 6-year historical archive of ~218,000 parking citations, built as a UCSC data scraping class project.

How it works

The City of Santa Cruz publishes parking citation data through an online AIMS (Automated Issuance Management System) portal where anyone can look up a citation by its number.

Citation numbers follow a predictable format: SC{device} {year}{sequence}. For example, SC3 2600042 is the 42nd citation from device SC3 in 2026.

My scraper checks for new citations every few minutes by querying the next expected sequence number for each of the 8 active enforcement devices. When new citations are found, they get geocoded and stored in a database, and appear on the live map in real-time via WebSocket push.

Enforcement devices

The city operates 8 enforcement devices labeled SC1 through SC8. These are hardware units, not individual officers.

SC8 is notably the busiest, accounting for roughly 25% of all tickets. Its volume suggests it is likely a vehicle-mounted License Plate Recognition (LPR) system, while the others appear to be handheld units used by parking enforcement officers on foot.

Data & Privacy

No personally identifiable information (PII) is stored. License plate numbers and VINs are explicitly stripped before any data enters my database. I only store citation details that are already publicly available: location, time, violation type, fine amount, and vehicle make/model/color.

All data comes from the City of Santa Cruz's public AIMS portal. Parking citation data is public record under the California Public Records Act (CPRA).

I scrape at a low rate (a few requests per minute) with a descriptive User-Agent header to be respectful of city infrastructure.

Security recommendations for the City

This project exists because the AIMS portal has several architectural weaknesses that make bulk data collection trivial. In the spirit of transparency, here's what the city could do to prevent this:

1. Use non-sequential citation IDs

Citation numbers follow a predictable SC{device} {year}{sequence} format, making it trivial to enumerate every citation ever issued. Switching to random or UUID-based identifiers would make bulk enumeration infeasible.

2. Require proof of ownership for lookups

Currently, anyone can look up any citation by number alone and receive full details. Requiring the license plate or VIN in addition to the citation number would ensure only the vehicle owner can access their citation, a common pattern used by other municipalities.

3. Implement rate limiting

The AIMS portal has no apparent rate limiting. A simple per-IP throttle (e.g. 10 lookups/minute) or progressive delays would make bulk scraping orders of magnitude slower without affecting normal users who look up one or two citations.

4. Add CAPTCHA or bot detection

Even a basic CAPTCHA on the lookup form would prevent automated scripts from querying the system. More sophisticated approaches like browser fingerprinting or behavioral analysis could detect automated access patterns without impacting the user experience.

5. Separate public and private data

While citation metadata (location, time, violation type) is public record, the portal also exposes vehicle details in the same response. Splitting the API to return only the minimum needed for payment lookup would reduce the surface area of exposed data.

None of these are exotic mitigations. Most modern citation portals already implement several of them. The combination of predictable IDs, no authentication, and no rate limiting is what makes a project like SlugMeter possible in an afternoon.

Data Coverage

The database contains ~218,000 citations spanning 2019–2026, scraped from all 8 enforcement devices. Of these, roughly 89% are geocoded and appear on the map. The remaining ~11% cannot be placed on a map because their locations reference parking lot space numbers (e.g. “LOT 3 SPACE #3042”) or intersection formats that geocoding services cannot resolve.

These ungeolocated citations are still included in all aggregate statistics, charts, and the Insights page. They are only absent from the map view. The citation search on /citations shows all records regardless of geocode status.

Frequently asked questions

What is SlugMeter?
SlugMeter is a real-time parking citation tracker for the City of Santa Cruz, California. It maps where and when parking tickets are issued, with a searchable archive of over 218,000 citations dating back to 2019.
Where does the data come from?
All data comes from the City of Santa Cruz's public AIMS (Automated Issuance Management System) portal. Parking citation data is public record under the California Public Records Act (CPRA). My scraper checks for new citations every few minutes.
Is personal information collected?
No. License plate numbers and VINs are explicitly stripped before any data enters my database. I only store publicly available citation details: location, time, violation type, fine amount, and vehicle make/model/color.
How often is the data updated?
The live map updates in real-time. New citations appear within minutes of being issued via WebSocket push. Historical data is continuously backfilled and currently covers 2019 through 2026.

Tech stack

Frontend

Next.js 15

Database

Supabase

Real-time

WebSockets

Maps

MapLibre GL

Charts

Recharts

Geocoding

Nominatim

Hosting

Vercel

Styling

Tailwind v4

Built by

Ivan Kuria

Ivan Kuria

Student at UC Santa Cruz. Built this because I recently got a ticket lol :)

Inspired by the work of Ryan Walz on SF parking citation visualization.