Where this is going

The tool decides where to buy and where to live, on numbers you can open down to the individual apartment. This page is the shape of the finished thing, what exists today, and the one decision standing between them.

vision · built 2026-08-20T01:50:35Z · commit f349d93 · every figure below read from data/real-estate.sqlite
We want to have tool to find good places for investments based on price/rent/build ratio (build we will add later) and factors of risk. Also maybe we will consult people based on this tool. Drow, 2026-08-20T01:13Z — the end use, in his own words

The system, end to end

One path, five levels. You enter with a decision context — who is buying, what asset, what strategy — and each level answers a question that makes the next one worth asking. Constraints and risks inherit downward. Yields never roll upward into a country average, because an average across districts nobody collected is a number with no listings behind it.

WorldScreen before ranking. Which countries can this buyer legally enter, finance and exit?
CountryFreehold rules, mortgage access, tax, currency, capital controls.
CityIs this market worth deeper work? Ratio, coverage, livability.
DistrictWhere is the evidenced trade-off best? This is where ranking happens.
BlockIs there an actionable asset context — a specific building, a specific unit?

Every figure at every level opens into the listings behind it, each with a URL and the date it was seen. That audit trail is the whole product. It is the only thing separating this from the published indices it exists to replace — measured against Zillow, Numbeo's price-to-rent was inflated in all twelve US cities tested, by 2.4–2.9× in a third of them.

What exists today

1,004listings collected by hand, each with a source URL
3cities earned — La Paz 801, Toronto 123, Tbilisi 80
8districts clearing the n≥10 ranking floor
11risk rows carrying the full shape, incl. mechanism
35candidate cities awaiting collection
235tests, green, run as a hard gate before any deploy

The eight districts that currently clear the ranking floor

CityDistrictSaleRent Price-to-rentGross yieldStanding
TbilisiSaburtalo252312.288.14%earned
TbilisiVake151714.586.86%earned
La PazAchumani875316.036.24%unverifiable
La PazSopocachi493116.186.18%unverifiable
La PazIrpavi311816.506.06%unverifiable
La PazCalacoto5812416.815.95%unverifiable
TorontoWaterfront Communities C1302017.035.87%earned
TorontoMimico302618.245.48%earned

The four La Paz rows are marked unverifiable rather than removed. They are computed from outlier flags that no committed code reproduces — the flags were written by a process that no longer exists. The numbers may well be close to right. We cannot currently show why they are right, and on this project that is the same as not knowing.

The five milestones

M1 — One city you can trust

Blocked, and the block is a decision, not work.

La Paz with every number traceable to a listing and to a function that produced it. Everything above rests on this. Closing it needs the flag verdicts committed as data the loader reads, and then a choice of which flag policy the published band uses. That choice changes the ranking, so it is Drow's, not ours.

M2 — Two cities you can compare

Partly built — three cities are collected, comparison surface is live.

Same rows, same level, aligned dates, honest about what is missing on each side.

M3 — A world view that screens before it ranks

Research done for 9 shortlist countries; the screen is not built.

A market a foreigner cannot lawfully buy into is not a candidate, however good its ratio. Toronto is the worked example: legally shut to a foreign buyer of a 1–3 unit dwelling until 2027-01-01, which no yield figure would have told you.

M4 — Depth: districts, then blocks

Districts live; the block layer is empty.

Down to a named building and an actionable unit context. This is where "where to buy" stops being a region and starts being an address.

M5 — The analyst layer

Risk rows exist; the lens is not built.

Drivers, risks, commentary and crisis paths beside the yield — never folded into it. A 6% yield in La Paz and a 14% in Cleveland are not two points on one scale; they are two different bets, and the difference is mostly risk the market is charging for. Risk-adjusting the headline would bake an opinion into a measurement and destroy the audit trail.

What is actually in the way

One decision, and it is yours. The published La Paz band rests on flags no committed code reproduces. The disputed rows have all been adjudicated by hand — 38 outlier rows and 36 duplicate groups, each verdict carrying evidence quoted from the listing page. What is missing is committing those verdicts as data and then choosing which flag policy the published band uses.

Adjudication gives a district spread of 2.17. Keep-one-per-duplicate-group gives 2.27. The published figure was 0.78, and it is withdrawn. Each choice produces a different ranking, so no band is published until you pick one.

Everything else on this page is work we can do without asking.

Honest gaps, named rather than smoothed