
Why AI Still Can't Price My Rehabs
I have automated most of this business. One number still resists: what a rehab actually costs me. Why I stopped trying to close that gap, and started treating it as a measurement of the moat.
I've automated more of this business than I expected to.
Sourcing runs itself. Intake pulls property data, flood, comps, and alternate AVMs into one view before I've finished my coffee. I talk a scope out loud and it comes back structured. Comps get triangulated, argued with, and pressure-tested. The parts of this job that used to eat my mornings mostly don't anymore.
There's exactly one number the whole stack still can't produce: what a rehab actually costs me.
Not "what a rehab costs." It'll answer that all day, instantly, with total confidence. It just won't be my number. And after a year of building, I've stopped treating that as a bug to squash and started treating it as the most interesting thing the machine has told me.
Three ways it gets the number wrong
It prices retail. Ask a model what a kitchen costs and you get the number a homeowner pays a general contractor who found them through a Google ad. That's a real number. It just isn't the number an operator pays a sub he's been using for years. The model is averaging a world I don't buy in.
It over-details. Give it room and it will line-item a rehab into oblivion, a scope so granular it looks rigorous. But detail isn't accuracy. A forty-line breakdown built on retail priors is just a very confident wrong answer with better formatting. I don't buy a rehab in forty lines. I buy it in the handful of categories I actually cut checks for, and the granularity beyond that is theater.
It doesn't know my sources. This is the real one. My cost basis isn't a market rate. It's a set of relationships. The crew that shows up, the supplier who gives me the number he doesn't give walk-ins, the guy who'll do the unglamorous thing behind the walls without a change order every Tuesday. None of that is on the internet. There is no dataset. It exists in my phone and in years of showing up.
The part that took me a while to see
I spent real effort trying to close that gap (better prompts, better context, feeding it more). Then the obvious finally landed:
If a model could price my rehab from public data, my pricing wouldn't be an edge.
The model's ignorance of my cost basis isn't a failure of the model. It's a measurement of the moat. Anything AI can do for everyone is, by definition, not an advantage. It's table stakes arriving on a schedule. The things it can't do for you are where your business actually lives.
That reframed the whole project. I stopped trying to teach the model to know what I know, and started building so it never has to.
The partial fix (because a confession without a move is just a shrug)
Three things that make it useful without letting it guess:
Bring your own price book. The model doesn't get to price anything from its priors. It assembles from my rates, my sources, my history. If a number isn't something I gave it, it doesn't get to invent one. It flags the hole and asks. A missing number I can see beats a plausible number I can't.
Cap the detail. Force it down to the categories I actually buy in. This feels like giving something up; it isn't. Constraining the output to the shape of my real decisions kills the fake precision and makes the estimate something I can argue with.
Let it describe, never decide. Same rule as everything else I build: natural language on top, deterministic logic and my own data underneath. The model turns a walkthrough into structured scope, and that part it's genuinely great at, better than me with a clipboard. The engine turns scope into dollars, by fixed rules, the same way every time. The conversation makes the scope sharper. It never touches the price.
That split is why talking a scope out loud beats typing into boxes: I mention the soft spot by the back door and the panel that has to go, precisely because I'm talking. Better inputs, hard math. Not a smarter guesser.
What's still unsolved
I'm not going to tell you this is finished, because it isn't.
The seam I haven't closed is the judgment inside the scope, the moment where I look at a house and know we're going to open a wall and find something, or know this particular kitchen can take a lighter touch than the comps suggest. That's not pricing and it's not description. It's pattern recognition off houses I've stood in. I don't have a clean way to hand that over, and I'm suspicious of anyone who says they do.
So the honest state of it: AI made me faster at everything surrounding the number, and no closer to the number itself. I'll take that trade every day. But I'm not going to dress it up as solved.
The lesson that generalizes
If you're building AI into your own operation, the useful question isn't "what can I automate?" It's "what resists automation, and why?" Because the answer is usually a map to where your money actually is.
Automate the description. Guard the judgment. And when the model can't do something for you, look hard before you call it a limitation. Sometimes that's not the machine failing.
Sometimes that's the moat.
This is the deep cut. The working version, including the exact instruction that makes the model flag a missing number instead of inventing one, runs in the No-Hype AI newsletter.