Valuation· March 2026

A Working Methodology for Price-Per-Foot Analysis

Price per square foot is either the sharpest tool in residential valuation or the bluntest, and which one you're holding depends entirely on how you filter it. Raw zip-code averages blend a distressed sale on a busy corner with a renovated exit on the best block and hand you a single number that describes no actual house. People quote that number in offers. They underwrite whole deals against it. Then they wonder why the exit came in light. The metric didn't lie to them. They never filtered it, and an unfiltered average is just noise wearing a decimal point. What follows is the methodology I actually run, filter by filter, and then the one move that turns all of it into deal flow.

I come at this from credit. Before real estate I built underwriting at a lender, pulling all three bureaus, Equifax, Experian, TransUnion, and pricing risk on the data instead of the story a borrower told. A credit score by itself is close to useless. It's the inputs behind it, the filters and weights, that make it predictive. Price per foot is the same kind of animal. The number on the surface means nothing until you've built the machine that produces it. So let's build the machine.

Filter one: condition cohort

The first cut is condition, and it's the one people skip most. Renovated product and dated product are different markets that happen to share a zip code. Comping across them produces fiction. A tired house with original kitchens and a renovated house with a new everything are not two data points on the same line, they're two separate lines that occasionally cross on a map.

So before I average anything, I sort every comp into a cohort by condition. Distressed and deferred-maintenance in one bucket. Dated but livable in another. Fully renovated to current standard in a third. New construction on its own. I only compare within a cohort. If I'm underwriting a renovated exit, I price against renovated sales, full stop. The dated sales are useful, but for a completely different purpose I'll get to, they tell me my buy box, not my exit.

The discipline here is refusing to let a convenient number into the wrong bucket. It is tempting, when renovated comps are thin, to reach down into the dated pile, grab a sale, mentally add some value for the finishes, and call it comparable. That's not analysis, that's wishing with extra steps. If the renovated cohort is thin, that's information, it means the street hasn't proven the exit yet, and thin proof is exactly the thing you're supposed to notice before you commit, not paper over.

Filter two: micro-location

The second cut is location, and I mean it at a resolution most people don't bother with. Price per foot decays measurably with distance from the anchor street. Half a mile can move the number more than five hundred square feet of house does. The zip code is not the market. The block is the market, and the difference between two blocks a half-mile apart can be the difference between a good deal and a slow, expensive lesson.

So I weight comps by proximity to the subject, hard. A sale two streets over on a comparable block counts. A sale across a busy arterial, next to different schools, backing to commercial, does not count the same even if it's technically closer as the crow flies, because the buyer pool is different. What I'm really controlling for is everything that makes a location a location: schools, commute, noise, the walk to whatever people on that block care about walking to. Distance is a proxy for all of it, and it's a good proxy right up until a road or a school boundary breaks the proxy, at which point I trust the boundary over the distance.

The tightest version of this is the same-street sale, and it is worth more than almost any other evidence you can find. A house that traded a couple hundred feet from your subject controls for location so completely that the only variables left are size and finish, and those you can adjust for cleanly. One sale like that outweighs a dozen zip-code data points, because it answers the exact question the zip code only gestures at.

Filter three: size band

The third cut is size, and it follows from a fact I've written about before: price per foot falls as size rises. The location premium baked into a sale gets spread across every finished foot, so a small house carries a fat per-foot number and a big house carries a thin one, even on the identical street at the identical finish. Compare a 2,200-foot subject against a 4,000-foot comp without adjusting and you'll import a per-foot rate that was never available at your size.

So I compare within a size band, roughly plus or minus 20 percent of the subject's square footage. Inside that band the per-foot rates are speaking the same language. Outside it, I don't discard the comp, but I stop taking its per-foot number at face value and apply an explicit size adjustment instead, nudging the bigger comp's rate up toward my smaller subject or the smaller comp's rate down toward my larger one, in the direction the curve says. The point is to make the adjustment explicit and visible, a number I wrote down and can defend, not a fudge I did in my head and forgot by the time I made the offer.

The weighting: not all comps vote equally

Now the part that separates a real model from a spreadsheet that just averages a column. Once you've got a clean cohort of same-condition, same-band, proximate comps, you still don't average them evenly. You weight them by evidentiary strength, because some comps are testimony and some are hearsay.

A same-street sale outweighs a same-neighborhood sale, which outweighs everything else. That's the location weight. Then recency compounds it. Markets reprice in quarters, not years, and a sale from eighteen months ago is describing a market that may not exist anymore. So a recent, proximate, same-condition comp gets a heavy weight, and a stale, distant, or cross-cohort comp gets a light one, sometimes so light it's just a sanity check rather than a driver.

