The bid that came in $180K under the field is rarely cheaper for the right reasons. Nine times out of ten it is missing scope — a pay item your SOW called for that the sub quietly left out, priced as zero, or buried in an exclusion you skimmed past at 11pm. You award it, the sub starts, and three weeks in you get the email: "That wasn't in our number." Now it is a change order, and you are eating it because the prime contract still owes the owner that work. Catching this before award is the entire job of scope gap analysis, and it is the difference between a clean award memo and a margin-erasing surprise.

Scope gap vs. scope creep: two different problems

People use "scope gap" loosely. There are actually two failure modes, and they push the comparison in opposite directions.

  • Scope gap (missing scope): an item in your scope of work that a bidder did not quote. The bid looks low because it is incomplete. You pay for the missing work later, at change-order rates, often with no competition.
  • Scope creep (extra scope): an item the bidder priced that is not in your SOW — or is already covered by another package. The bid looks high, or you double-pay because two subs both carry the same item.

Both distort a side-by-side comparison. If Sub A quoted full scope and Sub B left out temporary shoring and dewatering, comparing their bottom-line totals is comparing two different jobs. The honest comparison only happens after you normalize both bids to the same SOW and account for what each one is actually missing or adding.

Why the low bid is usually low because it is short

Estimators know this in their gut, but it is worth making concrete. Take a structural concrete package with a $2.4M field estimate and five bidders:

BidderSubmitted totalvs. fieldWhat the leveling found
Sub A$2,210,000−8%No formwork stripping line; excluded dewatering
Sub B$2,355,000−2%Full scope, priced curing & testing
Sub C$2,390,000−0.4%Full scope; carried winter protection
Sub D$2,640,000+10%Full scope; double-carried embeds (also in steel pkg)
Sub E$2,180,000−9%Missing rebar for two pier caps; no excludes listed

The two cheapest bids, A and E, are cheapest because they are short. Add back the dewatering and stripping for A (call it ~$150K) and the missing rebar for E (~$130K of installed bar), and both land right on top of B and C. Sub D looks expensive until you notice it is carrying embeds that the steel package already covers — a creep item you would otherwise double-pay. The real spread between the four complete-scope numbers is under 4%. The award is now a question of performance and schedule, not price, which is exactly where you want it.

How to map every bid to your SOW

The mechanics are not glamorous. You take your scope of work — the bid form, the schedule of values, or the owner pay-item list you are obligated to deliver — and you check each bidder's submission line by line against it. For each SOW item, every bidder is in one of three states:

  1. Quoted — priced, with a quantity and unit price you can read.
  2. Missing — your SOW has it, the bidder's submission does not. This is the gap.
  3. Excluded/qualified — the bidder named it and pushed it back to you in writing.

Then you do the reverse pass: every line the bidder priced that does not map to a SOW item is flagged as extra. Do this across 5–15 bidders by hand and you are building a wall-sized matrix where the columns are bidders and the rows are pay items, and you are color-coding cells until your eyes blur. It works, but it is slow and it is where transcription errors creep in. A standardized free bid-leveling checklist keeps the line-by-line pass disciplined so you are checking the same things on every package instead of relying on memory.

Normalize units before you compare

Half of "missing scope" is really a unit mismatch. One sub quotes asphalt by the ton, another by the square yard; one prices excavation neat-line, another with swell. Map both to a common pay-item basis before you decide an item is missing — otherwise you flag a gap that is actually just a different unit. Pay-item normalization (against a published catalog like the NYSDOT item list, or against the peer median when no catalog applies) is what makes the matrix apples-to-apples.

Read the exclusions and qualifications — they are the fine print that bites

The dangerous gaps are rarely blank cells. They are sentences. The "Clarifications," "Assumptions," and "Exclusions" pages of a sub's proposal are where scope quietly leaves the building. Things to hunt for:

  • "Excludes" lists — dewatering, traffic control, premium time, testing, permits, bonds, winter conditions. Each one is a SOW item the sub is handing back to you.
  • "By others" / "assumed by GC" — flagging, layout, surveying, disposal, MOT. If your SOW puts it in this package, "by others" means you.
  • Quantity assumptions — "based on 4,200 CY of import." If the plans say 5,100, the difference is a change order priced at their unit rate, not the competitive rate.
  • "Per plans dated ___" — if it is an old addendum, the bid may not include the latest revision.

An exclusion is not automatically bad. A sub that clearly excludes dewatering and tells you so in writing is more honest than one who silently left it out. But an exclusion only protects you if you priced it against the others. The point of the read is to convert every qualification into a line you can add back and compare.

A checklist approach you can run on any package

Whether you do it by hand or with software, the sequence is the same on every bid you receive:

  1. Lock the SOW you are leveling against — the exact pay-item or bid-form list you owe.
  2. Extract each bidder's line items and normalize units and pay-item codes.
  3. Mark every SOW item per bidder as quoted, missing, or excluded.
  4. Reverse-pass for extra scope: anything priced that is not in the SOW.
  5. Read the exclusions/qualifications pages and convert each to an add-back line.
  6. Re-total every bid on a complete-scope, common-unit basis and re-rank.
  7. Document each gap with the page it came from, so the award memo can defend itself.

How automated scope-coverage analysis surfaces both directions

This is where Bid Reasoner does the matrix for you. It reads each sub bid PDF, extracts and normalizes the line items, and maps them to your scope of work — then runs the coverage analysis in both directions at once. It flags missing scope (SOW items no bidder, or only some bidders, quoted) and extra scope (priced items that fall outside your SOW or duplicate another package), with the page citation for each finding. On top of that, four deterministic risk rules catch the pricing tells that usually accompany a gap: unbalanced unit prices at or below $1.00, peer outliers more than 2× or under 0.5× the peer median, total-bid outliers beyond 20% of the field, and front-loaded mobilization over 10% of the total. A bid that is "low" because it zeroed out a line shows up as both a missing-scope flag and an outlier flag — two independent signals pointing at the same hole.

Because it normalizes against a pay-item baseline (the state-DOT baselines of items and the statewide-average baseline are built in, with NY and NJ DOT baselines ready, and peer-median normalization for every other state), the comparison holds up even when bidders use different units or item names. The output is a coverage matrix you can hand to a VP and an award memo that cites the page behind every gap.

The change-order math

Here is the dollar logic that makes all of this pay for itself. When a missing item surfaces before award, you have five bidders competing on it — the price is the market. When it surfaces after award, you have one sub, mid-mobilization, with no competition and full leverage. The same dewatering line that would have been ~$150K in a competitive bid comes back as a $190–$230K change order, because the sub is now pricing it as sole-source plus delay and re-mobilization.

One missed $150K line on a $2.4M package is 6% of the package — and if your prime margin is 4%, that single gap erases the job's profit and then some.

Now multiply by the number of packages on a heavy-civil job. You do not need to catch every gap on every bid to come out ahead; catching one real one per project covers the cost of looking. The work is to make the line-by-line, both-directions check routine instead of heroic — so the surprise lands in your leveling sheet at bid time, not in your inbox after the sub is on site.

If you want to see the missing-and-extra coverage matrix run against a real bid set, that is exactly what Bid Reasoner's scope gap analysis produces, page-cited and ready to defend.