Compare bids only after normalizing scope: list every allowance, exclusion, alternate, and unit price side by side, then check general conditions, overhead and profit, escalation, and contingency separately. A low bid with wide exclusions is usually the most expensive one.
Normalize before you compare
Build a scope matrix — every line item, every bidder, marked included / excluded / allowance
Convert allowances to realistic values before comparing totals
Check quantities against the drawings on the biggest three trades
Separate general conditions and general requirements from the trade cost
Identify escalation assumptions and how long the price is held
Confirm the contingency: whose it is, who spends it, and what happens if it isn't used
Red flags
A bid materially below the others with no explanation of why
"By owner" or "excluded" language covering scope you assumed was included
No schedule attached, or a schedule with no durations by trade
Allowances used as a substitute for pricing known scope
Unit prices missing for likely site work variability
What a fair bid looks like
Complete against a defined scope of record, priced with named subcontractors on the major trades, with an attached schedule, a stated escalation position, and exclusions listed rather than implied. Fairness is verifiable — it isn't a feeling about the contractor.
Common questions
How many bids should I get?
Three qualified bids against an identical scope is more useful than five bids against five interpretations. Prequalify first, then bid.