← All posts

Collecting Subcontractor Quotes: How to Get Numbers You Can Actually Bid On

September 7, 2026

You send the same rough job description to three electricians and get back $4,200, $6,800, and $9,500. None of them are lying to you. They're pricing three different jobs, because "wire the addition" means something different to each of them, and you won't find out which assumptions they made until the lowest bidder shows up and asks why there's no panel upgrade in the number he gave you. Sub quotes that scatter that wide aren't a sign one sub is greedy and another is desperate — they're a sign the scope you sent out wasn't tight enough to price consistently, and now you're the one holding a number you can't actually bid on.

Send the same scope to everyone, not the same job title

The instinct is to call three plumbers, describe the job in a couple of sentences, and wait for numbers. That's how you end up with a $4,200/$6,800/$9,500 spread. What actually produces comparable quotes is sending every sub the same written scope — fixture count, rough-in vs. finish, who's supplying materials, access conditions, timeline — the same way you'd write a scope of work for a client. A sub who gets a vague ask fills the gaps with their own assumptions, and those assumptions are exactly what makes quotes impossible to compare later. Fifteen minutes writing the scope once saves you from three phone calls trying to figure out why the numbers don't line up.

What a usable sub quote actually needs to include

A number on a napkin isn't a quote you can build an estimate on. Before you accept one, it should specify:

  • Labor and material broken out separately, not one lump sum — you need to know if a $6,800 number is $2,000 labor and $4,800 material or the reverse, because that changes how it reacts if you swap a fixture or the client adds scope later.
  • What's explicitly excluded. Permit pulled by who, disposal of old fixtures, patching drywall after rough-in, painting after patching. The cheapest quote is often cheapest because it excludes the most, not because the sub is more efficient.
  • A start window and duration, not just a price — a sub who can't commit to when they're starting is a scheduling risk you're pricing at zero.
  • Proof of insurance and license number, current, not "I'll send it over." A sub without active liability coverage on your job site is a risk that becomes yours the moment something goes wrong, regardless of what their quote said.
  • How long the price is good for. Material costs move; a quote with no expiration is a quote that might not mean anything by the time you actually award the work.

If a quote is missing more than one of these, it's not ready to go into your bid — it's a starting point for a follow-up call.

Get three, not one, and don't skip the middle one

One quote tells you what one sub thinks the job is worth, which might be accurate or might be a guess. Three quotes on the same tight scope tell you where the real market is: throw out an outlier on either end and the two in the middle are usually close to the honest number. Resist the pull toward the lowest bid by default — a quote significantly under the other two is worth a direct conversation about what it excludes before you build your price around it, not a reason to celebrate.

Give subs real lead time to price it right. A sub asked to turn a quote around same-day is pricing fast, not carefully — they're padding for their own uncertainty or skimming the scope, and either way you're not getting their sharpest number. A week is reasonable for most residential trade scopes; complex or unfamiliar scopes deserve more.

Marking it up like a cost, not passing it through at face value

A subcontractor's quote is a direct cost to your job the same way lumber or drywall is — it goes through the same markup you'd apply to any other line item, not through at face value because "it's already someone else's price." Passing a $6,800 electrical quote straight through to the client with no markup means you're managing that sub — scheduling them, coordinating around their work, being the one the client calls if something's wrong — for free. If your standard markup is 15–20%, it applies to the sub line the same as it applies to a pallet of shingles.

Lock the number before it goes in your bid, not after

A sub quote you collected six weeks ago and a sub quote you're building today's estimate on are not the same thing, even if nobody's said the price changed. Material costs and sub availability both move faster than most residential bid cycles. If a job you quoted a client sits unsigned for a month, that's exactly the moment to circle back to your subs and confirm the number still holds — not after the client signs and the sub tells you their price went up 12% since you last talked. It's the same discipline as holding a validity window on your own client-facing estimates: a number that isn't locked isn't a number, it's a placeholder.

JobPencil lets you enter sub quotes as their own line items — separate from your labor and materials, with markup applied automatically — so a $6,800 electrical quote shows up correctly costed in the final estimate instead of getting folded into a generic "electrical" line you have to remember the math on later. Build one free in the browser, no account required.

Ready to build your estimate?
Free to use — no account needed until you save.
Start an estimate