All articles

Custom CRM

How to Collect Bids From Subcontractors: 7 Steps

Seven steps to collect subcontractor bids you can actually compare, plus the point where carrying a sub's number legally commits you to award them the work.

19 min read
Photo: Anna Zakharova / Unsplash

The short answer

Collecting subcontractor bids is three jobs: getting a response, getting every bid priced against the same scope, and knowing when carrying a number legally commits you. Invite five to eight subs per trade to land three usable bids, send a yes or no scope sheet two days before the deadline, and log every bid against that sheet.

What is actually hard about collecting bids from subcontractors?

Getting a price is easy. Getting three prices that describe the same work is the hard part, and it is where small general contractors lose the most money.

There are three separate failures hiding inside this one search. The first is coverage: you send eight invitations for a trade and get one number back, so you have no competition and no backup. The second is comparability: you get three numbers back and they are priced against three different scopes, so the low bid is low because it excluded something. The third is commitment: you carry somebody's number in your own bid and then, depending on where you are and how formal your process was, you may no longer be free to use somebody else.

Here is the tell that most published advice does not solve any of this. Search this exact phrase and the first page fills with guides written for the other side of the table, explaining how subcontractors win bids from GCs, plus public procurement primers about sealed bidding and bid tabulation. That is a different job from yours. If you run a small building or remodeling company, you are the buyer, you have no precon department, and you are doing all seven steps below yourself between site visits.

By the numbers

In the BuiltWorlds Annual Preconstruction Benchmarking Report, 71.5 percent of surveyed contractors reported regular use of bid management platforms, and 81 percent of those users said the primary use was improving bid comparisons and leveling. The software is bought to compare bids, not to send them. Sending was never the bottleneck.

How many subcontractors should I invite per trade?

Invite five to eight per trade to end up with three usable bids. The gap between those numbers is the entire problem: invitation count is a vanity metric and coverage is the real one.

The industry planning assumption is that 30 to 50 percent of bid invitations never turn into a proposal. On a trade where you invite four and two decline, you are down to a two-horse race with no fallback if the winner withdraws. On high-value trades where a coverage gap does the most damage, mechanical, electrical, structural, envelope, push the invite count to six or ten.

Trade profileInviteExpectWhy
Common trades with a deep local bench (drywall, paint, flooring)5 to 63 to 4Response rates hold up, competition is real
High value trades (mechanical, electrical, structural)6 to 103 to 5A gap here moves your whole number
Specialty scopes (elevator, fire suppression, process piping)Every qualified firm in the market1 to 3There are only so many, and they know it
Out of market projects8 plus2 to 4Thin bench, travel, unfamiliar GC

The other half of coverage is timing. An estimator posting in r/estimators described being a week and a half out from a bid with thin coverage, calling every sub in one division, and getting voicemail from the two firms she actually needed. If you discover a coverage hole at that point, your options are bad ones. A bid log that shows intent-to-bid status by trade from day three is what turns that into a week-two problem instead of a bid-day problem.

Why do subcontractors ignore my bid requests?

Because they receive vastly more invitations than they can price, and the ones they open come from people they already know. This is not a mystery and the subs themselves have documented it repeatedly.

One electrical-side estimator in an r/estimators thread on this exact question reported 738 requests sitting in a single ConstructConnect inbox, most of them blasted out by GCs who selected all trades rather than the trades they needed. Another commenter in the same thread was blunt about the triage rule: if it is not someone he knows sending it, he deletes it without clicking anything. A third pointed out that responding is also punished, because marking "not bidding" on some platforms still generates addenda notifications for weeks.

So the friction to remove is specific, and none of it is about buying a better platform:

  1. Name the trade in the subject line. Not the project. The trade. A scope-specific invite survives triage that a general one does not.
  2. Attach or directly link the documents. Several subs in that thread said the same thing in different words: do not make them register for an account to see whether the job is worth pricing. A shared folder link in a plain email beats a portal invite for a sub who is not already on that portal.
  3. Answer the questions they will have to ask anyway. One electrical estimator listed his standard unknowns: is it new work, fit out or renovation, open shop or union, what is the start and completion date, is there phasing, and who is carrying excavation, saw cutting, core drilling, housekeeping pads, fire alarm and low voltage. Every one of those answered up front is a reason not to delete your email.
  4. Call a person before the deadline. The single most repeated piece of advice from subs was that a phone call converts, and a platform notification does not. One commenter described the sequence as calling to find out who actually estimates that trade, telling them what you know about the job, and asking if they are interested rather than implying they owe you a number.

Tip

