Why contractor quotes differ so much

When three bids come back 30% apart, the instinct is to assume somebody is padding. The arithmetic says otherwise. Our engines apply 18% to 30% for overhead and profit, so moving modelled markup across that whole range shifts a total only about 10%. Most of a real gap is scope — and scope is the part you can actually verify.

By Martin Lashgari, Ph.D., P.E., PMP · Last reviewed July 2026

Scope note: this is an analysis of the ProjectCostPro cost engines — the same code the 52 calculators run — not a survey of contractors or a dataset of observed bids. Where a figure describes our model rather than the market, it says so.

The five causes, ranked

Each of these is measurable in the cost engines behind the 52 calculators on this site. Ranked by how far each one can actually move a total, largest first.

#CauseHow far it can move the total
1Scope — what is and is not in the price32% on the worked example below
2Material choice2.2x–4.2x on the installed total (cheapest to dearest option)
3Local labor rates2.00x across 184 ZIP zones
4The size or quantity takeoff1.84x per unit at a quarter of the footprint
5Contractor markup~10% between the widest honest bidders

The ordering is the point. Markup is the thing homeowners argue about and it is the smallest lever on the list. Scope is the thing nobody asks about and it is the largest.

A worked example on a real slab

Here is the full line-item breakdown our engine produces for a typical 400 square foot garage slab, 4 inches thick, 3,500 PSI, broom finish, mesh reinforcement, easy access. Total $6,681 at the midpoint of a $5,090–$8,271 planning range.

Line itemAmountShareCould a bid omit it?
Ready-mix concrete delivered (3,500 PSI)$1,60424.0%No — it is the job
Placement & smooth finishing$69410.4%No
Gravel base (4 in compacted)$6449.6%Yes
Equipment and tool allowance$5167.7%Sometimes bundled
#4 rebar grid (16 in O.C.)$4807.2%Yes
Site prep (easy)$3986.0%Yes
Garage permit allowance$3254.9%Yes — often “owner to pull”
Forms and bracing$2543.8%Rarely
Mobilization / minimum charge$2003.0%Usually absorbed
Saw-cut control joints$1271.9%Yes
Curing compound$801.2%Yes
6-mil vapor barrier$711.1%Yes

The seven lines marked as genuinely omittable — gravel base, rebar, site prep, permit, control joints, curing compound, vapor barrier — total $2,125. That is 31.8% of the price.

A contractor who leaves all seven out can quote about $4,550 for what looks like the same slab. Nothing in that bid is a lie. It is simply a different, thinner job: unreinforced concrete poured on unprepared subgrade with no vapor barrier and no control joints, which is a slab that will crack early and unevenly. Meanwhile the entire markup band on this project spans just 3.2%. Scope is worth ten times the argument markup is worth.

1. Scope

Our estimates average 9.4 line items. A quote with three lines is not simpler — it is either bundling, or excluding. Both are legitimate ways to write a bid, and neither is comparable to a bid written the other way until you unpack it.

The categories that most often go missing, in rough order of how much money they represent: subgrade and base preparation; removal, tear-off, and disposal of what is already there; permits and inspection; reinforcement; and the finishing details that determine service life rather than appearance — control joints, vapor barriers, flashing, sealants, curing.

That last group is where an inexperienced buyer loses most. Those lines are individually small and collectively decisive. They are also invisible on the day the job finishes and expensive three winters later.

2. Material choice

Our engines mostly model material by pricing the actual named product rather than by applying an abstract grade multiplier — a water heater is priced as a 50-gallon gas tank or a heat pump or a solar system, not as “mid grade.” So the honest way to size this driver is to hold a project’s dimensions fixed and swap the material option through the engine. On the six calculators offering three or more discrete material or system options, the installed total ran 2.2x to 4.2x from cheapest choice to dearest, median 3.6x:

