Construction Go No Go Bid Decision Matrix in Excel: The Jobs You Should Not Have Bid

A commercial general contractor in Greenville booked $9,660,000 across seven jobs in 2025. To win those seven, the estimating department priced 46. Two estimators, a project manager pulled in every bid week, 2,760 hours of takeoff, scope leveling, and voicemails to subs who never quoted. A construction go no go bid decision matrix in Excel would have told them, before a single sheet came off the plotter, that most of those 46 bids were a donation. This is not a hit rate problem. It is a selection problem, and it prices out to the dollar.
Here is the part that stings. The two worst jobs of their year, the ones that consumed a superintendent for eleven combined months and closed at 1.8 percent and negative 2.2 percent gross margin, were both jobs they won. Winning was the punishment.
Price the Bid Before You Price the Job
Most contractors cannot tell you what one bid costs. It sits inside overhead, so it feels free. It is not free, and the number takes ten minutes to build.
A chief estimator at $98,000 with 32 percent burden costs $129,360 a year against 1,880 available hours, so $68.81 per hour. Round to $69. Then add the direct costs that exist only because you chose to bid: plan reproduction, bid bond premium, the site walk, and on design-build work, the proposal package.
| Bid type | Contract value | Estimating hours | Labor at $69 | Direct bid costs | Cost to bid |
|---|---|---|---|---|---|
| Invited private tenant improvement | $780,000 | 34 | $2,346 | $240 | $2,586 |
| Negotiated commercial addition | $1,900,000 | 52 | $3,588 | $310 | $3,898 |
| Municipal site and utility, hard bid | $1,600,000 | 64 | $4,416 | $580 | $4,996 |
| Public school addition, open bid | $2,400,000 | 88 | $6,072 | $910 | $6,982 |
| Design-build RFP with proposal book | $3,100,000 | 128 | $8,832 | $1,850 | $10,682 |
In the workbook, B6 holds the hours you expect to spend, B7 your loaded rate, and B8 the direct costs. B9 computes what walking into this bid costs you:
=B6*B7+B8
Their weighted average across 46 bids was $4,840, so total 2025 estimating spend was $222,640. Gross profit produced by the entire company that year was $669,600. Estimating consumed 33 cents of every gross profit dollar. That ratio is why a scorecard is not paperwork. Bid selection is the second largest controllable cost in the business after field labor, and it is the only one most contractors never measure.
Score Eight Factors, Not Eight Feelings
Every contractor already has go no go criteria. They live in the owner's head, they change with how the backlog looked that morning, and they cannot be delegated. The point of writing them down is not documentation. It is that a chief estimator with a scored sheet can decline a job on a Tuesday without calling the owner, and the answer is the same answer the owner would have given.
Eight factors, weights summing to 100, each scored 1 to 5 against written anchors. The anchors matter more than the weights. Without them you get a 4 because the job feels like a 4.
| Factor | Weight | Score 1 | Score 3 | Score 5 |
|---|---|---|---|---|
| Owner payment history and funding | 20 | Unknown private owner, no funding letter, or a record of paying past 60 days | Known owner, pays in 45 to 60 days, funding confirmed | Repeat owner paying inside 30 days, bank funded with a lender inspector |
| Bidder count and who is on the list | 15 | Open public advertisement, 8 or more bidders expected | Invited list of 5 to 7 you mostly recognize | Three or fewer, or negotiated with no formal competition |
| Schedule fit against backlog | 15 | Peak manpower lands on top of a job already at full crew | Partial overlap, manageable by subcontracting more scope | Starts inside a backlog gap with crews already coming free |
| Self-perform content | 15 | Under 15 percent, you are a broker on this one | 25 to 40 percent in trades you staff | Over 50 percent in your strongest trade |
| Contract terms | 12 | Pay-if-paid, no damages for delay, uncapped liquidated damages, 10 percent retainage to final | Standard AIA A101, 10 percent retainage reduced at 50 percent complete | Retainage 5 percent, liquidated damages capped, prompt pay statute applies |
| Bonding and working capital draw | 10 | Consumes over 30 percent of remaining aggregate, or peak negative cash exceeds 60 percent of the line | Draws 15 to 30 percent of remaining aggregate | Under 10 percent, or no bond required and terms are monthly |
| Relationship and information advantage | 8 | Never met the owner or the architect, plans came from a plan room | You know the architect, not the owner | You built the last two for this owner and walked the site with them |
| Distance from the yard | 5 | Over 90 minutes, per diem or an hour lost each way | 40 to 90 minutes | Under 40 minutes, crews go home at night |
Weight the first factor highest because it is the only one that can take the whole job away from you after you have already built it. A 14 percent margin on a job that pays in 118 days and holds retainage for eleven months past substantial completion is not a 14 percent margin. It is a loan you made to a stranger at your line of credit rate.
Four knockouts that skip the score entirely
Some conditions do not belong in a weighted average, because a high score everywhere else should not be allowed to outvote them. Any one of these is a no-bid no matter what the arithmetic says.
- The owner or general contractor still owes you money past 90 days on any job, or you have filed a lien against them in the last three years.
- There is no confirmed funding at bid time. No loan commitment, no bond referendum passed, no appropriation line. A project funded by intention is a project that stops in month five.
- The bid form requires you to waive claims for owner-caused delay and the published schedule carries less than 5 percent float. That combination transfers the whole schedule risk to you for free.
- More than 25 percent of contract value is still uncovered by a firm subcontractor quote 24 hours before bid time. Filling that gap with a plug number is not estimating, it is a wager.
Put the four knockouts in B12 through B16 as TRUE or FALSE dropdowns and let B18 decide whether the scoring section even runs:
=IF(COUNTIF(B12:B16,TRUE)>0,"NO BID","SCORE IT")
Build the Matrix in Excel
One sheet per invitation, or one saved template you copy. Inputs in column B, factors in rows 22 through 29, and every decision cell computed so nobody can nudge it.
| Cell | Field | Source |
|---|---|---|
| B2 to B5 | Project, owner, contract value, bid date | Typed from the invitation |
| B6 to B8 | Estimating hours, loaded rate, direct bid costs | Typed. Hours come from a comparable past bid, not optimism |
| B9 | Cost to bid | Computed |
| B12 to B16 | The four knockouts plus one open slot for your own | TRUE or FALSE dropdown |
| B18 | Knockout result | Computed |
| B22 to B29 | Factor weights | Locked. Set once a year, not per job |
| C22 to C29 | Scores, 1 to 5 | Typed against the written anchors |
| D22 to D29 | Weighted points | Computed |
| B31 | Weighted score, 1.00 to 5.00 | Computed |
| B33 to B37 | Target margin, win probability, expected contribution, return on estimating spend | Mixed |
| B38 | Decision | Computed. This is the only cell anyone reads |
The weighted points in D22, filled down to D29:
=B22*C22
The score itself in B31, which converts 800 possible weighted points back to a 1 to 5 scale that people can hold in their head:
=SUMPRODUCT(B22:B29,C22:C29)/100
Put an integrity check in B32 so a well meaning estimator who decides bonding deserves 20 points cannot quietly break the scale for every future job:
=IF(SUM(B22:B29)<>100,"WEIGHTS DO NOT SUM TO 100","")
A score by itself still does not tell you whether to spend the hours. A 3.4 on an $800,000 tenant improvement and a 3.4 on a $3,100,000 design-build are not the same decision, because one costs $2,586 to chase and the other costs $10,682. So convert the score into money. B33 holds the gross margin you actually realize on this class of work, B34 pulls a win probability from your own history, and the next three cells turn that into an expected return on estimating hours.
=LOOKUP(B31,Bands!$A$2:$A$6,Bands!$B$2:$B$6)
Gross margin dollars at target, in B35:
=B4*B33
Expected contribution in B36, which is that margin discounted by the odds of winning:
=B35*B34
Return on estimating spend in B37 is =B36/B9, and the decision in B38 requires both a real score and a real return:
=IF(B18="NO BID","NO BID",IF(AND(B31>=3.6,B37>=3),"BID",IF(AND(B31>=3,B37>=3),"BID ONLY IF THE SHOP IS IDLE","NO BID")))
Why a floor of 3 on the return and not 1? Because expected contribution above cost to bid only breaks even on that single bid, and your estimating department also has to carry every bid you lose, plus the salary of the person who has to be there whether an invitation arrives or not. Three is the number that leaves the department funded. Set your own once you have run the backtest below.
Backtest It on Last Year Before You Trust a Single Threshold
A scoring model you have not tested is a horoscope with cell references. Before this thing gets to reject anything, pull last year's bid log and score every job using only what you knew on bid day. Not what you learned in month four. If the owner turned out to be a slow payer and you did not know it at bid time, that factor scores a 3, not a 1.
Here is what the Greenville contractor's 46 bids looked like once sorted by score.
| Score band | Bids | Wins | Hit rate | Estimating spend | Gross profit produced | Gross profit per estimating dollar |
|---|---|---|---|---|---|---|
| 4.2 to 5.0 | 6 | 3 | 50.0% | $24,800 | $468,030 | $18.87 |
| 3.6 to 4.1 | 9 | 2 | 22.2% | $39,600 | $232,050 | $5.86 |
| 3.0 to 3.5 | 12 | 1 | 8.3% | $58,900 | $22,320 | $0.38 |
| 2.5 to 2.9 | 11 | 1 | 9.1% | $54,200 | ($52,800) | ($0.97) |
| Below 2.5 | 8 | 0 | 0.0% | $45,140 | $0 | $0.00 |
| Total | 46 | 7 | 15.2% | $222,640 | $669,600 | $3.01 |
The bottom three bands consumed $158,240 of estimating, 71 percent of the year's estimating budget, and produced negative $30,480 of gross profit. That single sentence is the whole argument for a matrix, and it came out of their own bid log, not out of a theory about contractor discipline.
Look at the 2.5 to 2.9 row for the second lesson. It shows a higher hit rate than the band above it. That is noise, one win out of eleven, and that win was the $2,400,000 school addition they took at 6.4 percent below the second bidder and finished at negative 2.2 percent. Winning a hard bid by that margin is not a victory, it is a receipt for an estimating error. Never read a probability off eleven bids. Smooth the bands before you feed them to the lookup, and use three years of bid log if you have it.
| Bands sheet, column A | Column B, win probability used |
|---|---|
| 0.0 | 4% |
| 2.5 | 8% |
| 3.0 | 12% |
| 3.6 | 22% |
| 4.2 | 45% |
Column A holds the lower bound of each band in ascending order, which is what makes the approximate LOOKUP land in the right row. If your scores cluster between 3.0 and 3.8 on everything, your anchors are too generous. Rewrite them until a genuinely bad job scores below 2.5, because a matrix that never says no is a matrix that costs you 40 hours a year to maintain and changes nothing.
What Changes When You Start Saying No
Run the same 61 invitations they received in 2025 back through the finished model. Bid all 6 in the top band, all 9 in the 3.6 to 4.1 band, and the best 6 of the 12 in the middle band where the return on estimating spend clears 3. Decline the other 25.
| Line | 2025 as actually bid | Same 61 invitations, matrix applied |
|---|---|---|
| Bids submitted | 46 | 21 |
| Estimating spend | $222,640 | $93,850 |
| Estimating hours | 2,760 | 1,240 |
| Expected wins | 7 | 5.5 |
| Contract booked | $9,660,000 | $6,640,000 |
| Gross profit | $669,600 | $711,240 |
| Gross profit per estimating dollar | $3.01 | $7.58 |
Slightly more gross profit on 31 percent less revenue, using 58 percent less estimating money. The right column is an expected value built from their own realized band statistics, not a promise, and any single year will scatter around it. The direction is not in doubt though, because the removed bids are the ones that historically produced nothing.
Now the objection every contractor raises at this table. Revenue drops $3,020,000. If your overhead structure requires $9,660,000 of volume to cover itself, you do not have a bidding problem, you have an overhead problem, and bidding low-scoring work to feed it is the exact mechanism by which contractors go out of business at record revenue. Fix the overhead or go get better invitations. Do not fix it by buying revenue at negative margin.
Which brings up what the freed capacity is actually for. Twenty five fewer bids returns about 1,520 estimating hours, roughly 30 hours a week. The instinct is to cut a head and bank the salary. That is the wrong move in most shops, because the binding constraint was never estimating hours. It was the number of high-scoring invitations arriving in the first place. Six invitations scored above 4.2 all year. Spend the freed 30 hours a week on the owners, developers, and architects who generate that kind of invitation, and the top band goes from six to fifteen. That is the compounding version of this, and it only becomes available once you stop spending the department on work you were never going to win.
Rules that make it stick
- Score every invitation, including the ones you are certain about. The log is worthless with gaps in it, and the certain ones are where the surprises live.
- Lock the weights for a full year. Adjusting them mid-year to justify a job you already want is how the model dies.
- Record the actual outcome, win or loss, and the realized gross margin at closeout on the same row. Without the outcome column you cannot recalibrate, and an uncalibrated model is just the owner's opinion in a spreadsheet.
- Review the log quarterly and check one number: gross profit per estimating dollar. If it is not climbing, your anchors are wrong.
Start With Last Year's Bid Log
Build the sheet this week, then score your last 20 bids before you score a new one. You already know which of them you won and what they returned, so the backtest costs you an afternoon and tells you immediately whether your anchors separate good work from bad. If the model retroactively flags the two jobs that hurt you, it works. If it does not, the anchors are too soft and the fix is to rewrite the score 1 column until they bite.
The scorecard tells you which jobs to chase. Tracking whether the ones you win actually deliver the margin you bid is the other half, and it is the half that feeds the realized margin figures the matrix depends on. The Construction Budget Tracker carries budget against committed cost and actual cost by cost code, flags variance as it appears rather than at closeout, and gives you the realized gross margin per job that column B33 of this matrix needs. Score the bid with the matrix, then run the won job in the tracker, and next year's backtest is built from real numbers instead of memory.
Related template
Construction Budget Tracker
Track every line item, change order, and payment across your entire project. Spot a $23K billing discrepancy before it hits your bottom line — not after.
Get the Template — $49