Data study 02 of 10 · Homelessness services

Did the 2023 refugee crisis change Toronto's shelter numbers?

In the summer of 2023, refugee claimants sleeping outside a downtown intake office made national news. I used the city's own monthly counts to ask what actually changed, when, and for how long.

City of Toronto open data 54 months of counts, two groups ~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 specification, full estimates, and robustness checks.

In brief

Approach
Before-and-after comparison
Data
Toronto monthly shelter counts, January 2022 to June 2026
What the evidence shows
Counts rose before the crisis and later declined. The August estimate depends on the non-refugee comparison.
What to keep in mind
Counts reflect access and capacity as well as need. The +21% estimate is not a permanent policy effect.
Read the methods and assumptions →
The question

The city's own numbers let us test the story

Toronto publishes a monthly count of people actively using its shelter system, split into groups, including refugee claimants. That makes a genuine test possible: was the crisis a sudden shock, or the visible peak of something that had been building for a long time?

I compare refugee and non-refugee shelter counts before and after June and July 2023. The second group helps account for shared changes. It is an imperfect comparison: intake changes and pressure on the same shelter system may affect each group differently.

How to read the first chart: the bold white line is the monthly count of refugee claimants in the shelter system, from January 2022 to June 2026. The thinner gray line behind it is the non-refugee shelter population, shelter users recorded outside the refugee group, shown for comparison. The dashed hairline is the model's own fit, drawn over the refugee line so you can judge for yourself how closely it tracks the data. The shaded band marks June and July 2023, the months the crisis was in the news.

Refugee shelter counts rose before the crisis and peaked in May 2024

refugee claimants · non-refugee shelter users, for comparison · dashed hairline = the model's own fit, drawn over the data (R² = 0.97) · Jan 2022 – Jun 2026

funding standoff · Jun–Jul 2023 0 2,000 4,000 6,000 8,000 refugee counts rose before the crisis peak 6,198 · May 2024 August level contrast: about +21% relative to non-refugees; later trend varies 2022 2023 2024 2025 2026

City of Toronto Shelter System Flow · people actively experiencing homelessness, monthly counts

Read chart description

Two-line time series, January 2022 to June 2026. A bold line of refugee claimants in shelter rises from 1,726 to a peak of 6,198 in May 2024, easing to 3,435 by June 2026; the June and July 2023 funding standoff months show no visible jump. A thinner gray line shows non-refugees for comparison, starting near 7,684 and ending near 5,522. A dashed hairline traces the fitted model, which follows the refugee line closely.

The refugee count rose before the crisis, peaked in May 2024, and then declined. In the refugees-only model, pre-crisis growth is about 5.1% per month. The combined model’s 6.0% term measures growth relative to the non-refugee trend.

The result

A change at the break, followed by a changing trend

The model puts numbers on what the eye sees, and adds an honesty check.

How to read the second chart: the first two rows compare changes in refugee counts with changes in non-refugee counts. The August row describes the difference at the start of the post period. Its size changes later because the model includes a changing trend. The third row is a separate non-refugee-only check. Thin lines show 95% confidence intervals.

The August 2023 contrast is +21%; the later trend changes

First two rows: refugee versus non-refugee changes – 95% confidence intervals; bottom row: non-refugees-only pulse check

−10% 0 +10% +20% +30% +40% +50% During the episode Jun–Jul, between-group contrast +3.3% p = .622 At the August break refugee vs non-refugee change +21.0% p = .014 Placebo check same two months, non-refugees −3.6% p = .25

City of Toronto Shelter System Flow · controlled-model intervals revised September 2026; month-aggregated HAC, 6 lags

Read chart description

Diverging bar chart of estimated percentage changes in shelter counts first two rows are between-group contrasts at the pulse or August break. During the episode (Jun–Jul, between-group contrast): +3.3%, CI -9.1 to 17.4, p = .622; At the August break (refugee vs non-refugee change): +21.0%, CI 3.9 to 41.1, p = .014; Placebo check (same two months, non-refugees): −3.6%, CI -9.3 to 2.6, p = .25.

The August 2023 level contrast is +21%, relative to the change in the comparison group, with a revised 95% interval of about +4% to +41%. This is the starting difference at the break. Subsequent trend terms change that difference. The refugees-only model estimates a level change near zero, showing how much the headline depends on the comparison.

The first model used a straight post-crisis trend. A curve follows the rise and decline more closely. R² = 0.97 describes in-sample fit on log counts across both groups; it does not measure causal validity or forecasting accuracy.

