crime.pulse
DATA THROUGH 2026-06-30
§ 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-06-30, imported 2026-07-27.

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-009

The default unit is raw incident counts.

Every chart on this site defaults to raw incident counts — the unfiltered record of what was reported — with rate per 10,000 residents one toggle away. Toggling units changes the meaning of every number on screen at once.

!
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. When comparing neighbourhoods, switch to rates.
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 in the active unit — raw counts by default, rate per 10K residents one toggle away (ADR-009).

!
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-06-30). 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.
Neighbourhood coverage. 6,094 reports (1.6% of the imported corpus) have no usable 158-neighbourhood assignment. They remain in Toronto-wide counts and rates, but cannot appear in neighbourhood charts, maps, or feeds.
§ 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-06-30
IMPORTED   2026-07-27
§ 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 the default (ADR-009), but rates per 10K stay one toggle away everywhere — switch to rates when comparing neighbourhoods of different sizes, because raw counts visually penalise high-population areas.
  • 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: Space Grotesk & JetBrains Mono. Charts hand-rolled in SVG against an oklch palette. Map: Leaflet with CARTO tiles, 2021 Census neighbourhood polygons. Built with Astro; reads pre-aggregated JSON.

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