Methods
How we work
- Start from a primary government file, not from another newsroom’s spreadsheet.
- Record the URL, fetch time, HTTP status, and a hash of the raw bytes.
- Recompute every published number from those rows at build time.
- If a file is missing, show an empty state. Do not interpolate.
- Keep geometry out of the database except points. Polygons live as simplified snapshots.
- Arrest records: drop names, dates of birth, and physical descriptions before anything is stored.
- Flag series seams (UCR SRS → NIBRS in 2025; CCRS agency mix) next to the chart.
- Correct in public on the corrections page.
Limits that will not go away on their own
- No BPD incident extract — needs a CPRA request.
- No structured council votes — needs minutes PDF parsing.
- No campaign-finance bulk file — the city eFile API is undocumented; we will not reverse-engineer it.
- Census ACS needs an API key for automated pulls.