Florida condo boards · milestone repairs
How to Compare Three Milestone Repair Bids That Don't Match
Updated August 2026 · 8 minute read
Your association completed its milestone inspection. The engineer's Phase 2 report started the 365-day repair-commencement clock. You sent the scope to contractors, and three bids came back — and they don't match. Different line items, different exclusions, different allowances, prices hundreds of thousands of dollars apart.
This is the single most common situation Florida boards are in right now, and it is exactly where expensive mistakes get made. On commercial construction projects, nobody awards a contract off the cover-letter numbers. The owner's representative first levels the bids — adjusts each one so all three are priced against the same scope — and only then compares. Volunteer boards almost never do this, because nobody has ever shown them how.
Here is the method.
Step 1: Build one scope list, not three
Take the engineer's repair scope and break it into individual lines — concrete restoration by square foot, railing replacement by linear foot, waterproofing, painting, mobilization, engineering support, permits. List every line any bidder priced, even if the others didn't. That last part is the whole trick: the lines a bidder left out are where a low bid hides.
Step 2: Map each bid onto that list
Go through each proposal and place its pricing against your scope lines. You will find three kinds of gaps: lines a bidder simply didn't carry, lines carried as an "allowance" (a placeholder number that can grow), and lines pushed into the exclusions page in small print. Log all three. The exclusions page is the most important page in every construction bid, and it's the one boards read last, if at all.
Step 3: Price the gaps
For every line a bidder didn't carry, insert a fair value — use the average of the bidders who did price it. Add that to the bidder's total. This is the leveling adjustment: it answers the question "what would this bid cost if it actually covered the same work as the others?"
Step 4: Compare the adjusted totals — expect a reversal
Here is a worked example with realistic Florida coastal-restoration numbers:
| Bidder A | Bidder B | Bidder C | |
|---|---|---|---|
| Cover-letter price | $752,000 | $938,000 | $1,247,700 |
| Scope lines not carried | 7 | 2 | 0 |
| Leveling adjustment | +$323,000 | +$77,280 | $0 |
| Adjusted comparable total | $1,080,440 | $1,009,820 | $1,247,700 |
Step 5: Check qualifications before you vote
Price isn't the only axis. Verify each bidder's license status and complaint history with DBPR, confirm insurance limits, ask for concrete-restoration references at comparable buildings, and — new for Florida associations — collect the conflict-of-interest disclosure now required under HB 913. Then put your remaining questions to the bidders in writing, so the answers are in the record with the minutes.
Why this matters more in 2026
The average Florida milestone-repair permit jumped from roughly $337,000 to $496,000 in a single year. Deadlines are compressing bid timelines, contractors are busy, and rushed boards are voting on non-comparable numbers. A few hours of leveling routinely moves the decision by five or six figures — it is the highest-value administrative work a board will ever do.
The Florida Milestone Repair Bid Leveling Kit is a ready-built workbook — 23 restoration scope lines, automatic leveling math, exclusions log, a DBPR/HB 913 qualifications checklist, and a board summary that prints for the minutes. 240 live formulas, no macros, works in Excel and Google Sheets. $149, versioned and dated.
Get the Bid Leveling Kit — $149Integrated Development Advisory LLC is an independent information publisher and is not an engineer, architect, reserve specialist, community association manager, or law firm. This article and the kit are strictly administrative — arithmetic and organization. They do not opine on structural adequacy, required reserves, or statutory compliance. Verify current requirements with your association's licensed professionals.