/api/v1/tickets/by_ward?ward=10Ticket stats for one ward
{
"ward": "10",
"name": "Spadina-Fort York",
"tickets": 811816,
"fines": 62531325,
"y2023": 286351, "y2024": 267802, "y2025": 257663
}An open-source civic project by Nshipyard. Not affiliated with the Government of Canada or the City of Toronto.
Nshipyard Canada · Project 06
Toronto issues about 2.8 million parking tickets a year. The City publishes every ticket: date, time, infraction code, fine, and street address. This project geocodes three years of tickets (2023-2025) to wards and neighbourhoods, so enforcement patterns become visible instead of anecdotal.
Explorer
Type a street name, a neighbourhood, a ward, or an infraction description. Counts come from the geocoded 2023-2025 slice.
Every infraction code in the slice, with its official description, ticket count, and average set fine. Toronto's parking rules arrive as unexplained numbers; this is the translation.
| Code | Description | Tickets | Avg fine |
|---|
Showcase
Every geocoded ticket placed in its neighbourhood. Downtown wards absorb a share of enforcement far beyond their share of streets, and a handful of blocks do most of the work.
Ticket counts by normalized street name, 2023-2025. One address can dominate a whole street.
Enforcement follows the workday: it climbs from 7h, peaks mid-morning, and falls off after 18h.
Summer months run hotter than winter, year after year.
Weekdays carry enforcement; Sundays are quiet.
For developers
Three consumption paths, same canonical data. REST for applications, OpenAPI for integration, MCP tools over streamable HTTP for AI agents.
/api/v1/tickets/by_ward?ward=10Ticket stats for one ward
{
"ward": "10",
"name": "Spadina-Fort York",
"tickets": 811816,
"fines": 62531325,
"y2023": 286351, "y2024": 267802, "y2025": 257663
}/api/v1/tickets/infractions?code=5One infraction code, documented
{
"code": "5",
"desc": "PARK-SIGNED HWY-PROHIBIT DY/TM",
"tickets": 769476,
"avg_fine": 56.62
}/api/v1/tickets/streets?q=kingMost-ticketed streets matching a name
{ "count": 3, "streets": [
{ "street": "KING ST W", "tickets": 53753 }, … ] }Connect your agent
Pick your harness, copy the prompt, send it to your agent. Your agent runs the setup itself.
Set up the Toronto Parking Tickets MCP server so I can query it from here. 1. Run: claude mcp add --transport http toronto-parking https://this-site.example/mcp 2. Run `claude mcp list` to confirm it connected. 3. Get the ticket stats for ward 10 and tell me its yearly trend, and show me the result.
Methodology
Slice: City of Toronto open data “Parking Tickets”, calendar years 2023-2025, retrieved 2026-10-08. About 2.8 million tickets a year.
Geocoding: each ticket's street address was matched to the City's Address Points (Municipal) file on house number plus normalized street name. The address point supplies the ward; the 158-model neighbourhood comes from a point-in-polygon join on official boundary geometries.
Match rate is reported on this page from the computed data. Tickets with no house number (street-only locations, intersections) cannot be address-matched and are counted as unmatched.
What this cannot answer: who was ticketed (tag numbers are masked), whether a ticket was paid or disputed, or why enforcement concentrates where it does. Density reflects where officers write tickets, not only where violations happen.