The Avendors

16 Jun 2026

What 14 years of Ontario tax sales tell a bargain hunter

When a municipality can't collect property taxes, it eventually sells the property by public tender. The minimum bid is just the arrears owed — often a small fraction of what the land is worth — which is why these sales attract bargain hunters. This note works through 5,299 unique listings from 2012 to 2026 to answer the only question that matters before you wire a deposit: where is the edge, and what does it cost to find it?

The short version: the edge is real but narrow. Most of these properties are cheap for a reason, the assessed-value "discount" is partly a mirage, and the genuine alpha — buying well below market — lives almost entirely in the uncontested lots.

The data, and what to distrust in it

The figures come from the compiled Ontario tax-sale listings (ontariotaxsales.ca), deduplicated to 5,299 unique listings spanning Feb 2012 → May 2026. Three caveats shape every number below, so they go first:

  • Assessed value is frozen at a 2016 base year. Ontario paused reassessment, so the MPAC "assessed value" in this file reflects a ~2016 valuation, not today's market. Every "% of assessed" figure therefore understates the true discount in appreciating areas and overstates it where 2016 was the peak. Treat sold-to-assessed as a rough yardstick, not a market appraisal.
  • Sold price lives in two places. Only ~24% of sold rows fill the Sold For column; the rest bury the price in the status string ("5 tenders, sold for $71,680"). Reading only the column would have thrown away three-quarters of the sample — the figures here parse both.
  • Outcomes are a funnel, not a yes/no. A listing can sell, draw no valid bid, be cancelled (owner pays up first), get postponed, or still be upcoming. Mixing these produces garbage rates, so they're kept separate throughout.

Finding 1 — Half of what reaches auction doesn't sell

OutcomeListingsShare
Sold1,78834%
No valid bid1,62431%
Cancelled before sale1,38326%
Upcoming / unknown4468%
Postponed581%

Two numbers jump out. A quarter of all listings cancel — the owner clears the arrears once a real buyer is circling — so a large share of any due-diligence effort is spent on properties that never come to market. And of the lots that do reach the auction block, only 52% receive a single valid bid. The other half are landlocked, unbuildable, encumbered, or simply too remote to want. The base rate is not "cheap house" — it's "no one wanted this."

Finding 2 — The cost of entry is genuinely low

The minimum tender (the opening bid, i.e. the arrears owed) is small:

Opening bidShare of listings
Under $5k9%
Under $10k35%
Under $25k68%
Under $50k86%

Median opening bid is $15,000. This is the part of the pitch that's true: you can bid on real Ontario land for the price of a used car. The catch is everything above and below this section — low entry cost is not the same as low risk.

Finding 3 — The discount is real, but the bid count tells you more than the assessment

Across sold lots, the winning bid is a median 71% of assessed value, and 63% sell below assessed. But given the stale 2016 base year, the more honest bargain signal is the winning bid relative to the opening minimum:

  • Median winning bid: 2.1× the minimum tender.
  • But that average hides a split. Single-bid lots clear at 1.15× the minimum. Lots with five or more bidders clear at 4.5×.

In other words, the property doesn't have a price until people show up — and once they show up, the discount evaporates fast. The bargain isn't the assessed value; it's the absence of competition.

Finding 4 — Competition is bimodal, and that's the whole game

Bids on the lotSold lotsShare
1 (uncontested)46127%
2–341024%
4–942725%
10–1922513%
20+19011%

Median bids per sold lot is 3, but the mean is 7.8 and the max is 97 — the distribution is dragged by bidding wars. The actionable read: 27% of sales go to a single bidder at roughly the opening price. That cohort is the strategy. Everything with a crowd reprices to fair value or above. The work isn't finding cheap land — it's finding cheap land that no one else has found.

Finding 5 — What makes a lot actually sell

Desirable attributes barely move the price ratio, but they strongly move whether a lot sells at all — which is the more useful signal:

AttributeSell-through withSell-through without
Waterfront68%51%
House / cottage on lot65%50%
Building permit possible55%48%
Road access53%52%

Waterfront and an existing structure are what convert a listing into a sale. Conversely, the 122 listings that mention "landlocked" sell only 48% of the time, usually at a token price — and road access, surprisingly, barely moves the needle on its own (a road to a worthless lot is still a worthless lot). By type, waterfront sells 68% of the time vs. 49–54% for everything else, while raw vacant land clears at 81% of assessed — less discount, because its 2016 assessment was already low.

Finding 6 — Geography is the most exploitable variable

Two county-level patterns are tradeable. First, where lots are cheap vs. hot — each county placed by median bids against sold-to-assessed, bubble size by volume. Lower-left is the hunting ground; upper-right is bid up to fair value.

GTA-edge counties like York show the deepest discounts to assessed (41%) on few bids — because 2016 GTA assessments are high and the lots that reach sale there tend to be problem parcels. Cottage counties (Simcoe, Durham, Muskoka) draw the crowds.

Second, cancellation rate — the share of listings that evaporate before sale — swings enormously and tells you where diligence pays off:

Low cancellation (listings go to sale)High cancellation (listings evaporate)
Rainy River5%Hamilton66%
Timiskaming6%Halton57%
Cochrane12%Durham56%
Algoma12%Middlesex51%

In Hamilton, two-thirds of listings cancel — chasing them is mostly wasted work. In the northeast, almost everything listed actually sells. And proximity has a cost: only 18% of listings are within 100km of the GTA (Mississauga reference point), 42% within 200km — and nearer lots draw more competition (median 5 bids inside 250km vs. 3 beyond). The bargains are far away; the bidding wars are close.

Finding 7 — Volume is trending up

Listings per year have roughly tripled across the window (heavier 2023–2025 sale calendars), while the sell-through rate stays anchored near 50%. More inventory at a stable hit-rate means more absolute opportunities each year — but also more competition on the desirable ones, consistent with the bid-count story above.

A few specimens

The extremes make the dynamics concrete:

  • Deepest discounts (sold, assessed ≥ $50k): a Markham vacant lot at $41,689 on a $569,000 assessment (7%, 2 bids); a 7.97-acre Caledon parcel at $77,333 / $791,000 (10%, a single bid). Big-ticket GTA land, almost given away — because almost no one bid.
  • Fiercest bidding wars: 80 acres in Grey drew 97 tenders and sold for $810,500 (31× the minimum); 37.96 acres near Niagara Falls drew 76 tenders at $828,889 (41× the minimum). When acreage near population shows up, the discount is gone.

The two lists barely overlap — which is the thesis in miniature.

How a buyer should actually use this

  1. Filter for cancellation risk first. Favour low-cancellation counties so diligence isn't wasted on listings that redeem.
  2. Hunt the uncontested cohort. The alpha is the 27% of lots that sell on one bid near the opening price — typically remote, unglamorous parcels far from the GTA. Accept distance as the price of the discount.
  3. Use sell-through, not price ratio, as the desirability screen. Waterfront and an existing structure predict a lot is worth wanting; "landlocked" is a near-veto.
  4. Discount the assessed value. It's a 2016 figure — verify against current comparables before treating "% of assessed" as a margin.

A tax sale has no price until bidders arrive. Everything in this dataset is downstream of that one fact — which is why the bid count, not the assessment, is the number to watch.

Want to run these filters yourself? The full dataset is browsable — sortable and filterable by year, county, and outcome. The figures above are committed as a typed dataset under data/, regenerated from the raw listing export by data/_analyze.py; re-running it on an updated CSV refreshes every number here.