Ask for intent to bid, not just a bid. A yes, no or maybe answer three days after you send the package is worth more than the proposal itself at that stage, because it is the only thing that tells you where your coverage holes are while there is still time to fill them.

What goes in a bid request so the bids come back comparable?

A bid package that produces comparable bids has five parts, and the one everybody skips is the one that does the work: a scope sheet the sub answers yes or no to, line by line.

The standard package is the cover email with project name, location, trade, deadline, submission method, your direct number and any site walk details; the relevant drawings rather than the entire set; the relevant specification sections plus the general requirements; your subcontract form if you use one; and a bid form. That is table stakes and every guide lists it.

The scope sheet is the part that separates a GC who spends bid day comparing numbers from one who spends the following week on the phone. A commercial electrical estimator described his version in an r/estimators thread: he builds the scope sheet as he reviews the drawings, sends it in Excel two days before proposals are due, and asks each bidder to answer yes or no to every item. That pre-levels the bids so that on bid day he is targeting the differences rather than discovering them.

The alternative is what a drywall sub in the same thread described from his side. Absent a scope of work from the GC, he bids strictly to the specification sections, everything in them is included, and anything he chooses to exclude is listed as an exclusion. That is entirely reasonable behavior. It also means your three bids are three different scopes, assembled independently, and you own the reconciliation.

The cost of skipping it is not theoretical. The GC estimator who started that thread described inheriting a job where nobody had written scope sheets or leveled anything, and the operations team spent months after handover filling scope gaps, which killed the schedule.

Keep the sheet short and aimed at the expensive ambiguities:

  • A general block of yes or no confirmations: drawing set date, addenda acknowledged, prevailing wage, tax treatment, bid validity period.
  • Ten to twenty scope lines written at the level of "include the paint colors called out on sheet A6.1," not twenty lines of individual finishes.
  • The interface items, which is where money actually leaks: who cuts, who patches, who digs, who hauls, who provides the dumpster, who does temporary power and protection, who pulls and pays for which permit.
  • Alternates and value engineering options priced separately at the bottom.

How do I compare subcontractor bids that all include different things?

You level them. Bid leveling means adjusting every bid to the same scope before you look at price, by adding back what a sub excluded and stripping out what a sub included that nobody else did. Only the adjusted column is comparable.

Build it as a table with one row per scope item and one column per bidder. Work through it in this order.

StepWhat you are looking forTypical adjustment
1. Base numbersThe raw bid as submittedNone yet
2. ExclusionsItems in your scope sheet answered noAdd your own carry or another sub's price for that item
3. InclusionsItems one sub covered that others did notStrip it out, or add it to everyone
4. Qualifications and conditions"Subject to review of final drawings," allowances, unit price caveatsPrice the risk or send it back for a firm number
5. AddendaWhich addenda each bidder acknowledgedAn unacknowledged addendum makes the bid stale, not cheap
6. Schedule and manpowerCrew size, start availability, durationA cheap sub who cannot start for six weeks is not cheap
7. Adjusted totalThe only number worth comparingThis is the one you carry

Two practical notes from people who do this daily. First, do your own takeoff before the bids arrive. A GC in an r/Construction thread put it plainly: they produce an internal estimate first specifically so they can spot obvious errors in sub numbers and call the sub to confirm full scope. Without your own number, you have no way to know whether the whole market is high or one bidder is low. Second, keep the sheet proportionate. An estimator described moving from a shop that did quick phone confirmations to one that expected every note in a two hundred page spec transcribed into tabs, and the exhaustive version buried the big risks under the small ones.

If leveling keeps surprising you after award, the problem may be upstream in how you price the job rather than how you collect the bids. We walk through that failure in what to do if you underbid a job, and the downstream half of it in how to handle change orders without losing money.

Can I just take the lowest bid?

You can, but check whether it is low for a reason first, because a sub who is upside down on your job becomes your schedule problem within weeks.

This came up in a January 2026 r/Construction thread asking GCs whether they care if their subs make money. The answers were consistent in a way that is worth reading as risk management rather than sentiment. One GC said that if a sub gives a number he thinks is far too low, he tells them. Another said the lowest number does not automatically win and that a number low enough to be implausible effectively disqualifies itself, so he tells the sub to raise it without saying by how much. A third pointed out the obvious consequence: a sub who realizes mid-job that he is badly underwater is still legally obligated, but that does not stop the walk-off, and the GC is the one holding the schedule.

The counterweight was stated just as plainly by another commenter. If the low sub gave that same number to every GC bidding the job, refusing to carry it can cost you the entire project, because a five figure difference on one trade is enough to lose a general bid. That tension is real and there is no clean rule. What you can do is verify the scope before you carry the number, so that if you do carry a thin bid you are at least carrying a complete one.

