Contractor bid comparison spreadsheet for homeowners
Comparing bid totals can reward the contractor who left out the most work. This page builds a bid comparison in Excel that shows the spread, flags blank scope lines and compares like for like.
Free: Contingency & Change Order Tracker, one Excel tab. Confirm your email and the file arrives right away, plus an occasional note (at most one a week) on keeping a renovation on budget. Unsubscribe in one click. Privacy.
General information only, not financial, construction or legal advice. Contingency, holdback and payment-split percentages are your own inputs, and payment and deposit rules vary by contract and by state or province; check yours. Figures cited from other sources are dated where they appear.
The point of a bid comparison sheet
A bid comparison spreadsheet lines every bidder's price up against the same list of scope items, then shows the lowest, highest and spread for each item and counts the cells a bidder left blank. The blank count matters because a total built from missing lines looks cheaper. In the example below, three bathroom bids total $18,200, $21,500 and $16,900, a spread of 27.2%, and the lowest total belongs to the bidder who left two lines blank.
Worked example: three bathroom bids
Put headings in row 1 (scope item in A, bidders in B to D) and the seven scope items in rows 2 to 8. Columns E to G are formulas. A blank cell means the bidder gave no price for that line.
| A: Scope item | B: Bidder 1 | C: Bidder 2 | D: Bidder 3 | E: Lowest | F: Highest | G: Spread |
|---|---|---|---|---|---|---|
| Demolition and haul-away | $1,500 | $1,800 | $1,500 | $1,500 | $1,800 | 20.0% |
| Plumbing | $4,400 | $5,200 | $4,200 | $4,200 | $5,200 | 23.8% |
| Electrical | $1,700 | $2,200 | $1,800 | $1,700 | $2,200 | 29.4% |
| Waterproofing and tile | $5,900 | $6,900 | $6,400 | $5,900 | $6,900 | 16.9% |
| Vanity, toilet, fixtures set | $2,100 | $2,200 | $3,000 | $2,100 | $3,000 | 42.9% |
| Drywall and paint | $1,900 | $2,300 | (blank) | $1,900 | $2,300 | 21.1% |
| Permit and fees | $700 | $900 | (blank) | $700 | $900 | 28.6% |
| Total | $18,200 | $21,500 | $16,900 | $16,900 | $21,500 | 27.2% |
| Blank lines | 0 | 0 | 2 |
Spread is (highest minus lowest) divided by lowest, rounded to one decimal: for the totals, (21,500 - 16,900) / 16,900 = 27.2%. Bidder 3 is lowest in total, but only because two lines are empty. On the five lines all three priced, the totals are $15,600, $18,300 and $16,900, so Bidder 1 is the lowest and the spread narrows to 17.3%. If Bidder 3's two blank lines were priced at Bidder 1's amounts ($1,900 + $700), Bidder 3 would be $19,500; at Bidder 2's amounts ($2,300 + $900), $20,100. Those are what-ifs, not quotes. A blank means ask, not assume.
The formulas
E2 Lowest =MIN(B2:D2)
F2 Highest =MAX(B2:D2)
G2 Spread =IFERROR((F2-E2)/E2,"")
(fill E2:G2 down to row 8)
B9 Total =SUM(B2:B8) (copy right to D9)
B10 Blank lines =COUNTIFS(B2:B8,"") (copy right to D10)
Lowest total =MIN(B9:D9) 16,900
Highest total =MAX(B9:D9) 21,500
Total spread =(MAX(B9:D9)-MIN(B9:D9))/MIN(B9:D9) 27.2%
Lowest bidder =INDEX(B1:D1,MATCH(MIN(B9:D9),B9:D9,0)) Bidder 3
Like-for-like (B11, copy right to D11)
=SUMIFS(B2:B8,$B$2:$B$8,"<>",$C$2:$C$8,"<>",$D$2:$D$8,"<>")
15,600 / 18,300 / 16,900
MIN and MAX skip blank cells, so the per-row spread uses only the bids that exist. SUM treats a blank as zero, which is exactly why Bidder 3's total looks lowest. The like-for-like row adds only the rows where every bidder has a number, so the totals are comparable.
Which row to ask about first
A wide spread on one row means the bidders disagree about that item. Here the widest is the fixtures line at 42.9% (2,100 to 3,000) and the narrowest is waterproofing and tile at 16.9% (5,900 to 6,900). A wide spread is a question to ask, not proof that anyone is wrong: one bid may include fixtures and another an allowance. Let the sheet find it:
Widest spread =MAX(G2:G8) 42.9%
Item with it =INDEX(A2:A8,MATCH(MAX(G2:G8),G2:G8,0)) Vanity, toilet, fixtures set
Picking a bidder and passing the price on
Once you choose, type the bidder's name beside each item (H) and pull that price into a "quote used" column:
H2 Selected Bidder 1 (typed, from a dropdown)
I2 Quote used =IFERROR(INDEX(B2:D2,MATCH(H2,$B$1:$D$1,0)),0)
If you hire one contractor for the whole job, select the same bidder on every row. Mixing bidders per item only makes sense when the items are separate trades. The quote used becomes the Base quote in your budget; from there the logic in committed vs paid takes over.
Checks before you rely on it
- Ask about every blank. It may mean included elsewhere, excluded or simply not priced. Get the answer in writing and fill the cell.
- Use the same scope list for everyone. If one bidder adds a line you did not ask for, add the row and ask the others to price it.
- Watch for allowances. A fixture allowance and a fixed price are not the same number; note which is which beside the figure.
- Add a bidder only when the bid is in. An empty bidder column totals $0 and wins MIN, so the Lowest total would read $0.
- Look hardest at the lines left blank. In the example, permit and drywall were the two blanks.
Related guides
Once a bid is accepted, plan its payments with the payment schedule template, and log later additions with the change order tracker. A full worked room is in the bathroom remodel budget spreadsheet. The Hexloom Renovation Budget Tracker has five bidder columns per item.
What this does not do
This is a planning tool, not financial, construction or legal advice. It compares prices only. It cannot judge a contractor's references, schedule, communication or how a scope line is described, and it does not say which bid to accept. The amounts above are made up for the example.
More renovation budget guides
- Renovation cost overrun percentage calculator: the formula and a worked example
- Renovation contingency tracker: how much contingency is left
- Renovation change order tracker: a spreadsheet for homeowners
- Renovation budget spreadsheet: track committed vs paid
- Renovation budget by room spreadsheet: SUMIFS per room, with an overrun flag
- Kitchen remodel budget spreadsheet in Excel, built line by line
- DIY renovation expense tracker spreadsheet: receipts by room and category
- Contractor payment schedule template for homeowners in Excel
- Bathroom remodel budget spreadsheet in Excel: how much is really left
Already built
The Quotes tab of the Hexloom Renovation Budget Tracker has a row per scope item and room for five bidders, with the lowest, highest and spread percent for each item and a count of missing scope lines per bidder. The bidder you select for each item feeds the Budget tab's Base quote. It is one Excel file, $29 one time, with no bank link and no account.