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.
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 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
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.
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
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.
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
City of Toronto Development Applications · the bug, the catch, and the fix are documented in the project's REPRODUCE.md
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.
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.
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).
| Type | Open files | Median | 75th pct | 90th pct |
|---|---|---|---|---|
| Site Plan | 2,134 | 4.1 | 4.9 | 6.7 |
| Rezoning / OPA | 1,956 | 3.2 | 4.7 | 7.3 |
| Subdivision | 626 | 4.8 | 9.4 | 9.5 |
| Condominium† | 322 | 4.7 | 4.8 | 4.8 |
| Part Lot | 27 | 4.4 | 5.2 | 5.7 |
† Condominium ages cluster at a 2020 administrative batch date, which compresses the percentiles.
| Contrast | OR | 95% CI | p |
|---|---|---|---|
| Rezoning / OPA vs Site Plan | 0.44 | 0.40 to 0.49 | < 0.001 |
| Subdivision vs Site Plan | 7.48 | 6.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.
| Type | % of open files in appeal statuses | % of all files |
|---|---|---|
| Rezoning / OPA | 54.6% | 8.3% |
| Site Plan | 8.7% | 1.7% |
| Subdivision | 7.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.