I look at a lot of multifamily deals that I have no intention of buying.
That sounds like a confession, but it is actually most of the job. An acquisitions process produces far more nos than yeses, and for years mine produced them the way almost everybody does.
A listing would come across my desk, I would spend a few hours in a spreadsheet working through the numbers, I would decide it did not work, and I would close the file and move on to whatever came in behind it.
The problem with that was never the no. The nos were almost always correct. The problem was that I was throwing away nearly everything the work had just taught me, because at the end of those hours I genuinely knew a great deal about that property. I knew what it actually earned rather than what the marketing package claimed. I knew where the expenses were understated and where the rents sat against the surrounding neighborhood, and I had a reasonable sense of what it would cost to fix what was broken. Then I took all of that understanding and compressed it down into a single bit of information, good deal or bad deal, and deleted the rest.
Here is the question that eventually changed how I underwrite, and I would argue it is the only real difference between what I was doing then and what I do now:
Not "is this a good deal?" but "what would this have to cost for me to want it?"
Those sound like the same question, and they are not remotely the same question. The first one has two possible answers and teaches you almost nothing that survives past the moment you answer it. The second one has an answer for every deal you will ever look at, and that answer is a number you can write down, defend, revisit, and compare against every other number you have ever produced.
I work in multifamily, so that is the vocabulary I am going to use throughout, and the specific measures I walk through below are the ones an apartment deal demands. But I want to say clearly up front that none of what follows is actually about apartments, and very little of it is even about real estate. It is a way of thinking about any decision where money goes out the door against an expectation of what comes back. Self storage, a small industrial building, an operating business, a piece of equipment, a partner buyout, an acquisition in an industry that has nothing to do with property. The vocabulary changes and the specific metrics change, but the underlying structure holds, and if you work in something other than apartments I would encourage you to read the real estate examples as illustrations of a method rather than as the method itself. The method is the part that transfers.
The philosophy: underwriting is a pricing engine rather than a filter
Most investors treat underwriting as a gate. The deal goes in, a verdict comes out, and the gate either opens or it does not. I have come to think that framing is backwards, for three reasons that have all cost me something to learn.
The first is that a filter throws away your most valuable data.
The gap between what a seller is asking and what a property is genuinely worth to me is the single most useful number I collect, and not because of what it says about that particular deal. It is useful because of what it says about the market. If I look at twenty properties in a submarket and my number consistently lands thirty percent below the ask, that is not twenty individual failures that I should feel bad about. That is a market telling me, clearly and repeatedly, that sellers there have not yet repriced to reality, and that is a thesis I can act on. None of that is visible if the only thing I kept from all that work was the word "no."
The second is that a filter leaves you with nothing to say.
When my answer was simply "pass," I said nothing and the broker heard nothing, and the relationship ended where it started. When my answer is instead "this works for me at a number meaningfully below where you are asking, and here is the arithmetic that gets me there," something genuinely different happens. Sometimes I am wrong and they walk me through why, which is free education from someone who sees more transactions in that submarket than I ever will. Sometimes they do not care at all today, and then they call eight or ten months later when the seller has gotten tired and a couple of other buyers have retraded them. A no with a number attached is the beginning of a relationship, while a no without one is just silence.
The third reason, and the one I think matters most, is that naming a price is an honesty test you cannot cheat.
It is easy to say that a deal is overpriced, because it costs you nothing and it is usually true. It is considerably harder to say "I would pay this," because the moment you do, you own it. You have committed to a set of assumptions that somebody else can pick up and check against the world. Almost every single time I have forced myself to produce a real number instead of a comfortable verdict, I have found something soft in my own thinking that a simple thumbs-down would have let me hide from myself indefinitely.
So the discipline I hold to now is that every deal gets a price, the ones I like and the ones I do not, without exception. If I cannot produce a number that I would actually pay, then I do not yet understand the deal well enough to have an opinion about it, and that fact, rather than anything about the deal's quality, is what my analysis has actually told me.
What I am solving toward
A price is only meaningful relative to what you are asking the money to do, so it is worth saying plainly what I measure.
I look at five things, and a deal has to satisfy all of them rather than average out across them:
Cash-on-cash return at stabilization, which is what the investment actually pays out in a normal year once the business plan has been executed and the property has settled into its new operating reality.
Debt service coverage, measured on real principal and interest rather than on an interest-only period, because an interest-only window is a temporary condition and I would rather know whether the property can carry itself when that window closes.
Levered internal rate of return over the hold, which is the closest thing to a single summary number and is also the one most easily manipulated, which is exactly why it cannot be the only one.
Equity multiple, because IRR is extremely sensitive to timing and a quick, thin outcome can post a flattering IRR while returning very little actual money. The multiple tells you how much came back, and the IRR tells you how fast, and you genuinely need both.
Yield on cost at stabilization, compared against what the market would pay for that income today. This is the one I would defend most strongly to anyone building their own version of this, because it is the honest measure of whether you created something or simply bought it. If your stabilized yield on total cost, including everything you put into the property, does not sit meaningfully above the going-in market cap rate, then you have not actually generated value through the work. You have paid retail and taken execution risk for the privilege.
I am deliberately not publishing the thresholds I hold each of those to, and not because they are secret in any dramatic sense. They are simply mine. They reflect my cost of capital, my risk tolerance, my obligations to the people whose money sits alongside my own, and the particular stage I am at right now. If you adopted my numbers you would be running my strategy with your money, which is a genuinely bad idea. Setting your own is the exercise, and it is not a small one.
The framework: two levers that have to be solved together
Once you are solving for a price rather than a verdict, you discover fairly quickly that price is not one lever. It is two, and they are tangled together in a way that makes it very easy to fool yourself.
The first lever is what you pay. Given what the property will earn once you have done your work on it, what is the most you could hand over at closing and still hit the five measures above?
The second lever is what you do, and that phrase, once you have done your work on it, is carrying an enormous amount of weight. The property's income after your business plan is not a fact about the world. It is a forecast built entirely on things you are promising to accomplish: raising rents that currently sit below market, recapturing utility costs, bringing vacancy down, rebidding an insurance policy, repairing what has been deferred.
The trap is that those two levers trade directly against each other, which means you can move either one of them to arrive at whatever answer you had already decided you wanted. If you want to justify paying more, you assume a more aggressive business plan. If you want to run a conservative plan, you have to pay less to make the arithmetic work. Every genuinely bad deal I have ever watched somebody do, including a couple I came close to doing myself, traces back to somebody moving one lever in order to rescue the other and then not writing down anywhere that they had done it.
So the framework solves both levers together and forces the trade-off into the open:
Establish the honest starting point. What does this property earn today, with no story attached to it? Not the projection in the offering package, but actual trailing income, restated to reflect what changes the day the keys change hands.
Build the plan and price every single piece of it. Itemize what you would actually do, dollar by dollar. Not "there is upside here," but rather this specific number of units sits below market by this specific amount, and here is the comparable lease that proves the number is real.
Reverse-solve for the price that satisfies each of your five measures at the income that plan produces.
Then go attack your own plan, which is the step that separates this from wishful thinking.
Step four is the one everybody skips
At this point you have a number, and because it came out of a spreadsheet it carries an air of authority that it has not yet earned. This is precisely the moment to try to break it.
The test I use is straightforward, and I would argue it contains the entire framework in a single sentence:
The return has to be earned by closing gaps that you personally control, rather than by assuming that the world becomes friendlier to you.
Every assumption in the plan sorts into one of three categories.
Green covers the things you do yourself. Bringing below-market rents up to what comparable units in the neighborhood are actually leasing for today, recapturing utility costs in the way that is standard for your market, rebidding a management contract or an insurance policy at a real quoted number, bringing bad debt down to what everyone else in the submarket runs, and correctly resetting property taxes to reflect the price you are about to pay. These are all operational gaps that exist right now. You can point at them, and closing them is work that you do.
Yellow covers the things you do yourself, but only with receipts in hand. Rent premiums from a renovation belong here, and only if you have an itemized budget, comparable renovated units nearby proving that the premium is genuinely achievable, and an honest assessment of how quickly you can actually turn the units. Occupancy above the market norm belongs here. So does any organic growth assumption, and I would cap that one at what the submarket has actually delivered over recent history rather than at what you are hoping it delivers going forward.
Red covers everything that amounts to the market simply being nice to you. Selling at a lower cap rate than the one you bought at. Rent growth running above trailing market. Expense lines set below what the property could plausibly be operated for. Holding taxes and insurance flat, which is particularly seductive because it requires no active assumption at all, when both of those lines have moved in exactly one direction for years and it has not been yours. Refinancing on the assumption that rates come down on a schedule that suits you.
Then you apply the rule, which is that if the deal only works because of something sitting in the red category, the deal does not work. Red assumptions are not forbidden as possibilities, because sometimes cap rates genuinely do compress and sometimes rates genuinely do fall. They are forbidden as load-bearing structure. If you pull them out and the deal collapses, then what you were doing was never underwriting in the first place. It was forecasting, dressed up in the vocabulary of analysis.
There is a companion check that I have come to lean on nearly as heavily, which is to ask what share of your total profit arrives from selling the building versus from operating it. When most of the return shows up on the day you sell, and I start getting uncomfortable somewhere north of about sixty percent, then you are not really buying an operating business at all. You are making a directional bet on the market with a property attached to it and a meaningful amount of leverage sitting underneath. That can absolutely work out in your favor, but you ought to know that is the trade you are making before you make it, and I have watched more than one person discover it only on the back end.
Every assumption that fails these tests takes a haircut, and each haircut lowers the achievable income, which in turn lowers the price. What comes out the far end is therefore your number rather than the seller's number wearing your spreadsheet as a costume.
Three verdicts rather than two
What you end up with is not good or bad. It is one of three outcomes, and the third one is where most of the long-term value actually accumulates.
Achievable means the price works and the plan supporting it consists mostly of green-category work, which makes it a deal worth chasing.
A stretch means the price works, but only if execution is close to flawless. Those are sometimes still worth doing, provided you name the specific conditions that have to be de-risked first and then actually go de-risk them before you commit rather than after.
Fantasy means either that the price is so far below anywhere a seller would realistically go that there is no conversation to be had, or that the business plan required to justify the price exceeds what the market can actually support.
Most deals land in that third category, and that is not a failure of the process, it is the process working correctly. What matters is that the fantasy verdict is not a dead end, because it comes with instructions attached. You did not simply conclude "no." You concluded that this becomes interesting if the price drops to roughly here, or if market rents reach about there, or if somebody shows up to fund the capital that is currently missing. Those are trigger conditions, and they do fire, because sellers get tired and loans come due and circumstances change. When one of them fires eighteen months later, you are not starting from a blank page. You are pulling up work you already did on a property you already understand while everyone else is opening the file for the first time.
You cannot automate a philosophy that you do not have
Everything I have described so far is method, and none of it is software. That ordering is not incidental, and I think it is the piece that most people are getting backwards at the moment.
I underwrote somewhere between 100 and 150 deals entirely by hand before I automated any part of it. That worked out to roughly three hours apiece, the large majority of it spent on properties I had no intention of buying, and at the time it felt like a tax I was paying for the privilege of being in the business. It was not a tax. It was the specification, and I could not have written it any other way.
Here is what I ran into the first time I sat down to build the tooling. I could not automate my buy box, because my buy box did not actually exist in any form a machine could use. I was quite sure it did. I could describe it fluently to another investor over coffee and it sounded rigorous. But the moment I tried to write it down precisely enough that software could apply it without me standing there to interpret, I found out that what I had was a loose collection of instincts that quietly changed shape depending on how much I happened to like the deal sitting in front of me.
That is the uncomfortable finding underneath all of this, and I think it generalizes well past real estate. A set of criteria that lives only in your head cannot be automated, cannot be delegated to anyone else, and will rewrite itself as needed to justify the thing you had already decided you wanted. Writing it down honestly is the actual work. The software, once the thinking is finished, turns out to be comparatively easy.
So the sequence genuinely has to run in this order. You do the work by hand until a method emerges from it. You write that method down until it is precise enough to be applied by someone who is not you. Then, and only then, you automate it. Anyone starting at the third step is not automating their own judgment, they are outsourcing it to a model's default assumptions and then presenting the output as their own thinking.
What the automation actually bought
Once the method was written down and the engine was built against it, roughly three hours per deal became roughly ten minutes. I have run about two hundred and eighty deals through it over the past month and a half, which is more than I had done by hand across the several years preceding it.
I want to be careful about how I frame that, because "look how many hours I saved" is both the obvious takeaway and the wrong one. The hours were never really the point. What matters is where the hours went instead.
Deal flow is administrative work wearing a nice suit. It feels like the most important part of the job because it is the part that eventually leads to acquisitions, which means it will happily expand to consume all the attention that should be going into operating the assets you already own. That was the trade I was making without ever having consciously decided to make it, and I was making it badly.
What genuinely changed is subtler than speed. When a deal flags positive now, I sit down and spend the full three hours on it, deliberately and slowly, the same way I always did. The automation did not replace that work and was never meant to. What it did was stop me from spending three hours of careful thought on deals that were never going to deserve it, which means the exchange I am actually making is ten minutes to find out whether something warrants three hours, instead of three hours to find out that it did not.
Trust gets earned in cycles rather than granted on day one
Getting to the point where I believe the output took several rounds of work, and I want to be honest about that, because the version of this story where somebody builds an AI system and it immediately does their job for them is not true for anyone I have ever met.
The early versions were wrong in ways that were genuinely difficult to see. I ran them in parallel with my own hand-built underwriting on deals I had already completed, compared the two answers, and every time they disagreed I had to sit down and work out which of us was right. Frequently it was me and the engine needed correcting. But more often than I expected, it was the engine, and I had made an arithmetic error months earlier that had simply never been caught.
I would put my confidence at around ninety-five percent now, and that number is deliberate rather than modest. The remaining five percent is precisely why a human still makes the decision, and why the deals that pass still receive three hours of my own attention rather than a rubber stamp. A system I trusted completely would be a system I had quietly stopped checking, and that is a different and considerably worse problem than the one I set out to solve.
Two things broke along the way that are worth stealing.
The first was a circularity problem in the tax line. In Texas, property taxes get reset based on what you paid for the asset, which means your tax bill depends on the price, but the price depends on the income, and the income depends on the tax bill. It is genuinely circular, and my first version quietly sidestepped it by using the seller's current tax number. That is the single most common way I see a deal appear better than it is, because a seller who has owned the property for fifteen years is carrying a basis that has nothing whatsoever to do with the one you are about to establish. The fix is not clever. You guess a price, compute the tax that price would trigger, recompute the income, re-derive the price, and go around again until the number stops moving, which usually takes three or four passes. The hard part is knowing the loop is there at all.
The second was a ratchet, and this one is embarrassing enough that I think it is the more useful lesson. The tooling would solve for a price and then write that solved price back into the deal record, which was fine right up until the next run read that same field as an input. On any deal without a published asking price, the model was quietly feeding on its own prior output, drifting a little further from reality with each pass while remaining perfectly self-consistent the entire way down. Nothing ever looked broken, which is exactly what made it dangerous.
The general principle there reaches well beyond real estate, and it is worth stating directly: know which of your numbers are inputs and which are outputs, and never allow an output to quietly become an input. Once an analysis begins consuming its own conclusions, it will go on producing confident, internally consistent answers indefinitely, and not one of them will be about the world anymore.
The part I did not anticipate, which is that the deals themselves became the asset
Every deal I analyze now lands in a structured database, and every one of them gets a pin dropped on a map.
I built both of those for ordinary housekeeping reasons, and what they turned into is probably the most valuable thing I own that I could not have purchased from anyone.
When a new listing comes across now, I can pull up everything I have already underwritten in the surrounding area, see what I concluded about each of those properties, see the price I would have paid, and see when I looked at it. That is not what the market says those properties are worth, which is information anybody can buy. It is what they were worth to a disciplined buyer applying one consistent method across all of them, which is a completely different number and one that nobody sells.
That is proprietary market data in the most literal sense. You cannot subscribe to it. No vendor is going to tell you what two hundred and eighty deals in your market were genuinely worth to you, because the analysis has to be yours and it has to be applied consistently across every one of them for the comparison to mean anything at all. It exists only if you did the work and then kept it.
And it only exists if you kept the nos, which is where all of this circles back to where it started. The filter approach throws away ninety percent of your own research the moment it produces a verdict. The pricing approach compounds it instead, so that every deal I decline makes the next one faster to evaluate and easier to benchmark against something real. After two hundred and eighty of them I have a picture of my markets that I genuinely could not have bought at any price.
The system also improves itself, though not in the way people usually mean when they say that, so it is worth describing precisely. The improvement does not come from watching what properties eventually sell for, which would be a slow and fairly weak signal given how long that takes. It happens inside the analysis itself. Every time the engine runs a deal, it is checking its own arithmetic against the underwriting logic, and when something does not reconcile, when a figure fails to tie back to its source or an intermediate calculation contradicts one further down the chain, that surfaces as an error rather than passing through silently as a number. Each of those errors is a defect in the model that I can then go correct at the source instead of in that one deal.
What that means practically is that the underwriting gets more reliable through use rather than through my periodically sitting down to review it. Two hundred and eighty deals is two hundred and eighty independent opportunities for the logic to contradict itself somewhere, and the ones that surfaced early were almost all edge cases I never would have thought to test for deliberately, because I did not know they existed until a real deal walked into them. The volume is doing work that no amount of careful upfront design would have done, and it compounds, because every defect that gets fixed stays fixed for every deal that follows.
Building your own version of this
I would much rather you take the method than the tool, because the tool without the method underneath it is genuinely worse than having nothing at all.
The prompts below are written generically and deliberately stripped of my thresholds, for the reason I gave earlier. Filling in your own numbers is not a step you can skip, and it is not a small exercise.
They are also considerably simpler than the ones I actually run, and I want to be upfront about that rather than have anyone assume these are the finished article. What I use has years of accumulated specificity built into it, all of which is particular to how I think about apartments, what I want the output to look like on the page, which figures I want surfaced first because they are the ones that kill deals for me, and a long list of conditions I have learned to check because at some point one of them bit me. None of that would help you, and most of it would actively get in your way.
So treat what follows as scaffolding rather than as a finished tool. The gaps are where your own judgment goes. You should be filling in the criteria that matter in your world, the format you actually want to read on the other end, the checks that reflect what you have personally learned to be suspicious of, and the sequence in which you want to see things because that ordering reflects how you genuinely think through a decision. There are almost certainly things you look at closely that I never think about, just as there are things I check obsessively that would be noise to you, and the version of this that is worth having is the one shaped around your criteria rather than mine. If you run these exactly as written and take the output at face value, you have skipped the entire point of the piece, which is that the thinking has to be yours before the automation is worth anything at all.
Prompt 1. Establish what it earns today
I'm evaluating [OPPORTUNITY]. Before we discuss any upside, I want a
clear-eyed picture of what this actually produces right now, as I would
inherit it.
Work through the financials and separate them into:
- What genuinely recurs
- What happened once and won't repeat
- What is tied to the current owner and disappears when they do
- What resets at the moment of transfer, and to what new level
Where a cost looks implausibly low for something of this type and age,
say so and tell me what it would more realistically run.
Give me back:
1. Restated current earnings, showing each adjustment as its own line
so I can argue with any of them individually.
2. Everything you could not explain from the documents I gave you,
phrased as a direct question I can put to the other side.
Project nothing. Assume no improvement. Today only.
Prompt 2. Solve for the price
Using that restated baseline, do not tell me whether this is a good
deal. Solve for the price that would make it one.
My requirements: [YOUR RETURN THRESHOLDS]
My financing assumption: [RATE / TERMS / LEVERAGE]
1. Lay out the plan required to get from today's earnings to steady
state. Every line needs a dollar figure and the specific evidence
it rests on. If a line has no evidence, mark it.
2. Solve for the highest price that satisfies each of my requirements
on its own.
3. Report all of those prices. The lowest one is my real ceiling.
Tell me which requirement produced it, because that is the
constraint that actually governs this deal.
4. Show the distance between that ceiling and the asking price, in
dollars and as a percentage.
If any input depends on the price I'm solving for, loop until the
numbers settle and tell me how many passes that took.
Prompt 3. Now argue against yourself
Take the plan you just built and challenge every assumption in it.
Sort each one into exactly one category:
EARNED I close this gap myself through operational work, and it
is measurable against something real today
CONDITIONAL I close it myself, but the claim is only credible with
specific proof. Name the proof required.
GRANTED It depends on outside conditions improving: better pricing
at exit, growth above recent trend, costs that only rise
staying flat, cheaper money later
Then:
- If my return only clears because of anything in GRANTED, say so
directly and show me what remains without it.
- Discount every CONDITIONAL item that lacks its proof, then solve
for the price again with those discounts applied.
- Tell me what portion of total profit comes from the eventual sale
rather than from running it. If most of it comes from the sale,
say that plainly. I'm making a market bet, not an operating one,
and I want to know that before I sign.
Close with one word: ACHIEVABLE, STRETCH, or FANTASY. If it isn't
achievable, tell me precisely what would have to change in the world
for it to become so.
The third prompt is the one that earns its keep, because anybody can get a model to construct an optimistic case for something, given that optimism is more or less its default posture. The value lies in forcing it to argue against itself and then report back on which category its own optimism was coming from.
From there the automation is largely a question of wiring, and the tooling available now is genuinely good. Claude Code and Codex will both let you build agents that run your own logic against your own documents on your own machine, and harnesses like Hermes or Open Claw sit a layer above that and let you chain the steps together so that a document arriving triggers the entire sequence without you having to start it. None of that is exotic at this point, and it is getting easier every few months.
But all of that wiring sits downstream of everything else in this piece, and I would say this as plainly as I know how: automate your own philosophy rather than somebody else's. The output of a system like this is only ever as trustworthy as the math you put into it and the number of cycles you have spent checking that math against outcomes you can verify. Build the method, prove it out by hand until you believe it, write it down precisely, validate it against work you have already completed, and then let the machine carry the administrative weight so that your own attention goes to the small handful of decisions that genuinely deserve it.
I still look at a great many multifamily deals that I have no intention of buying. The difference now is that every one of them leaves a number behind, a price I would have paid and the reasoning that produced it, sitting in a database with a pin on a map.
The overwhelming majority of those numbers will never turn into anything at all. But they are the reason that when something finally does line up, I am not sitting there trying to work out what I think about it. I already know.