How the exit-validated market-clearing rent is computed, and what to distrust about it. v1.0.
Every rent index you have seen is built on ASKING prices: what landlords
hope to get. The True Rent Index measures what units actually DISAPPEAR
at: the exit-validated market-clearing rent. On 2026-07-10 the downtown
Toronto corpus showed an asking median of $2,225 against an exit-validated
median of $1,790. The market cleared 19.6% under ask.
(08:00 / 18:00 ET) within 3 km of Bay & Queen. Every listing-day is
stored; nothing is overwritten.
classifier removes non-comparable products: shared rooms and roommate
listings (lexicon over title AND full page text), micro-units posing
as apartments (under 250 sqft claiming a bedroom), and implausible
rents (under 45% of cohort median with no stated incentive). Rejections
are kept as data with their reasons, not discarded.
own bed-count cohort (studio / 1 / 2 / 3+), computed from this corpus
over the trailing 14 scan-days. A cohort under 8 observations is not
trusted; unknown bed counts are recovered from listing page text where
possible and flagged where not.
scans. The exit-validated median is the median rent of qualified,
lemon-screened listings that exited within the trailing 30 days. Fast
exits are the market saying yes.
(asking median, exit median, days-to-exit, lemon rate) stamped with
the git revision of the engine that computed them. Improved engines
never silently rewrite history: old rows keep their provenance.
· Corpus size. As of v1.0 the corpus spans 17 scan-days and ~2,400
listing-rows; per-cohort exit counts are small (single digits). Treat
early numbers as directional. The corpus grows every 12 hours.
· Exit is not signing. A delisting usually means leased, but can mean
withdrawn. Reposts (same unit under a new id) are detected by a
conservative multi-signal matcher (photo fingerprint + bed cohort +
a 7-day gap cap + rent band or title overlap) and excluded from exit
validation; on first corpus-wide run it screened 79 repost pairs,
including id-recycling clusters on one source. v1.1 of this section.
· Survivorship of scan cadence. A unit listed and leased entirely
between two scans is invisible. Twice-daily scanning bounds this window
at 12 hours.
· Asking medians move with mix. A flood of studios shifts the "all"
cohort; per-cohort rows are the honest comparison.
· One geography. Downtown Toronto, 3 km radius. Other markets require
their own corpus.
Survival analysis is the accepted method for listing liquidity (Liu 2024,
JTLU; Opendoor research). The index publishes a Kaplan-Meier median
time-on-market per cohort over the screened candidate set, treating
still-live listings as right-censored observations. Two corrections no
prior implementation makes: repost chains never count as exits (Tucker
2013 documents the relisting reset problem; MLS answers with CDOM rules,
rental platforms answer with nothing), and exits are progressively
page-confirmed rather than inferred from feed disappearance (first audit:
7 of 8 inferred exits still had live pages).
The headline clearing gap now carries a split-conformal interval built
from one-step residuals of the index's own history (distribution-free
under exchangeability; approximate under trend, and labeled as such).
Early corpus verdict: 19.6% with a wide band. The band narrows only as
scan-days accumulate; publishing it wide is the honest price of being
new. Exit events are additionally split by cause label: page-confirmed
gone versus unverified feed disappearance, with counts published, per
the competing-risks framing the exit trichotomy demands.
A backlog audit page-checked 148 inferred exits and 93 came back
still-live: most feed disappearance is platform noise, not leasing. The
index now censors these false exits everywhere they could bias a
statistic — the Kaplan-Meier event indicator, the competing-risks cause
labels, and the exit-rent clearing anchor itself (a rent that never
cleared cannot anchor a clearing median). The correction moved the KM
median from 2 days to not-reached-inside-the-window, which is the honest
reading: the earlier figure measured platform churn, not absorption.
With the confirmed-label gate open (30+ page-confirmed exits) the index
publishes the Aalen-Johansen 25% quantile for confirmed absorption; the
AJ median stays null while the terminal cumulative incidence sits below
0.5, and that null is reported rather than substituted.
The methodology version bumps when the computation changes (screening
rules, cohort definition, exit window). Data rows carry the engine
revision, so any published number can be traced to the exact code that
produced it. Version history lives in the public repository's commit log.