The result is that one strong, recent, same-street sale can and should outweigh six stale approximations, and your model has to say so numerically. This matters because the six weak comps will usually cluster around a number, and clustering feels like confidence, six sales can't all be wrong, right? They can, if they're all measuring the wrong thing. Six dated sales from across the zip code agreeing with each other tells you what dated houses did last year across a wide area. It tells you almost nothing about what your renovated house will do on this block this quarter. Make the weights explicit and the one good comp keeps its rightful authority instead of getting outvoted by a crowd of weak ones.

One strong, recent, same-street comp is worth more than six stale approximations, and your model should say so in numbers.

Putting it together: a worked pass

Let me run an illustrative example end to end so the machine is concrete. Subject is a dated 2,400-foot house I'm considering, and I want to know its renovated exit value.

I pull, say, fifteen sales from the surrounding zip code. Filter one, condition: I drop the eight that are dated or distressed from the exit analysis, keeping seven renovated sales. Filter two, micro-location: three of those seven are across an arterial by different schools, so they drop to a light sanity-check weight, leaving four that are genuinely comparable blocks. Filter three, size band: two of the four are within 20 percent of 2,400 feet, and two are larger, so I keep the two in-band at full per-foot value and size-adjust the two larger ones downward before I use them. Then the weighting: one of my in-band comps is a same-street sale from two months ago, so it gets the heaviest weight, the other in-band comp is same-neighborhood and six months old and gets a solid but lighter weight, and the two adjusted larger comps ride along at modest weight to confirm the trend.

Out of fifteen raw sales, my exit number is really being set by one excellent comp, supported by a second good one, sanity-checked by a handful of others. That's not throwing away data. That's refusing to let bad data outvote good data. The zip-code average of all fifteen might have read 300 a foot. My weighted, filtered read might land at 360, because the junk that was dragging the average down got sorted into the buckets where it belongs instead of poured into the exit. On a 2,400-foot house, that's the difference between an exit I underwrote at 720,000 and one I underwrote at 864,000, and getting that read right is the entire margin of safety on the deal.

Invert it to find the opportunity

Here's the move that turns all this filtering from an appraisal exercise into a business. Once you can read a renovated per-foot ceiling cleanly, invert the whole analysis. Stop asking what a specific house is worth and start hunting for streets where the renovated ceiling is proven but the dated inventory still trades far below its post-renovation implied value.

That gap is the flip business expressed in one line of arithmetic: proven renovated ceiling, minus achievable basis on the dated house, minus real construction cost. Whatever's left is your margin, and if it's fat enough to cover your risk and your hold, you have a deal. Remember those dated comps I set aside in filter one? This is their job. They tell me the basis, what I can actually buy the tired house for. The renovated cohort tells me the ceiling. The spread between the two cohorts, on the same street, is the opportunity, and most people never see it because they averaged the two cohorts together into a single meaningless number and erased the exact gap they were supposed to be hunting.

This is the whole engine behind buying the cheapest house on the best street. The best street gives me a high, proven renovated ceiling. The cheapest house gives me a low basis. My renovation cost is roughly fixed by the finish level the street demands. Do the arithmetic across a lot of streets and the deals aren't hidden, they're just sitting inside a filter almost nobody bothers to run. I've set record price-per-foot exits in Overland Park and Johnson County doing exactly this, and none of it required a secret. It required refusing to average across cohorts and then paying attention to the gap that refusal exposes.

Why the discipline pays

The BRRRR strategy I run, buy, renovate, rent, refinance, repeat, lives or dies on the exit and refinance value, which is to say it lives or dies on the per-foot read. Overstate the ceiling and you over-improve, over-leverage, and get stuck holding a house the appraisal won't support. Understate it and you pass on money that was sitting right in front of you. The filters are how I keep from doing either, and the weighting is how I keep one honest comp from being drowned out by a crowd of dishonest ones.

None of this is complicated math. It's mostly the willingness to do the sorting that everyone knows they should do and most people skip because averaging a column is faster. Condition cohort, micro-location, size band, then weight by strength and recency. Run those four filters and one weighting, and price per foot goes from the most abused number in residential real estate to the most powerful, because now it's finally measuring one clean thing instead of blending five dirty ones. Do that consistently, on street after street, and the deals find you. The arithmetic was always there. The edge is just being the one who actually runs it.

Get the next insight first

Strategy notes on underwriting, structure, and disciplined execution. No noise.

← All Insights