Watch out

The pattern experienced GCs describe is the change order spiral: a sub bids low to win, then rebuilds margin through change orders, and you either pass them to the owner or absorb them. Verifying scope on the low bid before bid day is the only cheap point in that cycle.

When does carrying a subcontractor's bid legally commit me to using them?

This is the question nobody ranking for this search answers, and it is the one that can cost you a judgment. The short answer is that it depends on how structured your bidding process was and on whether you are on public or private work.

In Canada, the line is Contract A. Under the framework from The Queen v Ron Engineering, a tender call creates a bidding contract, Contract A, separate from the construction contract, Contract B. In Naylor Group Inc v Ellis-Don Construction Ltd, the Supreme Court of Canada extended that reasoning down to the subcontractor level: where a general contractor carries a subcontractor's bid through a formal bid depository, a Contract A is formed and the prime contractor must award the subcontract to the named firm unless it has a reasonable objection. Ellis-Don had carried Naylor's electrical price, then tried to condition the subcontract on Naylor affiliating with the IBEW after a labour board ruling, and ultimately gave the work to an IBEW contractor at roughly the same price. The Court found the objection was not reasonable and Ellis-Don was liable.

But Contract A does not arise automatically. In 1114136 Ontario Inc v Feltz Design Build Inc, 2026 ONSC 1512, a masonry subcontractor submitted an unsolicited bid of about $769,000 shortly before the subtrade deadline. Feltz reviewed it against a competing bid of about $758,000 with narrower exclusions, chose the lower one, and then typed the wrong company name onto the tender form in the rush to submit. Months later the named sub discovered this and sued for roughly $128,000 in lost profit. The Ontario Superior Court dismissed the action. Feltz had not issued a tender call to masonry subs, had not set tender terms, had not used a bid depository and had no structured tendering framework, so there was no offer capable of acceptance and no Contract A. The court added that the bid was conditional on review of final working drawings and carried numerous exclusions, which made it materially non-compliant and therefore a counteroffer rather than an acceptance.

Read those two cases together and the practical rule is uncomfortable but useful. The more formal and structured your bid solicitation, the more comparable and defensible the bids you receive, and the more you are bound by the process you created. The looser it is, the more flexibility you keep, and the less protection either side has.

On California public works, the statute removes the ambiguity entirely. Public Contract Code section 4104 requires a prime bidder to set forth the name, place of business, California contractor license number and public works registration number of every subcontractor performing work worth more than one half of one percent of the prime's total bid, and only one sub may be listed per portion of work. Section 4107 then makes substitution of a listed sub unlawful without the awarding authority's consent, available only on nine enumerated grounds including the sub's refusal to execute a written contract at the bid price, insolvency, loss of licence, or an inadvertent clerical error in the listing. The listed sub gets written notice by registered mail and five working days to object, and an objection triggers a hearing. Section 4107 also bars subcontracting any portion over that same one half of one percent threshold that you did not designate in the original bid.

Note

If you build private residential and light commercial work with no bid depository and no public listing statute, none of the above binds you today. It is still worth understanding, because it explains why experienced subs treat a GC who shops their number as a permanent disqualification. The legal exposure is jurisdictional. The reputational exposure is universal, and your bid list is an asset, as one GC in that r/Construction thread said outright.

Where should the bid log actually live?

In whatever system already holds the job. The bid log is a table with a clock attached, and the failure mode is never the table, it is that nobody looks at it on the right day.

OptionHandles wellBreaks onHonest fit
Email inboxNothing, but it is where bids arriveCoverage visibility, addenda tracking, anything with a dateOne job at a time, and only if you are lucky
SpreadsheetBid log, scope sheet, leveling math, zero costReminders, multi-user edits, connecting bids to the awarded jobMost small GCs, and it is a genuinely fine answer
Bid management platformDistribution, open and view tracking, coverage dashboardsCost, and subs who are not already on that platformCommercial GCs bidding hard-bid work weekly
CRM or job system you already runBid log plus the award, the subcontract, the insurance certificate and the payments as one recordNothing, if the record is built around your processBuilders whose bids and jobs keep getting re-entered

The upgrade trigger is not volume, it is re-entry. If the sub you invited, the bid you leveled, the subcontract you awarded, the certificate you chased and the invoice you paid live in five different places under five slightly different spellings of the company name, you are paying for that gap every week in chased documents and lost history. We break down which of those jobs a tool genuinely covers in subcontractor management software for small builders, and the compliance half in how to track subcontractor insurance certificates.

