Open source

An open-source civic project. Not affiliated with the Government of Canada or the City of Toronto.

GitHub repo

Open Nshipyard · Toronto

Every camera, ranked: the full post-mortem on Toronto's traffic cameras.

Ontario banned municipal speed cameras on November 14, 2025. This is the post-mortem the City never published: 520 speed-camera sites from July 2020 to November 2025 and 321 red-light intersections from 2007 to mid-2026, ranked by tickets issued and implied fine revenue.

2,150,715

speed-camera tickets issued, July 2020 to November 2025

$161.3M-$268.8M

modelled fine revenue from speed cameras: a range, not an exact figure

1,304,807

red-light tickets issued, 2007 to mid-2026

$424.1M

exact implied fine revenue from red-light cameras ($325 per ticket)

…

What this does not show

  • Charges issued are not fines collected. Penalties are reduced on appeal, and some go unpaid.
  • Speed-camera revenue is a modelled range ($75-$125 per ticket), never an exact number. Red-light revenue is exact at $325 per ticket.
  • November 2025 is a partial month for speed cameras: the provincial ban took effect November 14, 2025. Red-light data for 2026 covers January to June only.
  • Only 185 of 520 speed-camera sites could be placed on the map. The rest are retired sites that no longer appear in the City's locations file, so they are ranked in the table but not drawn.
  • Every figure is stamped with its data vintage below. This page was built October 9, 2026.

Methodology

How the numbers were built.

Sources

Joins and normalization

  • Speed-camera charge rows share 520 unique site codes across 631 raw rows: when a camera rotated back to a site, the City reused the code with a new enforcement period. Rows sharing a code were summed into one site record, and the longest location label was kept.
  • The locations file carries no site code (the field holds the literal text "None" on every row), so sites were joined to map points by normalized location name: lowercase, punctuation stripped, street-type words expanded (Ave to Avenue, St to Street, and so on). 185 of 520 sites matched; the rest are retired sites the locations file no longer lists.
  • Red-light charges join to locations by code offset: location code = charge code + 3500. 301 of 321 intersections matched, which also cross-checks the two files against each other.
  • Months marked "-" in the speed-camera file (no enforcement that month) contribute zero tickets, not missing data.

The revenue models

  • Red-light: exact. The Ontario fine is a flat $325 per ticket ($260 set fine, $60 victim surcharge, $5 court costs), uniform province-wide. Implied revenue = tickets x $325.
  • Speed-camera: modelled range. Fines vary with speed over the limit under Ontario Regulation 355/22, and ASE cameras sit in community safety zones where the Highway Traffic Act doubles the per-kilometre rate ($5 becomes $10 per km/h for 1-19 km/h over). The City does not publish the speed distribution, so each site's revenue is shown as charges x [$75, $125] per ticket.
  • Calibration: published reporting put the Parkside Dr camera at 63,000 charges and $6.8M in fines (December 2024), an average of about $108 per ticket. That sits inside the $75-$125 range, which is why the range was chosen. This dataset's Parkside total through November 2025 is 70,243 charges, implying $5.27M-$8.78M.

What was left out

  • The 2026 red-light column covers January to June 2026 only; it is included as published and labelled partial.
  • The locations file reflects camera sites as currently published; historical sites are not recoverable from it, which is why the map is a subset of the ranking.
  • Nothing was invented: where a value could not be verified from the source files, it is absent and labelled, never estimated.

Data vintage: speed cameras July 2020 to November 2025, red-light cameras 2007 to June 2026. Downloaded and built October 9, 2026.

Developers

Take the data with you.

Every record behind this page is available as JSON and CSV, plus a REST API, an OpenAPI 3.1 document, and an MCP server for AI agents. MIT licensed.

REST API

GET /api/v1/summaryCitywide aggregates, top 25 lists, anchors, and methodology notes.
GET /api/v1/ase/sites?q=&limit=Search speed-camera sites by street name, ranked by tickets.
GET /api/v1/ase/site?code=A207One speed-camera site: full record plus the monthly series.
GET /api/v1/redlight/intersections?q=&limit=Search red-light intersections by name, ranked by tickets.
GET /api/v1/redlight/intersection?code=2578One intersection: full record plus the annual series.
GET /api/openapi.jsonThe OpenAPI 3.1 document for this API.
POST /mcpMCP server (JSON-RPC 2.0): camera_site_search, camera_site_lookup, intersection_search, intersection_lookup, postmortem_summary.

Data

Download the underlying data.

The same normalized files this page is built from, so journalists and researchers can check every number.

ase_sites.csv

520 speed-camera sites: tickets, modelled revenue range, enforcement periods, coordinates where available.

Download
redlight.csv

321 red-light intersections: tickets, exact implied revenue, enforcement periods, coordinates.

Download
summary.json

Citywide aggregates, top-25 lists, anchors, sources, and methodology notes.

Download