Backlog rate by ward
Share of 2022-2024 requests still open (New or In Progress), with 2020 median household income. 25 wards.
An open-source civic project. Not affiliated with the Government of Canada or the City of Toronto.
Nshipyard Canada · Project 05
Toronto's 311 line takes millions of service requests a year, logged as 952 free-text request types across 9 city divisions. This is the versioned taxonomy: division, section, request type, with counts, plus a ward-by-ward backlog analysis built from 2,225,151 requests filed between 2022 and 2026.
…
service requests analyzed, filed 2022 through 2026
…
distinct request types normalized into one hierarchy
…
city divisions, from Solid Waste to Toronto Water
…
requests from 2022-2024 still open: the measurable backlog
Explorer
Search above, or pick a division, to browse the taxonomy. Pick a ward below for its backlog profile.
Pick a ward to see its backlog rate, income, and request mix.
Showcase
The open data has no completion dates, so nobody can compute true time-to-close from it. What can be measured is the backlog: requests filed in 2022-2024 that were still open in the October 2026 extract. Correlated against 2021 Census median household income by ward, the relationship is essentially flat: r = 0.18. What predicts backlog is the kind of work, not the neighbourhood's income. Parks tree work sits open for years; solid waste closes almost everything.
Share of 2022-2024 requests still open (New or In Progress), with 2020 median household income. 25 wards.
The division matters more than the ward. Parks requests are mostly tree work.
Each dot is a ward. The cloud is flat: income does not predict backlog.
Backlog is a proxy, not a measurement of speed. A request can sit open for legitimate reasons: seasonal tree work, multi-year capital projects, or duplicate reports. The correlation of 0.18 is descriptive, not causal, and it is weak enough to treat as no relationship. Ward income is a 2021 Census median; it says nothing about who filed each request.
Methodology
The City of Toronto open data file '311 Service Requests - Customer Initiated', yearly extracts for 2022, 2023, 2024, 2025, and 2026, retrieved 2026-10-08. 2,225,151 rows. Request types were normalized for case and whitespace only; the wording is the City's own. Each type got a stable code: T311-D for divisions, T311-S for sections, T311-R for request types.
A request counts as backlog if it was created between 2022 and 2024 and was still in 'New' or 'In Progress' status in the October 2026 extract. 2025 and 2026 are excluded as too recent to judge. 'Completed' and 'Closed' both count as resolved; 'Cancelled' is excluded as not actionable.
Built October 2026 from City of Toronto open data.
For developers
Three consumption paths, same canonical data. REST for applications, OpenAPI for integration, MCP tools over streamable HTTP for AI agents.
/api/v1/requests/taxonomy?q=potholeSearch the 952-type taxonomy by text, filtered by division
Try it →{
"total": 2,
"types": [
{ "code": "T311-R0007",
"division": "Transportation Services",
"type": "Road Pothole / Road Damage",
"count": 35691, … }
]
}{
"ward_code": "10",
"ward_name": "Spadina-Fort York",
"backlog_rate": 0.1185,
"median_household_income_2020": 89000,
"top_division": "Municipal Licensing & Standards", … }/api/v1/requests/lookup?code=T311-R0007One taxonomy code: division, section, count, share
Try it →{
"code": "T311-R0007",
"division": "Transportation Services",
"section": "Road Operations",
"count": 35691, "share": 0.016 }Connect your agent
Pick your harness, copy the prompt, send it to your agent. Your agent runs the setup itself.
Set up the Toronto 311 Taxonomy MCP server so I can query it from here. 1. Run: claude mcp add --transport http toronto-311 https://this-site.example/mcp 2. Run `claude mcp list` to confirm it connected. 3. Look up taxonomy code T311-R0007 and tell me its division and count, and show me the result.
Data
Versioned releases, MIT licensed. CSV for spreadsheets, JSON for applications.