If your bid log, your subcontracts and your job costs are in three different files, we build the custom CRM that makes them one record: invite, intent, bid, leveled number, award, certificate, payment, all against the same job and the same sub.

Book a free CRM demo

The seven step process, end to end

  1. Split the job into trade packages before you contact anyone. One package per scope, with the drawings and specification sections that trade needs. Do not send the full set to everyone.
  2. Build the invite list from your bench and size it for non-response. Five to eight per trade, more on high value and out-of-market scopes. Record who you invited and when, because that list is your coverage baseline.
  3. Send a package a sub can act on in sixty seconds. Trade in the subject line, documents attached or directly linked, deadline, your mobile number, plus the answers to the questions they would otherwise have to ask: project type, union status, start and completion dates, phasing, and who carries the interface items.
  4. Ask for intent to bid within three days, and chase it by phone. Yes, no or maybe. This is the only early signal of a coverage hole.
  5. Issue the scope sheet two days before the deadline. One page, yes or no per line, interface items included. This is the step that makes bid day arithmetic instead of archaeology.
  6. Level before you look at price. Adjust for exclusions, inclusions, qualifications, addenda and schedule, then compare adjusted totals only. Call any outlier, low or high, before you carry it.
  7. Log the award and what you carried. Which number went into your bid, which sub it belonged to, what scope it covered and what the leveling adjustments were. That record is what protects you at buyout, and it is what makes your estimate against actuals comparison mean anything later, which we cover in how to compare estimated vs actual job costs.

What to fix first

If you only change one thing this month, make it the scope sheet. It is a single page, it costs you an hour per trade package, and it converts the most expensive part of this process, reconciling three incompatible proposals under deadline, into a column of yes and no answers you can scan.

If you change a second thing, make it intent tracking. Knowing on day three that you have one maybe in mechanical is a week-two problem you can still solve. Discovering it on bid day is not a problem, it is a number you are going to have to guess at.

Everything else on this page, the invite counts, the leveling table, the case law, is downstream of those two habits. The GCs who do them are the ones comparing prices on bid day. The ones who skip them are still finding out what the prices were for.

Frequently asked questions

How many subcontractor bids should I get per trade?
Three usable bids per trade is the working floor. To land three you generally have to invite five to eight, because 30 to 50 percent of invitations never turn into a proposal. For specialty scopes with few qualified firms in your market, invite every one of them and accept that you may end up with two.
Why won't subcontractors respond to my bid invitations?
Because they get far more invitations than they can price, and yours looks like the rest. Estimators in r/estimators describe inboxes with hundreds of unopened platform invites, most of them blasted to every trade. The fixes that work are narrow: name the trade, attach the documents directly, give a real start date, and call a human before the deadline.
What is bid leveling?
Bid leveling is adjusting each bid so they all describe the same scope before you compare prices. You add back what one sub excluded, strip out what another included that nobody else did, and only then look at the numbers. Without it you are comparing three different jobs that happen to be for the same building.
Is bid shopping illegal?
It depends on where and what you are building. On California public works, Public Contract Code section 4104 forces you to name every sub worth more than one half of one percent of your total bid, and section 4107 then blocks substitution except on nine listed grounds with the awarding authority's consent. On private work in most of North America it is legal but reputationally expensive.
Do I have to use the subcontractor whose price I carried in my bid?
Sometimes, and the answer turns on how structured your bidding process was. In Naylor Group Inc v Ellis-Don Construction Ltd the Supreme Court of Canada held that a general contractor who carried a sub's bid through a formal bid depository had to award that sub the work unless it had a reasonable objection. A loose email-based process usually does not create that obligation.
How much time should I give subs to bid?
Two to three weeks is the practical minimum for most commercial trade scopes, and three to four weeks for full mechanical, electrical or envelope packages. On small residential jobs where the sub already knows the scope, a few days is normal. What matters more than the window is that the scope does not change inside it.
Should I send a scope sheet with the bid request?
Yes, if you ever want to compare the bids without a week of phone calls. A one-page yes or no checklist of inclusions sent two days before the deadline pre-levels most of the differences. Without one, subs bid to the specification and exclude whatever they choose, which is their right and your problem.
What should I do if one bid comes in far below the others?
Call the sub and tell them. A low outlier almost always means missed scope, and missed scope becomes a change order or a walk-off later. Experienced GCs on r/Construction describe telling a sub their number looks too low without saying by how much, then asking them to confirm the scope line by line.
Bespoke pipelines, automations, 360° customer records and real-time reporting, a CRM built around how your team actually works, connected to your entire stack.
Book a free CRM demo