Hot take: the guy who quoted me $14,200 for a new roof in Decatur was guessing, and I caught it
He measured my roof from the street and never once went up there, so when the roofer I actually hired found a 6 foot section of soft decking behind the dormer that would have pushed the job way past that quote, I realized the first number was just a hook to get me to sign before anyone looked close, and I now make every bidder walk the roof with me before I hand over a dime.
That would fire me up too, since a number pulled from the street is just a sales tactic dressed up as a bid. You did the right thing making them get up there with you, because the real problems almost never show themselves from the curb. Sorry you had to learn it the hard way, but at least now nobody gets to guess on your dime.