CalculatorOptionsCheapest choiceDearest choiceSpread
Window replacement10Vinyl slider — $7,792Bay / bow — $32,3944.16x
Water heater13Electric tank 40 gal — $4,178Solar system — $15,0783.61x
Siding11Vinyl — $31,279Natural stone — $111,8733.58x
Flooring11Polyester carpet — $1,870Premium solid — $5,1602.76x
Countertops11Laminate — $4,864Stainless — $11,0312.27x
Insulation9Radiant barrier — $2,825Closed-cell foam — $6,1822.19x

Two calculators — carpet and tile — additionally apply an explicit budget/mid/premium multiplier on top of the chosen material, at 0.65/1.00/1.55 and 0.60/1.00/1.55 respectively. Those two are the exception, not the pattern, and the figures above are the ones that generalise.

Two bidders quoting different grades are not quoting the same project, and grade is rarely stated plainly. “Architectural shingles” and “30-year shingles” and “premium laminate” are marketing terms, not specifications. Ask for the manufacturer and the product line, then compare those.

One caution against over-reading this: material is only one line in an installed job. Labor, equipment, permits, and removal do not change when you switch product. Across all 52 engines, material is the single widest cost driver in only 5 projects — the full ranking is in what drives project costs.

3. Local labor rates

Across the 184 ZIP zones we price against, the multipliers behave very differently by category:

CategoryRangeSpreadWhy
Labor0.80 – 1.602.00xTrade labor is a local market
Material0.95 – 1.151.21xLumber and fixtures trade nationally
Equipment1.00 – 1.051.05xRental fleets price nationally

Manhattan and San Jose sit at the 1.60 ceiling. El Paso, Flagstaff, and Santa Fe sit at the 0.80 floor, with Wyoming and West Virginia at 0.85. So a labor-heavy job genuinely costs twice as much in one place as another, while the materials cost within about 20% of the same.

This matters when you compare your quote to a figure you read online. National averages are labor-weighted to nowhere in particular. If you are in a high-cost metro, a quote 40% above a national average may be exactly right.

4. The takeoff

Two contractors measuring the same project can arrive at different quantities — different assumptions about what area is included, different waste factors, different treatment of cuts and edges. That flows straight through to the total.

There is a second-order effect worth knowing: because fixed costs do not scale down, the per-unit price is not constant. Cut a footprint to a quarter with the specification unchanged and the installed price per square foot rises about 1.84x. So a bidder who has measured a smaller area than the other is not just quoting less work; the arithmetic behind their per-unit figure is different too. That effect is worked out in detail in why small jobs cost more per square foot.

5. Markup, the smallest one in this model

This is the one place where the ranking is a statement about our model rather than about contractors, so it is worth stating precisely. ProjectCostPro applies 18% to 30% for overhead and profit on installed work, in only five distinct bands across the 52 engines. Moving our modelled markup from the bottom of that range to the top changes the markup-bearing subtotal by roughly 10%; within a single trade the band is tighter still — the slab example above spans 3.2%.

What that does not establish is that a real bidder outside 18–30% is being dishonest. Actual bid differences also reflect labor productivity, schedule and sequencing, risk appetite, material availability, how a firm accounts for overhead, and margin — none of which our engines model. A quote 40% above another may be a fuller scope, a costlier labor market, a firm carrying real insurance and warranty reserves, or simply a company that does not want the job. The reason to compare line items rather than totals is that scope is the part you can actually verify.

It is also worth being clear about what the band pays for, because “markup” reads as “profit” and it is not. It covers general liability and workers’ compensation insurance, vehicles and fuel, supervision and site visits, office and estimating time, warranty exposure, and then margin. A contractor carrying proper insurance and pulling permits cannot operate at the bottom of that band indefinitely.

We do not apply markup to permits, flat fees, or subcontracted lines that already carry a subcontractor’s own margin. Marking up a pass-through would count the same margin twice, which is one of the specific things worth checking on a real bid.