The upstream driver

Where the wave came from

Toronto's shelter system sits downstream of a national process: people claim asylum first, and some of them need a shelter bed later. Canada's immigration department publishes how many asylum claims are filed each month, so the two series can be laid side by side.

How to read this chart: the two lines measure very different things, so both are scaled to 100 at January 2022 and the chart compares their shapes. Ontario asylum claims more than quadrupled from early 2022 to their 2024 peak, then fell steeply after federal policy tightened. Toronto's refugee shelter count rode the same wave in a flatter form: a shelter bed holds a person for months, so the stock rises and falls more slowly than the flow of new claims that feeds it. One caution: not every claimant needs a shelter, and the shelter series counts people while the claims series counts filings, so this chart shows a shared wave rather than a one-to-one pipeline.

Behind the shelter curve: Ontario asylum claims rose and fell on the same wave

refugee claimants in Toronto shelters · new asylum claims filed in Ontario each month – both series scaled so January 2022 = 100, so shapes can be compared across very different units

0 Jan 2022 = 100 100 200 300 400 500 claims peak: 5.1× the Jan 2022 level shelter peak: 3.6× refugees in shelter Ontario asylum claims 2022 2023 2024 2025 2026

City of Toronto Shelter System Flow + IRCC asylum claimants open data (values rounded to multiples of 5 at source)

Read chart description

Two indexed lines, January 2022 to May 2026, both scaled to 100 at January 2022. Ontario asylum claims rise to 5.1 times their starting level at the peak, then fall back to about 1.1 times. Toronto refugee shelter counts rise to 3.6 times, then ease to 2.1 times. The two curves rise and fall on the same wave.

What this does not prove

The honest fine print

The comparison helps account for some shared changes, but border policy, hotel programs, and intake rules also changed. Counts describe recorded service use, which depends on access and capacity as well as need. The study cannot isolate the effect of one policy.

Technical terms, translated

Comparison group
A second population followed over the same months to help account for shared changes. Its usefulness depends on group comparability.
Placebo check
A check using another group or date. A result near zero offers limited reassurance; it cannot prove the main estimate is unbiased.
95% confidence interval (the thin lines)
Monthly counts bounce around. The interval describes uncertainty under the model assumptions. It does not cover every source of bias.
"Tracks 97% of the movement"
A score for how closely the model's curve follows the real monthly numbers. 100% would mean a perfect trace.
"Scaled to 100" (the claims chart)
Shelter counts and claim filings use different units, so both lines are re-expressed as multiples of their own January 2022 value. A value of 400 means four times the starting level.
Toronto Shelter System Flow Before-and-after analysis Python Monthly refresh workflow prepared
Part two · For technical readers

Technical notes

The specification, full estimates, and the checks behind the plain-language claims above.

Data

City of Toronto Shelter System Flow, January 2022 to June 2026: 54 months for each of two groups, or 108 group-month observations. This page is a fixed snapshot. A monthly refresh workflow is prepared locally; an active public deployment has not been verified.

Design and estimation

Controlled interrupted time series on log counts. The pulse covers June and July 2023; the post period begins in August. The equation includes group-specific trends and a quadratic post-period curve, plus shared annual and semi-annual seasonal terms. The September 2026 review retained OLS coefficients and recalculated uncertainty with Bartlett HAC on score vectors summed within months, six lags, and a T/(T−1) correction. This accounts for within-month cross-group covariance and serial dependence. The original ordinary HAC calculation treated group-stacked rows as one time series.

log Ygt = β0 + β1t + β2Pt + β3At + β4τt + β5τt2 + s(t) + Gg·[α0 + α1t + α2Pt + α3At + α4τt + α5τt2] + εgt

where Gg = 1 for the refugee series, Pt = 1 in June–July 2023 (the pulse), At = 1 from August 2023, τt = months since August 2023 (0 before), and s(t) holds annual and semi-annual sine–cosine pairs. The reported refugee-specific effects are α2 (pulse), α3 (August 2023 level contrast) and α5 (curvature); month-aggregated HAC errors, 6 lags.

Controlled ITS estimates, refugee-specific terms (% change in counts)
TermEstimate95% CIp
Pre-period trend difference, per month+6.0%+4.8 to +7.2< 0.001
Crisis-months pulse (Jun–Jul 2023)+3.3%−9.1 to +17.40.622
August 2023 level contrast+21.0%+3.9 to +41.10.014
Post-period linear trend difference−0.82%−3.02 to +1.420.469
Post-period curvature difference−0.19%−0.25 to −0.14< 0.001
Control-series pulse (non-refugees)−6.1%−9.0 to −3.1< 0.001

