Construction & Contracting// diagnostic

You invited forty subs and three of them bid

In short

Before adding names to the list, build the funnel for one package: invited, delivered, opened, declined with a reason, bid — split by whether the firm has bid to you before. Three bids from 40 is a reach problem, a reputation problem or a package problem, and the shape of the drop says which. Widening the list fixes one of them.

Key takeaways

  • Count the funnel per package first: invited, delivered, opened, declined, bid. Then change something.
  • Split by prior bidders. Firms who know you and firms who do not drop out for opposite reasons.
  • A decline with no reason recorded is a missing field, not a mystery. Make the reason mandatory.
  • Healthy delivery and opens mean the invitation arrived and the package is what put them off.
  • Widening the list is the fix for 1 of the 5 causes, and rarely the one you actually have.

Three bids from 40 invitations is a measurement, not a verdict, and the number that matters is not 40. Build the funnel for that one package — invited, delivered, opened, declined with a reason, bid — and split it by whether the firm has bid to you before. The shape of the drop names the cause, and the causes have completely different fixes.

The reflex is to widen the list, and that is the right move in 1 of the 5 cases below. In the other 4 it makes things worse: more invitations into a pool that already decided, more levelling work on whatever does arrive, and a further fall in the pool's belief that your invitations are worth opening.

Build the funnel for one package before you touch the list

  1. Pick one package that under-covered, recent enough that people still remember it, and one on the same job that covered well. The comparison is what makes any of these numbers mean anything.
  2. Count invited, then count delivered. Bounces, blocked domains and dead addresses come out at this step, and they are usually the largest single loss nobody had measured.
  3. Count opens or portal logins. Treat the figure as directional rather than exact — image blocking and mail scanners distort it both ways — but a 12 against a 29 on the same day is still a signal.
  4. Count declines, and count how many carried a reason. A decline with no reason is a missing field in your process, not an unknowable.
  5. Count bids received, and separately count bids from firms who had bid to you before. Two packages with identical totals and opposite splits are 2 different problems.
  6. Write the 5 numbers for both packages next to each other. Nothing further should be decided until that table exists.
StagePackage A: 3 bidsPackage B: 9 bidsWhat the difference says
Invited4038List size was never the variable
Delivered31369 invitations never arrived: a contact-data problem
Opened1229Low opens after delivery is a sender and subject problem
Declined with a reason211No reason captured means no diagnosis available
Bid39Most of the gap was created before anyone read a drawing
The same invitation list, read two ways. Figures illustrative.

Five reasons the bid never came, ranked

CauseWho it hitsWhat the funnel showsWhere the fix sits
Stale contacts, wrong personFirms you have not used in 2 yearsBounces, and opens far below the covering packageThe contact record: a named estimator, not a general inbox
Package sized wrong for the poolNew bidders more than known onesDeclines cluster on capacity, bonding or geographyThe package split, not the invitation list
Bid period against a busy marketEveryone equallyShort bid window; declines say too busyMore days, or a different week — ask before issuing
Terms and payment historyFirms who have worked for you beforeKnown bidders decline, new ones bidCommercial: payment behaviour, retention, back-charges
No acknowledgement loopEveryone, invisiblyNobody declined and nobody bidA required yes or no by a date, with a chase
Ranked by how often each is the real cause on a package that under-covered

The invitations that never arrived

Estimators move firms every 2 or 3 years and nobody tells you. An invitation sent to a general office address competes with everything else in that inbox, and one sent to a person who left in March is delivered, unopened and counted as a decline you never received.

  1. Pull the delivery report for the failed package and list every address that bounced, was blocked, or auto-replied.
  2. Ring 10 firms that did not open. Ask 2 questions only: did this reach you, and who should it go to. The call takes 4 minutes and repairs the record permanently.
  3. Store contacts at person level with a role and a verification date, not at company level. A company record with 1 email address is the defect.
  4. Ask for the contact once, in a place people already fill in — which is one of the few questions genuinely worth its space on a form, and the argument for keeping the rest of it short is designing a prequal form subs will actually finish.
  5. Re-verify contacts on a fixed cycle for anyone you have not invited in 18 months, because the decay is continuous and only shows up when you need them.

A package your pool cannot bid

Too large is the obvious version: the number exceeds what a firm can bond or cash-flow, and rather than say so they go quiet. Too small is just as common — a package that cannot carry its own mobilisation is not worth 2 days of estimating to win. And a package combining 2 trades nobody self-performs invites everyone to broker half of it, which they will decline or price defensively.

The tell is in who declined: new bidders drop out on size and terms, known bidders drop out on the job. If the split points at size, the fix is upstream in the boundary rather than in the list, which is how a bid package boundary is drawn.

Timing, and the market you are bidding into