How to normalize two quotes

  • Put both bids in two columns, line for line. Not totals. The gaps are the answer, and they only appear when the lines are aligned.
  • For every line one bid has and the other lacks, ask directly. “Is the gravel base excluded, or just not itemized?” The answer tells you whether you are looking at a saving or an omission.
  • Confirm grade by manufacturer and product line, not by adjective.
  • Confirm the measured quantity. If the two takeoffs differ by more than a few percent, one of them measured something you did not intend.
  • Check who pulls the permit. “Owner to pull permit” moves a real cost and a real liability onto you.
  • Only then compare the residual. Once scope, grade, and quantity match, what is left is labor rate and markup — and that gap should be modest. If it is still large, ask why.
  • Check the total against a planning range for your dimensions and ZIP. The bid checklist covers the contract terms to look at alongside the price, and every calculator here has a bid-check tool that tells you whether a quote sits inside the expected band for that scope.

Frequently asked questions

Why are my contractor quotes so different from each other?

Almost always scope. Ranking the five causes by how far each moves a total in our engines: scope inclusions come first, then material choice (2.2x to 4.2x on the installed total between the cheapest and dearest option), then local labor rates (a 2.0x spread across the 184 ZIP zones), then the size takeoff, and last our modelled markup, where moving from 18% to 30% shifts the markup-bearing subtotal by roughly 10%. That ranking describes the ProjectCostPro model, not a survey of contractors: real bids also vary on labor productivity, schedule, risk, material availability, and overhead accounting. Scope is simply the part you can verify line by line.

How much of a contractor quote is profit?

Our engines apply 18% to 30% for overhead and profit on installed work, and that band is not all profit. It covers general liability and workers’ compensation insurance, vehicles and fuel, supervision, office and estimating time, warranty exposure, and only then margin. It is applied to material, unit labor, and equipment rental, but not to permits, flat fees, or subcontracted lines that already carry a subcontractor’s own markup, because marking up a pass-through would double-count it.

Should I take the lowest bid?

Not before you find out why it is lowest. A low bid that omits the gravel base, the vapor barrier, or the permit is not cheaper — it is a smaller job that will either be change-ordered back up or fail early. On our worked slab example those omissions total 32% of the price. Put the bids side by side line for line, and treat any line present on one bid and absent from another as an open question rather than a saving.

Does a higher quote mean better work?

No. Price separates scope, grade, and local labor cost far more than it separates workmanship. A higher number can mean a fuller scope, a better material grade, or simply a more expensive labor market — all legitimate — or it can mean padding. The only way to tell is to compare the itemized lines. Judge workmanship on licensing, insurance, references, and past work, not on the size of the number.

How do I compare two contractor quotes fairly?

Normalize them before you compare totals. Write out every line from both bids in one column each, then fill the gaps: for each line one bid has and the other does not, ask whether it is genuinely excluded or simply unstated. Confirm both are quoting the same material grade and the same measured quantity. Only once both cover identical scope does the remaining difference reflect labor rate and markup — and that residual is usually small.

Sources and assumptions

Every figure on this page is computed from the ProjectCostPro cost engines — the same code the 52 calculators run in your browser. The slab breakdown is the unmodified typical scenario from the concrete-slab engine; multipliers, grade factors, and markup bands are read directly from the published data files. Which lines a real contractor omits varies by trade and jurisdiction; the “could a bid omit it” column reflects common practice, not a rule. Planning ranges, not contractor quotes; we don’t replace your contractor, your permit, or your local inspector.

Martin Lashgari, Ph.D., P.E., PMP

Licensed structural engineer · founder of ProjectCostPro

Every figure here is generated from line-item cost engines I build and calibrate against BLS wage data, manufacturer pricing, and public cost guides — then range-checked the way a structural engineer reviews a bid: does each line reconcile, and does the total hold together? These are planning ranges, not quotes; defer to a licensed pro in the relevant trade. More about the methodology →