The same question Stealpad's for-sale board asks about condos, asked about rent: is this priced below what it should be? 1460 active listings across 8 cities, 869 of them scored against the Zillow Observed Rent Index for their own ZIP and size — and every one that is not scored says why.
🗺 Search every city on the map
The nine highest Rent Deal Scores in the region. Same arithmetic as everywhere else, printed on each card so you can check it rather than take it.
| City | Listings | Scored | Good value+ | Under mkt | Median asking |
|---|---|---|---|---|---|
| Alameda | 72 | 46 | 10 | 13 | $2,638 |
| Berkeley | 321 | 222 | 58 | 76 | $2,748 |
| Emeryville | 21 | 12 | 3 | 3 | $2,975 |
| Fremont | 147 | 85 | 18 | 26 | $3,695 |
| Hayward | 160 | 103 | 26 | 25 | $2,595 |
| Oakland | 313 | 188 | 46 | 64 | $2,195 |
| San Francisco | 321 | 133 | 40 | 53 | $4,200 |
| San Leandro | 105 | 80 | 17 | 21 | $2,300 |
The score answers “is the rent right”. These answer “is it somewhere you want to be”, and every one of them is a fact joined from public data rather than a taste judgement — there is no “neighbourhood quality” number here, because this data cannot honestly produce one.
🚉 Walk to BART. Straight-line distance to the nearest of 50 stations, converted at 3mph with a 1.3× detour factor, so it is an estimate from coordinates and not a routed walk. Anything past the 25-minute cap is left off rather than dressed up as a 45-minute walk. Present on 62% of listings.
⚠ Soft-story retrofit list. San Francisco and Oakland publish the buildings whose weak ground floor legally must be seismically retrofitted. 120 of the 634 listings in those two cities are on it. Only those two cities publish a list, so on every other city the absence of this flag means not checked, never safe.
☀️ Fog belt — San Francisco only. The marine layer runs a real west-to-east gradient across the city, and distance from the Pacific is the standard proxy for it: SF listings here span 0.5 to 8.0 miles. It is deliberately not shown in the East Bay, where every city sits 11-30 miles inland and the hills rather than the coast drive the microclimate — a number there would be noise wearing a decimal point. What is published is the distance, which you can check; calling it measured sunshine would be a lie.
🌞 Photo light — the sunshine question, answered the way the board answers it. redfin_detail.js measures the median luminance of a listing's own photos (skipping the first, which is usually the exterior and therefore sky) and bands it at 170 and 150. Those exact thresholds are reused here, so "Bright" means one thing across both products. One honest caveat: rental photography runs darker than for-sale photography — median luminance 147 against 158 for condos — so proportionally more rentals land in the lower band, and some of that is the photographer rather than the flat. Measured for 1372 listings so far; it is ~2,500 image fetches per city, so it runs per city.
🎓 Walk to UC Berkeley — Berkeley only. A third of Berkeley's rental stock sits in 94704, the campus ZIP, and for most people renting there the only distance that matters is to Sather Gate. No other city here has one destination that dominates demand like that, so no other city gets this chip.
Walks are capped at 25 minutes. The first version capped in miles, which let a 2.5-mile straight line print as "~48 min walk to UC Berkeley" — the exact thing its own comment promised not to do. Past the cap it is a bus ride and the chip is simply absent, which is why BART coverage reads lower here than a map would suggest.
⌛ Stale records. A listing whose feed record has not changed in 120 days is flagged and earns no sitting bonus. Eighteen scorable listings carry records between 180 and 615 days old; a twenty-month vacancy is an abandoned record, not a negotiating position, and the first version handed every one of them the maximum.
Neighbourhood is the nearest mapped centre, read out of the for-sale board’s own map at build time so the two cannot drift apart. It covers 30% of listings, because that board only maps neighbourhoods in Oakland and Fremont and groups the rest by ZIP.
Photos come from the listing feed. A URL is built from the record’s id and version, so a few do not resolve; one of ~1,500 on the day this was built. Those degrade to a placeholder rather than a broken-image icon.
Measured, not asserted. rentals_validate.js refits the model five times on four-fifths of the listings and predicts the fifth it has not seen, so nothing it is graded on leaked into its fitting.
Across 953 held-out predictions the median error is 12.6%; 41% land within 10% of the real asking rent and 70% within 20%. That is the honest resolution of this thing: it can tell a bargain from a premium, it cannot tell you a rent to the dollar.
What it gets right. No city is systematically mispriced — the worst is Berkeley at 1.9% — which is what the per-city constant is for, and the check that it works.
What it gets wrong, and this one matters. The model regresses to the mean by price: <$2k -11% · $2-3k -1% · $3-4.5k +6% · $4.5k+ +24%. It over-predicts cheap units and under-predicts expensive ones, so a very cheap flat looks like more of a bargain than it is. Adding square footage helped — held-out accuracy within 20% went from 70% to 70% — but the extremes remain, because what is left is condition, light, layout and building quality, none of which this data carries.
So rather than hide it: any listing in a price band the model is measurably bad at loses a confidence level, which shrinks its score toward neutral, and its card says so in plain words — "the model runs high by 10% at this rent". A number you can see the error bars on is worth more than one you cannot.
score = logistic( (rent gap × 1.2 + size + sitting) × confidence ), 1 to 99, the same shape and the same labels as the for-sale board so you do not have to learn a second vocabulary.
Rent gap does most of the work: asking rent against the modelled market rent below, clamped at ±30%. The clamp is lower than the board’s 40% because rents disperse far less than prices — the median absolute gap is 7-14% depending on the city — so past the clamp extra “discount” buys no extra score.
Size is what the gap cannot see. The rent model has no square-footage term, so a 500 sqft one-bed and an 800 sqft one-bed get the same predicted rent; rent per square foot against the same city-and-size cohort separates them. It is capped at ±6 points on purpose: its measured correlation with the gap is 0.57, so about a third of it is already counted and at full weight you would pay for it twice. It is 0 when no square footage is published (23% of listings), and the card says so rather than guessing.
Sitting is negotiating room: +3 once the listing record has gone 10 days without changing, +6 at 30. The card states it as exactly that — the age of the listing record, not a verified days-on-market.
Confidence shrinks everything toward neutral, and is measured rather than asserted: the model’s own median error in that city (San Leandro 6.3% · Hayward 8.3% · Fremont 9.7% · Alameda 9.8% · Berkeley 11.8% · Oakland 12.0% · San Francisco 15.6%) and how many pooled comps stand behind that bed count. A thin, noisy cell cannot move the score as far as a dense, tight one.
Every card shows the whole sum, so the number can be checked instead of believed. And a band only changes once it clears its cut-point by 3 points — without that guard the board’s headline count swung 88 → 104 → 88 in 36 hours, on inventory that had moved by two listings.
predicted rent = ZORI(ZIP) × bed factor × city constant
The level comes from the Zillow Observed Rent Index for the listing's own ZIP (2026-08-31), which is what people are observed to pay rather than what buildings advertise. The shape — how much a home of a given bed count rents for relative to a typical home — comes from 988 Redfin rental comps, pooled across the region after normalising each to its own city median.
That pooling is not fussiness. Taken raw, the San Francisco 2-bed comp median is $7,000, which would price a 2-bed in the Mission at $7,126 and then label half the city a bargain against it. The feed skews toward large managed buildings, so it is trusted for relative size only. Pooled factors: studio 0.68 · 1 bed 0.83 · 2 bed 1.06 · 3 bed 1.45 · 4 bed 1.57.
One correction, disclosed. ZORI blends single-family stock, so the same formula prices a house-heavy city like Fremont high and an apartment-heavy one like San Francisco low — raw, the median Fremont listing read -16% and the median SF listing +13%. A per-city constant (the median ratio of asking rent to the raw prediction) is divided out, so a verdict means cheap for its own city, size and ZIP. This model deliberately cannot tell you one city is cheaper than another. Constants applied: Alameda 0.89 · Berkeley 1.03 · Fremont 0.80 · Hayward 0.89 · Oakland 0.94 · San Francisco 1.10 · San Leandro 0.96.
What gets no verdict, on purpose. A building advertising a spread of unit types is not a unit. A furnished short-stay quoting a one-month corporate rate is not a twelve-month lease. Income-restricted, senior, student and military rentals are priced by an eligibility rule rather than the market. A ZIP with no index, or a size with fewer than 20 pooled comps, has no level to measure against. Anything asking under 0.4× or over 3× the region's typical rent for its size is usually a different product than its bed count suggests. And anything past ±45% is treated as something we cannot see rather than a deal — the same bound the for-sale board uses. Those listings still appear, with their rent and the reason there is no verdict.