crime.pulse
DATA THROUGH 2026-03-31
§ About the data · methodology · v1

What's in, what's out, and why.

This dashboard is built on the Toronto Police Service Community Safety Indicators series, with Statistics Canada population denominators. Below is the methodology it stands on. Read it before comparing anything on this site.

§ 01 · ADR-001 / data-sources.md

Sources.

All incident data is sourced from the Toronto Police Service Community Safety Indicators. The dashboard reads pre-aggregated JSON produced by the build pipeline, which is why cross-filter UI stays fast even on mobile. Data covers reports through 2026-03-31, imported 2026-07-09.

Incidents
Toronto Police Service · Community Safety Indicators
Population (city)
Statistics Canada · City of Toronto CSD estimates by year (table 17-10-0155-01)
Population (nbhd)
Toronto Neighbourhood Profiles · 2021 Census, 25% sample data
National context
StatCan table 35-10-0026-01 · Crime Severity Index
Boundaries
City of Toronto · 158 official neighbourhoods · 2021 boundary set
§ 02 · ADR-002

The default unit is incidents per 10,000 residents.

Counts visually penalize high-population neighbourhoods: a denser neighbourhood with the same per-capita rate as a quieter one looks more dangerous on the page, even though it isn't. So every chart on this site defaults to rate per 10,000 residents, with raw counts available via the sticky toggle in the header. Toggling units changes the meaning of every number on screen at once.

i
Per-capita rates flatten the population effect but introduce their own caveat: a low-population neighbourhood with a single incident can look artificially high. Read absolute counts alongside the rate.
!
Two denominator caveats. Per-neighbourhood rates use the 2021 Census 25% sample population (the long-form sample count, slightly below the full Census count, so rates read roughly 1% high). And that 2021 denominator is reused for every year, including 2022–2025: Toronto's population has grown since 2021, so recent rates in fast-growing neighbourhoods read high. City-wide rates do not share this caveat; they use StatCan's annual estimates.
§ 03 · ADR-003

Why a choropleth, not a dot/cluster map.

The source publishes approximate lat/lng per incident and explicitly forbids exact-address presentation. A dot map would imply a precision the data does not have, and risks tying records to specific buildings, blocks, or people. We instead aggregate to neighbourhood level: 158 cells, each shaded by the active category's rate per 10K residents.

!
No incident dots in v1. No addresses, no coordinates, no maps of approximate points. If you need point-resolution data, the TPS open data portal publishes it directly with the same caveats.
§ 04 · ADR-001

Scope and exclusions.

This dashboard is intentionally narrow. Knowing what it doesn't cover is part of reading it correctly.

×
No sexual assault. Excluded by the TPS source from this indicator series. Not a design choice on our part.
Toronto only. Peel, York, Durham, and Halton (the rest of the GTA) are out of scope for v1.
!
2026 is YTD (through 2026-03-31). Both numerator (incidents) and denominator (population) are incomplete. Excluded from all 10-year comparable visuals. A YTD toggle is available but is always paired with a disclaimer.
i
Five categories. Assault, Auto Theft, Break & Enter, Robbery, Theft Over $5,000. The five comparable indicators TPS publishes for this series.
§ 05 · Refresh cadence

This is a trend dashboard, not a live ticker.

The TPS source refreshes quarterly. There is no "Recent incidents" widget, no relative date strings ("3 days ago"), and no live feed. The chronological feed uses absolute dates only. The site itself is updated periodically, with no fixed schedule. Every freshness number on the page (topbar pill, this card, the footer) reflects the data itself: the latest report date the imported data covers, and when it was imported, not when the site was last rebuilt.

SOURCE REFRESH   Quarterly
DATA THROUGH   2026-03-31
IMPORTED   2026-07-09
§ 06 · Ethics

What this dashboard doesn't do.

  • No language calling a neighbourhood "safe" or "dangerous." Show the data, don't label the place.
  • Counts are never the default visualisation. That would visually penalise high-population neighbourhoods.
  • No addresses, no point-resolution maps, no per-incident identifiable detail.
  • No relative-date framing ("yesterday"). This is a trend tool, not a crime ticker.
  • Colour is never the only cue. Every category has a distinct glyph and a label.
  • WCAG AA contrast minimum, including chart strokes and choropleth fills.
§ 07 · Colophon

Colophon.

Type: IBM Plex Sans & IBM Plex Mono. Charts hand-rolled in SVG against an oklch palette. Map: Leaflet with CartoDB Dark Matter tiles, 2021 Census neighbourhood polygons. Built with Astro; reads pre-aggregated JSON.

Toronto Crime Pulse · v1.0.0-rc · No tracking. No cookies. No ads. No paywall. Open methodology.