Data study 05 of 09 · Urban planning

How long do Toronto building applications wait?

Every new tower, subdivision, and rezoning in Toronto starts as an application in a public tracker. I analyzed 26,000 of them to measure how long files really sit, and found that the answer depends on where they get stuck.

City of Toronto open data 25,944 applications since 2008 ~4 minute read Skip to the technical notes

This page comes in two parts: the story in plain language first, then technical notes with the status mapping, model, full queue tables, and sensitivity checks.

The plan, and the pivot

The data refused my first plan, so the plan changed

I wanted to measure how long applications take from submission to decision. The city's file records when every application was submitted and what state it is in today. It records no decision dates at all.

Forcing the original method onto data that cannot support it would produce confident nonsense. So I asked the question the data can honestly answer: of all the applications submitted in each year, how many are still open today? If files resolved quickly, only the newest years would have open files. The further back the open files stretch, the slower the system.

How to read the first chart: each point is one year's batch of applications, and the height shows the share of that batch still open in July 2026. The dark line follows site plan applications (the detailed design review most buildings need); the gray line follows rezonings (asking to change what a property is allowed to be). Old batches sit near zero, as they should. Then the lines climb steeply: counting every application type, more than half of everything submitted since 2022 is still open.

Half of everything submitted since 2022 is still open

Share of each year's applications still open in July 2026 – site plans · rezonings – counting every application type, 53.6% of 2022 submissions and 52.3% of 2024 submissions are still open

0% 25% 50% 75% 100% site plans rezonings 2022+: two-thirds or more of site plans still open 2010 2013 2016 2019 2022 2025

City of Toronto Development Applications · snapshot July 29 2026 · 25,944 applications

One caution, stated wherever this chart appears: with a single snapshot, "newer" and "from a slower era" are tangled together. A 2022 file may still be open because it is young, or because the system slowed down around then. The 2022 batch sitting as high as batches two years younger points to a real slowdown, but this data alone cannot fully separate the two.

The queue today

5,065 open files, typically 4.1 years old

The second view looks only at the files open right now, and asks how old they are and where they are stuck.

How to read the second chart: each row is one application type. The dark dot marks the typical age of its open files (half are younger, half are older). The light dot marks the age that the oldest quarter of files has passed. The longer the tail between the dots, the more extreme the slowest cases.

The open queue: 5,065 applications, median age 4.1 years

Age of currently open applications by type – typical age (median) · the age the oldest quarter has passed – 21.4% of the whole queue is older than five years

0 2 4 6 8 10 yrs Subdivision 626 open 4.8 9.4 Condominium† 322 open 4.7 4.8 Site Plan 2,134 open 4.1 4.9 Rezoning / OPA 1,956 open 3.2 4.7

City of Toronto Development Applications · July 29 2026 · † condominium ages cluster at a 2020 administrative batch date

Two findings sit behind those dots. First, subdivisions are the marathon files: a quarter of the open ones have waited more than nine years. Second, the rezoning story is really an appeals story. Rezonings actually clear the city's own review faster than site plans do, but among the rezonings still open, 54.6% are sitting at the provincial appeals tribunal, compared with 8.7% of site plans. Speeding up the review desk would barely touch that backlog; the bottleneck is the appeal stage.

Quality control

The bug that flipped the answer

Every analyst has a story about a bug. I keep mine on display, because the catch matters more than the mistake.

The city's status labels carry invisible trailing spaces: "Under Review " with a space at the end is, to a computer, a different piece of text than "Under Review". My first pass matched the labels exactly, silently dropped 3,799 records, and produced a rezoning result that was upside down. Nothing crashed. No warning appeared. The number simply came out wrong, and confidently so.

What caught it was a smell test rather than an error message: one intermediate figure came out at 98%, which was too tidy to be true. Tracing that number back exposed the whitespace, and one line of cleaning code fixed it. The chart shows the size of the miss. The lesson I repeat to myself: always check the results that flatter your expectations.

One invisible character flipped this answer upside down

Odds that an open rezoning stays open vs a same-age site plan – first pass vs after stripping whitespace from status labels – the hollow dot is the broken number, and no honest confidence interval exists for it

← less likely to stay open than a site plan more likely → 0.5× 1× (no difference) First pass hidden trailing spaces ≈ 4.8× 3,799 records silently dropped After the fix same data, same model 0.44× the smell test that caught it: 98% of open rezonings showed as appeals

