Ask a property manager who their best plumber is and you'll get an answer in under a second. Ask them why, and you'll usually get some version of "they're good, they always pick up." That's not nothing, but it isn't evidence either, and it's how a vendor who's quietly gotten worse keeps getting work for another eighteen months.
Why memory is a bad ranking system
The problem isn't that operators have poor judgment. It's that human memory weights the wrong things:
- Recency beats pattern. The vendor who did a great job last Tuesday outranks the one with a better two-year record, because last Tuesday is what you can recall.
- Responsiveness gets mistaken for reliability. A contractor who answers the phone immediately feels dependable. Answering fast and finishing on budget are unrelated skills, and only one of them shows up in your memory.
- The bad experience you didn't personally have is invisible. If your colleague dealt with the disaster, it isn't in your ranking at all.
None of this is a character flaw. It's just what happens when the ranking system is a person recalling anecdotes instead of a record.
The three numbers worth tracking
You don't need a data team for this. Three fields per completed job get you most of the way:
- Completion rate. Of the jobs you dispatched to this vendor, how many did they actually finish? A vendor who accepts everything and completes 70% of it is a scheduling problem wearing a helpful face.
- Real final cost, not the quote. The gap between quoted and final is the single most useful number you can hold on a contractor. Some vendors quote low and settle high; you only see it in aggregate.
- Your own rating after the work. One to five, recorded when the job closes while the memory is fresh, not reconstructed months later.
The vendor with no history is the one to watch
Here's the trap almost every automated dispatch system falls into: a brand-new vendor has no bad history, so any scoring system that treats "no data" as "no problems" will rank them optimistically. If the estimate field is also empty, a naive system can read that as a cheap job and send it straight through.
The right rule is the boring one: an unknown cost is not a cheap cost. A vendor with zero completed jobs should require a human to approve the first one regardless of the estimate, and earn autonomy as the record accumulates. Trust should be earned per-vendor, not granted by default.
Watching for the slow decline
The failure mode that costs the most isn't the vendor who's obviously bad. It's the one who was genuinely good in March and is measurably slower by September. Job to job, nobody notices; a two-week response time looks like a busy month. Across six months of your own data, it's a clear line going the wrong direction.
This is only visible if you keep history rather than just a current snapshot. A single "average response time" field that gets overwritten every time tells you where a vendor is today, and nothing about which direction they're heading.
What to do with it
Once you have the numbers, the dispatch decision stops being a judgment call. For a given trade, rank by completion rate, then rating, then cost, and send the work to the top of the list. Keep an approval gate for anything above a dollar threshold you set, and for any vendor without a track record. That combination gives you speed on the routine work and a human decision exactly where one is actually warranted. You can watch that approval gate work on a sample portfolio in the demo dashboard, no signup needed.
The same ranked-bench approach applies to cleaners, who usually get managed by group text and habit instead. That's the subject of the same-day turnaround playbook.
The point isn't to remove your judgment from vendor selection. It's to stop asking your memory to do a job that a short table of numbers does better. Ranking tells you who to send. How fast to send them is a separate question, and it depends on whether there's a guest in the unit right now.
TraxKey AI runs this for you
A dedicated team of 10 specialized AI agents works your portfolio 24/7, across long-term units and short-term rentals in one system. Your first unit is free, no card.