n = 108 group-months. OLS on log counts with annual and semi-annual sine-cosine seasonal terms; month-aggregated HAC errors, 6 lags; R² = 0.97. Effects converted as (e^b − 1) × 100.

Robustness checks
CheckEstimate95% CIp
Refugees-only model: pulse−5.5%−13.5 to +3.30.211
Refugees-only model: post level−0.1%−8.6 to +9.10.974
Refugees-only model: post trend, per month−1.6%−2.6 to −0.50.005
Placebo (non-refugees alone): pulse−3.6%−9.3 to +2.60.250
Window extended to Jan 2021: pulse+2.7%−10.4 to +17.60.706
Window extended to Jan 2021: post level+19.7%+1.6 to +40.90.032

The wider-window estimate is similar. The refugees-only model has a near-zero post level: the headline depends on the comparison group.

Model choice

The quadratic post-period curve fits the observed hump better than the initial straight trend (R² 0.97 versus 0.91). Selection after inspecting these data makes this exploratory. Strong in-sample fit does not establish a causal explanation.

Threats to validity

Refugee-specific confounding and spillovers remain possible. The August contrast is exp(α3)−1. At month τ, the full differential departure is exp(α3 + α4τ + α5τ²)−1. Extrapolating a fast pre-crisis trend far into the future is a strong assumption; later departures should not be read as policy impacts.

The same study in SQL

This study's three sources also live in one relational database (population_groups to shelter_monthly by foreign key, plus asylum_claims and the model's fitted values), built with enforced integrity: composite primary keys and CHECK constraints on every count. Ten queries then take a wider tour of the language than the other two SQL rebuilds on this site: a data-quality audit (a LAG-based calendar-continuity check, and a proof that the refugee and non-refugee series partition the total caseload in all 102 months), the context table pivoted with conditional aggregation, peak detection by window rank, a rolling three-month frame, the cross-source IRCC join indexed to January 2022 with FIRST_VALUE, and this one, a regression computed in nothing but aggregates:

-- OLS slope of ln(actively homeless) on a month index,
-- refugee series, pre-crisis window: beta = cov(x,y) / var(x)
WITH series AS (
    SELECT (CAST(strftime('%Y', m.month) AS INT) * 12
              + CAST(strftime('%m', m.month) AS INT)) AS x,
           LN(m.actively_homeless)                    AS y
    FROM shelter_monthly m
    JOIN population_groups g USING (group_id)
    WHERE g.name = 'Refugees'
      AND m.month BETWEEN '2022-01-01' AND '2023-05-01'
),
stats AS (SELECT AVG(x) AS xbar, AVG(y) AS ybar FROM series)
SELECT (EXP(SUM((x - xbar) * (y - ybar))
            / SUM((x - xbar) * (x - xbar))) - 1) * 100
           AS pct_growth_per_month
FROM series, stats;
-- returns +5.08% a month; the full model with seasonality and
-- Newey-West errors reads +6.0% [4.8, 7.2]

An automated checker verifies every query against the committed outputs and independent recomputes (the slope to the sixth decimal): 38 of 38 match.

Reproducibility

Three scripts (get_data.py, run_analysis.py, make_charts.py) on pandas and statsmodels, plus the refresh workflow. Revised controlled-model intervals are reproduced by audit_shelter.py in the website tools folder. Original results remain in the project results.json and fitted-series CSV. The SQL rebuild adds build_db.py, queries.sql, and run_checks.py in the project's sql/ folder.

References

  • City of Toronto. (2026). Toronto Shelter System Flow [data set]. City of Toronto Open Data Portal. https://open.toronto.ca/dataset/toronto-shelter-system-flow/ (data through June 2026; retrieved July 2026).
  • Immigration, Refugees and Citizenship Canada. (2026). Asylum claimants: monthly IRCC updates [data set]. Open Government Portal. https://open.canada.ca/data/en/dataset/b6cbcf4d-f763-4924-a2fb-8cc4a06e3de4 (data through May 2026; retrieved July 2026; counts rounded to multiples of 5 at source).
  • Bernal, J. L., Cummins, S., & Gasparrini, A. (2017). Interrupted time series regression for the evaluation of public health interventions: a tutorial. International Journal of Epidemiology, 46(1), 348–355.
  • Newey, W. K., & West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix. Econometrica, 55(3), 703–708.