City of Toronto Development Applications · the bug, the catch, and the fix are documented in the project's REPRODUCE.md

What this does not prove

The honest fine print

"Closed" in this tracker bundles approvals, refusals, and withdrawals together, so this study measures how long files stay open and never claims an approval rate. A few hundred applications also share obviously administrative dates (308 files "submitted" on a single day in 2020), which I flagged and worked around rather than treated as real.

Technical terms, translated

Typical age (median)
Line all the open files up from newest to oldest; the median is the one in the middle. Unlike an average, a few 15-year-old files cannot drag it around.
The oldest quarter (75th percentile)
The age that three-quarters of files are younger than. It shows how bad the slow tail is, which a typical value hides.
Rezoning
Asking the city to change what a property is allowed to be, like a house lot becoming an apartment site. Contested ones can be appealed to a provincial tribunal.
Site plan
The detailed design review of a specific building: driveways, landscaping, servicing. Less often appealed, more often long.
Toronto Development Applications Python Data quality forensics 25,944 applications
Part two · For technical readers

Technical notes

Status mapping, design rationale, model, full queue tables, and sensitivity checks behind the plain-language story above.

Data and status mapping

City of Toronto Development Applications dataset, snapshot July 29, 2026: 25,944 applications across the 2008–2025 submission cohorts, plus every currently active file for the queue statistics. Status strings carry trailing whitespace; the unstripped first pass silently dropped 3,799 records and inverted the rezoning odds ratio (4.8 instead of 0.44). The catch was an appeal share of 98%, which failed a plausibility check. Active statuses: Under Review, the appeal family (Appeal Received, OMB, LPAT, TLAB), Circulated, Application Received, Incomplete, and Amend Draft Plan Application.

Design rationale

The dataset family records no decision dates, so time-to-decision survival analysis is not identified. The design is current-status analysis (Jewell and van der Laan, 2004): each cohort's share still active at the snapshot is one point on the survival curve. The identification cost is stated wherever it applies: a single snapshot makes a cohort's age and its calendar era the same variable, so the curve mixes aging with era effects. Type comparisons at fixed age share that confounding and stay interpretable.

log[qi / (1 − qi)] = β0 + β1Agei + β2Agei2 + γtype(i)

where qi = Pr(application i is still active at the snapshot); application types OZ, SA, SB with site plan as reference (condominium and part-lot files excluded for separation).

The open queue at July 29 2026, by type (years since submission)
TypeOpen filesMedian75th pct90th pct
Site Plan2,1344.14.96.7
Rezoning / OPA1,9563.24.77.3
Subdivision6264.89.49.5
Condominium†3224.74.84.8
Part Lot274.45.25.7

† Condominium ages cluster at a 2020 administrative batch date, which compresses the percentiles.

Logit of P(still open) on age, age squared, and type
ContrastOR95% CIp
Rezoning / OPA vs Site Plan0.440.40 to 0.49< 0.001
Subdivision vs Site Plan7.486.33 to 8.85< 0.001

Restricted to rezonings, site plans, and subdivisions; condominium and part-lot files excluded for quasi-separation driven by batch-dated records. Strict sensitivity (active = Under Review only): rezoning OR 0.15, direction unchanged.

Appeal-status shares
Type% of open files in appeal statuses% of all files
Rezoning / OPA54.6%8.3%
Site Plan8.7%1.7%
Subdivision7.1%3.5%

Data-quality notes

308 applications share a single submission date (May 6, 2020), one of several administrative batch dates; medians are robust to this, and the condominium percentiles are visibly shaped by it, which is why that row carries a flag. "Closed" bundles approvals, refusals, and withdrawals, so nothing here is an approval rate. Statuses reflect the City's tracker, which can lag reality.

Reproducibility

Three scripts (get_data.py, run_analysis.py, make_charts.py) against the Toronto Open Data CKAN API, on pandas and statsmodels. The dataset refreshes daily, so later snapshots shift the recent-cohort numbers; the committed results.json pins July 29, 2026, and is the direct source of every number on this page.

References

  • City of Toronto. (2026). Development Applications [data set]. City of Toronto Open Data Portal. https://open.toronto.ca/dataset/development-applications/ (snapshot July 29, 2026).
  • Jewell, N. P., & van der Laan, M. (2004). Current status data: review, recent developments and open problems. In Advances in Survival Analysis (Handbook of Statistics, Vol. 23). Amsterdam: Elsevier.