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
- 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.
- 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.
- 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.
- Count declines, and count how many carried a reason. A decline with no reason is a missing field in your process, not an unknowable.
- 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.
- Write the 5 numbers for both packages next to each other. Nothing further should be decided until that table exists.
| Stage | Package A: 3 bids | Package B: 9 bids | What the difference says |
|---|---|---|---|
| Invited | 40 | 38 | List size was never the variable |
| Delivered | 31 | 36 | 9 invitations never arrived: a contact-data problem |
| Opened | 12 | 29 | Low opens after delivery is a sender and subject problem |
| Declined with a reason | 2 | 11 | No reason captured means no diagnosis available |
| Bid | 3 | 9 | Most of the gap was created before anyone read a drawing |
Five reasons the bid never came, ranked
| Cause | Who it hits | What the funnel shows | Where the fix sits |
|---|---|---|---|
| Stale contacts, wrong person | Firms you have not used in 2 years | Bounces, and opens far below the covering package | The contact record: a named estimator, not a general inbox |
| Package sized wrong for the pool | New bidders more than known ones | Declines cluster on capacity, bonding or geography | The package split, not the invitation list |
| Bid period against a busy market | Everyone equally | Short bid window; declines say too busy | More days, or a different week — ask before issuing |
| Terms and payment history | Firms who have worked for you before | Known bidders decline, new ones bid | Commercial: payment behaviour, retention, back-charges |
| No acknowledgement loop | Everyone, invisibly | Nobody declined and nobody bid | A required yes or no by a date, with a chase |
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.
- Pull the delivery report for the failed package and list every address that bounced, was blocked, or auto-replied.
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- Declines spread evenly, reasons citing workload, and a short window: it is timing. Reissue with a longer period or move the date.
- 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
The work behind this page
Builds from our portfolio that this page draws on.
GroundUp
A construction project-management command centre for general contractors that keeps schedule, RFIs, budget and the field log in one place — and maps the critical-path recovery the moment a job slips.
Real EstatePipelineIQ
An AI SDR platform that scores every lead for fit, runs multichannel sequences across email, LinkedIn and call, drafts the replies, and books the meeting.
Sales AIRead next
- A bid package is a scope boundary before it is a documentScope is rarely lost inside a package. It is lost at the line between two of them, where both bidders read the same detail and each assumed the other one had it.definition
- A bid tab is a normalisation exercise, not a price listThe columns of a bid tab are the easy part. What makes it a tab rather than a list is the rows underneath: the adjustments that put four bidders on one basis.definition
- The endorsement, not the certificate, is the thing that proves coverA file full of certificates proves you asked. It does not prove your company is an additional insured on anybody's policy, and the two are different claims.definition
- The insurance certificate expired three weeks before anyone noticedOne renewal date per subcontractor cannot represent four policies renewing on four dates against requirements that differ per job. That is the whole defect.diagnostic
- The scope sheet: what decides whether 2 bids compare at allEvery bidder answers the same numbered questions, before anyone prices anything. That is the whole mechanism, and the timing is the part that cannot be retrofitted.definition
- A takeoff condition is a measurement rule, not a highlighted areaThe coloured region on the sheet is the output of a condition, not the condition itself. The condition is the record that says what was measured, in what unit, with what adjustments, and where the number goes next.definition
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