The Sub Bid Comparison Workflow: Normalize, Spot the Gaps, Ask Before You Award

The Sub Bid Comparison Workflow: Normalize, Spot the Gaps, Ask Before You Award

The cheapest bid is often the most expensive lesson. Sub bids arrive in different formats, with different scopes, different exclusions, and different definitions of “included” — and the differences hide in the fine print. This article lays out a workflow for comparing sub bids apples-to-apples with AI: normalizing the formats, surfacing the gaps and exclusions, and generating the questions to ask before you award the work.

The problem: five bids, five languages

You send plans to five subs. What comes back: one detailed line-item bid, one lump-sum number on letterhead, one email that says “$18,500 — see attached” with nothing attached, one spreadsheet with its own mysterious categories, and one text message with a number and “lmk.” The prices range from $14,000 to $26,000 and you have no idea why.

So you do what every GC does: squint at them over coffee, call the two cheapest to ask what they left out, discover the cheapest one excluded demo and the second-cheapest assumed you’d handle permits — and burn half a day reconstructing what each bid actually covers. The comparison work is tedious, error-prone, and exactly the kind of structured language work AI handles well.

The goal isn’t to let AI pick your sub. It’s to get every bid onto one page, in one format, with the gaps highlighted — so your judgment operates on clean information instead of five incompatible documents.

How the workflow works, step by step

Step 1: Gather — collect every bid in whatever form it arrived

Don’t reformat anything yourself. Photos of handwritten bids, PDFs, emails, texts, spreadsheets — gather them all. If a bid is a photo or scan, transcribe it (your phone or chat tool can read text from images) or just describe it. The AI’s first job is handling the mess; yours is just collecting it.

Step 2: Normalize — one format for all bids

Feed all the bids to AI with a normalization prompt (below): it extracts each bid into the same structure — bidder, total price, line items or scope description, stated inclusions, stated exclusions, timeline, and anything marked as allowance or TBD. Bids that arrived as a single number get flagged honestly: “lump sum — no breakdown provided.”

This step doesn’t judge. It translates. Five languages become one.

Step 3: Gap analysis — what’s missing, excluded, or assumed

With bids normalized, ask AI for the comparison that matters: which scope items appear in some bids but not others? Which exclusions are unique to one bidder? Where do bidders contradict each other on who’s responsible for what (permits, demo, cleanup, patching)? The output is a gaps table: every scope item as a row, every bidder as a column, covered/excluded/unclear in each cell.

This is where money hides. A bid that’s $4,000 cheaper because it excluded $6,000 of work isn’t cheaper.

Step 4: Questions — what to ask before awarding

Have AI draft bidder-specific clarification questions from the gaps: “Your bid doesn’t mention demo — is removal and disposal included?” “You list permits as excluded; the other bidders included them — confirm.” You ask the questions (by phone is fine); you update the comparison with the answers. Two rounds of this usually resolves 90% of the ambiguity.

Step 5: Decide — with clean information

Now the prices mean something. You’re comparing adjusted apples to apples — Bid A’s $18,500 plus the $2,000 of excluded demo it doesn’t cover, versus Bid B’s $21,000 all-in. The decision is still yours: price, sure, but also responsiveness, past performance, crew availability, and your gut about who’ll actually show up. AI cleaned the data; you make the call.

What the normalized comparison looks like

Ask for this structure every time — it becomes your standard bid tab:

An illustrative example

Picture a typical 12-person GC bidding a commercial tenant improvement. Three drywall bids come in: $38,000, $31,500, and $44,000. The spread is $12,500 and the project manager’s instinct says the middle one “feels right” — which is not an analysis.

He runs the workflow. Normalized, the picture sharpens: the $31,500 bid excludes demo and disposal ($4,000 of work), lists finishing as “Level 3” while the others bid Level 4, and carries no timeline. The $44,000 bid includes demo, Level 4 finish, acoustic insulation the others didn’t mention, and a two-week schedule guarantee. The $38,000 bid is Level 4, includes demo, excludes insulation.

Adjusted: the “cheap” bid is really ~$35,500 for less finish quality with no schedule commitment. The expensive bid is carrying ~$3,500 of insulation nobody asked for. The $38,000 bid is the actual apples-to-apples winner — and now there’s a specific question for the $44,000 bidder (“can you reprice without insulation?”) and the $31,500 bidder (“confirm demo exclusion and finish level”).

Without the normalization, the PM awards the $31,500 bid and discovers the demo exclusion halfway through the job — a $4,000 surprise plus a schedule fight. With it, the decision took an hour and the gaps got resolved before anyone mobilized.

Try it: a copy-paste prompt

This is a two-part prompt. Run Part 1 first, review the normalization, then run Part 2 on the result:

PART 1 — NORMALIZE THE BIDS

I'm a general contractor comparing subcontractor bids for [TRADE/SCOPE] on [PROJECT NAME].

Below are the bids, exactly as received (mixed formats). Extract each into a consistent structure. Do NOT judge or rank them yet.

[PASTE ALL BIDS HERE — text, transcribed emails, described attachments]

For EACH bidder, extract:
1. Bidder name and contact info
2. Total price as stated
3. Price structure: line-item breakdown / lump sum / unit pricing (note which)
4. Scope as described — what they say is included
5. Stated exclusions — list every one, verbatim where possible
6. Allowances, TBDs, or open items
7. Timeline: start date, duration, schedule conditions (or "not stated")
8. Anything unclear, ambiguous, or missing that a complete bid would normally include

Format as a comparison table: scope items as rows, bidders as columns. Mark each cell: INCLUDED / EXCLUDED / UNCLEAR. Be literal — if the bid doesn't say it, mark UNCLEAR, don't infer.

PART 2 — GAP ANALYSIS (run after reviewing Part 1)

Using the normalized comparison above:
1. List every scope item covered by some bidders but not others.
2. List every exclusion that appears in only one bid.
3. Flag contradictions: items one bidder includes that another excludes.
4. Flag allowances and TBDs — these are budget risks.
5. Draft 2–4 specific clarification questions PER BIDDER, referencing the exact gap ("Your bid lists X as excluded; Bidder B includes it — please confirm").
6. List red flags: prices far below the group, missing standard scope, vague language.

Do NOT recommend a bidder. Do NOT adjust prices. Present the gaps; I decide.

That last instruction — “present the gaps; I decide” — is the whole philosophy in one line.

Before you hit send: the human-review checklist

The comparison is an internal tool, but the questions go to real subs and the decision commits real money. Review accordingly:

Common mistakes

Where this goes next

Bid comparison is one node in a bigger pre-con workflow: soliciting bids in a consistent format (so normalization starts cleaner), tracking bidder responsiveness, building a sub scorecard over time. Each piece compounds — the contractor who compares bids cleanly also negotiates from strength and documents decisions that prevent disputes later.

On a free AI Workflow Review, we’ll look at how bids move through your office today and set up this comparison workflow on a live bid package — your real subs, your real numbers. And our $2,500 AI Audit maps the full operation, from lead intake to closeout, into an implementation roadmap: every workflow, sequenced and priced.

Book your free AI Workflow Review — bring your next bid package; we’ll normalize it together.

Leave a Reply

Your email address will not be published. Required fields are marked *