A bid period is not a duration you choose in isolation. The bidder has to get their own quotes back from suppliers and second-tier trades before they can price, so a 7-day window on a package with 3 major material quotes in it is a window in which nobody can produce a real number. Some will bid it anyway, with contingency, and the tab you level will be wider and less informative for it.

Two cheap habits fix most of this. Ask 3 regular bidders what they need for this specific package before you set the date, and check what else is out to the same trades in your market that week. A package landing against 2 larger jobs will lose the pool's attention regardless of how good your documents are.

What your terms say before anybody calls

This is the cause contractors least want to be true, and the only one your funnel cannot prove on its own. The evidence is in who declines: when firms who have worked for you decline and firms who have not are the ones bidding, the pool is pricing its experience of being paid, of back-charges, and of how the last award was decided.

A pool that expects to be squeezed after award bids high, hedges with exclusions, or does not bid at all — and the exclusions are what turn up later as the reason the lowest number is low because something is missing. None of that is fixed with a better invitation email. It is fixed by paying on time and by awarding the way you said you would, then giving it 2 or 3 packages to be noticed.

The acknowledgement loop almost nobody builds

Most invitation processes have no closed loop at all. You send, and then you wait, and silence is indistinguishable between never arrived, not interested, and intending to bid but running late. Requiring an intent-to-bid response by a fixed date — 5 working days after issue, ahead of the deadline — converts silence into data.

  • Ask 1 question: bidding, not bidding, or undecided. Anything longer gets ignored.
  • Make the decline reason a short fixed list — capacity, size, geography, terms, schedule, wrong trade — with an optional free-text box. Fixed lists are what make the funnel countable next quarter.
  • Chase the undecideds and the silent once, by phone, 2 days later. The call also tells you whether the documents were even legible to them.
  • Publish coverage internally per package, not per job. A job at 6 bids on average can still have 1 package at 2 bids, and the average is what hides it.
  • If you build this rather than buying it, do it on 1 job first and keep the spreadsheet running alongside — the staging argument in running the first build on one job before the rest.

Silence from a bidder is not information. It is the absence of a question you never asked them to answer.

Which of the five you actually have

  1. Delivery below 90 percent, or opens far under the comparison package: it is contact data. Fix the records before anything else, because every other change is invisible until invitations arrive.
  2. Delivery and opens healthy, declines concentrated among firms new to you: it is the package. Look at size, bonding and whether 2 trades are stapled together.
  3. Delivery and opens healthy, declines concentrated among firms who know you: it is terms and history. That is a commercial conversation, not a preconstruction one.
  4. Declines spread evenly, reasons citing workload, and a short window: it is timing. Reissue with a longer period or move the date.
  5. Almost no declines and almost no bids: there is no acknowledgement loop, and you do not yet know which of the 4 above you have. Build the loop and re-measure on the next package.

The tooling is modest: contacts at person level, an invitation record with delivery and open state, a required response with a reason from a fixed list, and a coverage view per package. That is a small internal product rather than a platform migration, and the shape of scope we take on as MVP and product builds. This page sits in bidding, prequalification and subcontractor management, part of our construction and contracting work.

Frequently asked questions

Short answers to the follow-ups this page tends to raise.

Why are subcontractors not responding to our invitations to bid?

Most often because the invitation did not reach the right person, not because they read it and declined. Check delivery and open rates against a package on the same job that covered well before assuming anything about price or reputation. After contact data, the ranked causes are a package sized wrong for the pool, a bid period colliding with a busy market, your commercial terms and payment history, and having no acknowledgement loop that turns silence into a recorded answer.

How many bids should a package get?

Three to 5 genuinely comparable bids is coverage for most packages, and a sixth mostly adds levelling work. What matters more than the count is whether the bids are comparable: 5 bids on 5 different readings of the scope is worse than 3 on a common basis. A package that draws only 2 usable bids should be re-bid or negotiated rather than levelled into a decision.

Does inviting more subcontractors get more bids?

Only when the cause is genuinely reach — a pool too small or too narrow for the work. If firms are receiving and opening invitations and choosing not to bid, more invitations produce more non-responses and dilute the pool's belief that your invitations are worth reading. Diagnose with the funnel first, because 4 of the 5 common causes get worse when the list gets longer.

How long should a bid period be?

Long enough for the bidder to get their own quotes back, which depends on the package rather than on a standard number of days. A package resting on 3 major material quotes needs materially longer than one a firm can price from its own labour rates. Ask 3 of your regular bidders what they need for this specific package before setting the date, and check what else is out to the same trades that week.

  • bidding
  • subcontractors
  • coverage
  • preconstruction
// shipped work

The work behind this page

Builds from our portfolio that this page draws on.

Working on something in this space?

Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.

Start the conversation