CopWatchdog exists to collapse the timeline between police misconduct and public accountability. When an NYPD officer is scheduled for trial, our automated system immediately extracts and publishes their complete public record—complaint history, lawsuit patterns, disciplinary outcomes, and compensation data—creating real-time transparency at the exact moment it matters most. By aggregating trial schedules from NYPD court calendars with complaint data from 50-a.org and salary information from NYC Open Data, we transform scattered public records into actionable intelligence for journalists, organizers, and community advocates. This is live accountability infrastructure that empowers communities to respond to police corruption and misconduct as it moves through the system, not after the fact.
CopWatchDog
Hitting the iron while it’s hot.
An automated four-part data system tracking NYPD officers’ trials, complaints, lawsuits, and compensation. It runs itself every month; the site shows one card per officer, sorted by their next court date. Built for transparency, community organizing, and accountability—grounded in public safety and community values.
Focus
Service
Link
Four-part Data Management System
The data is already public; we make it accessible, searchable, and immediately relevant to the people who need it to organize, report, and demand justice in real time.
01
THOTH v118
- Data Collection
- Python / Playwright scraper, runs on the host every month
- Sources: NYPD Disciplinary Trial Calendar (CSV), 50-a.org, NYC Open Data payroll
- Output: monthly CSV (YYMM-copwatchdog.csv) + articles.csv
02
HERMES v1.10.0
- ETL Pipeline + Database
- Bash import into PostgreSQL (cwd_raw schema)
- Scheduled job on the 1st of every month, 02:00 UTC
- Delta detection for stale records (Phase II)
03
MERCURY v2.12.9
- WordPress Frontend
- One card per officer: next court date, charge, complaints, settlements, photo, press coverage
- Sorted by upcoming court date; search, filters, detail view with court-date history and articles
- Signature Yumyoda theme + 3 built-in themes
Technology Stack
| Layer | Technologies |
|---|---|
| Scraping | Python 3.13, Playwright (Chromium), urllib |
| ETL | Bash 5, PostgreSQL 15+ |
| API | CERBERUS_API v2.8.3 — Node.js 20, Express, pg |
| Database | PostgreSQL on May First (psql002) |
| Frontend | WordPress 6, PHP 8, jQuery, MERCURY plugin |
1. SCRAPING (1st of every month, automated)
NYPD trial calendar CSV + 50-a.org + NYC Payroll
↓
THOTH (Python / Playwright) on the May First host
↓
CSV output (YYMM-copwatchdog.csv)
2. ETL (same job, minutes later)
HERMES Bash import
↓
PostgreSQL (cwd_raw schema)
↓
Row counts verified per month
↓
Delta detection (Phase II)
3. API + SITE (live, always on)
CERBERUS_API (one record per officer, articles, stats)
↓
MERCURY WordPress plugin
↓
yumyoda.com/blog/copwatchdog
Developed For
01
Organizers
- Identify officers with extensive complaint histories
- Track lawsuit patterns and settlement costs
- Monitor precinct-level trends
- Research specific officers by badge/name
02
Researchers
- Historical assignment tracking
- Complaint-to-substantiation ratios
- Salary vs. lawsuit cost analysis
- Monthly data snapshots (YYMM versioning)
03
Developers
- Open REST API (CERBERUS_API, Node.js / Express)
- CSV export capability
- Documented database schema (HERMES/SQL)
- Version-controlled codebase
04
The People
- No commercial use or capitalist profit
- No law enforcement, military, prison, or surveillance applications
- Community transparency and accountability
- Anti-carceral data practices
Additional Info
DATA TRACKED (44 Fields)
Officer Identity:
- Name, Badge, Rank, Precinct
- Race, Gender, Tax ID, Email
Service History:
- Current Assignment, Assignment Start
- Previous Assignments, Service Start Date
Disciplinary Records:
- Total Complaints, Allegations
- Substantiated/Unsubstantiated counts
- Within Guidelines count
Legal Actions:
- Number of Lawsuits
- Total Settlements (currency)
Compensation:
- Base Salary, Pay Basis
- Regular Hours, Regular Gross Paid
- OT Hours, Total OT Paid
- Total Other Pay
Trial Information:
- Court Date, Time, Room
- Case Type






