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.
A three-part data system tracking NYPD officers’ trials, complaints, lawsuits, and compensation. Built for transparency, community organizing, and accountability—grounded in public safety and community values.
Focus
Service
Link
Three-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 v110
- Data Collection
- Automated Python/Playwright web scraper
- Sources: NYPD Trials, 50-a.org, NYC Open Data
- Output: Monthly CSV files
02
HERMES v1.5.0
- ETL Pipeline + API
- Bash scripts for PostgreSQL import
- FastAPI REST endpoints
- Delta detection for stale records
- Self-healing for retro-fitting data
03
MERCURY v1.5.8
- WordPress Frontend
- Responsive officer database interface
- Search, filter, sort capabilities
- CSV fallback protection
- Plug-in w/ 4 built-in themes
Technology Stack
| Layer | Technologies |
|---|---|
| Scraping | Python 3.11, Playwright, asyncio |
| ETL | Bash 5.x, PostgreSQL 15+ |
| API | FastAPI, uvicorn, psycopg2 |
| Database | PostgreSQL (MayFirst hosting) |
| Frontend | WordPress 5.8+, PHP 7.4+, Vanilla JS |
1. SCRAPING (Monthly)
NYPD Trials + 50-a.org + NYC Payroll
↓
Python Playwright scraper
↓
CSV output (YYMM-copwatchdog.csv)
2. ETL (Automated)
Bash import scripts
↓
PostgreSQL (cwd_raw schema)
↓
Delta detection (identify stale records)
↓
Rescrape list generation
3. API (Live)
DOGHOUSE API endpoints
↓
WordPress plugin
↓
Public website interface
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 (FastAPI)
- CSV export capability
- Documented database schema
- 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






