Use of AI in Quantity Surveying: Comparing Subcontractor Quotes

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Use of AI in Quantity Surveying: Comparing Subcontractor Quotes.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Use of AI in Quantity Surveying: Comparing Subcontractor Quotes.

Yes, once each return has been put into the same item list. AI can map five quotes onto one schedule, flag blank lines, qualifications and rates far from the median, and draft clarification queries. The quantity surveyor still checks every flag against the source documents, levels the omissions like for like and makes the recommendation.

The failure to avoid is a tidy summary of five PDFs that looks complete and isn't. A tender comparison is only useful if every line is matched to the same scope item and every blank, "included", "excluded" and qualification is accounted for, so the AI works on extracted rows and your master list, not on a request to "compare these tenders". Tender prices are also commercially sensitive, so the files need preparing before any assistant sees them.

Follow me on Instagram@sagnikteaches

The example is a partitions and ceilings package on a four-storey office refurbishment, with five returns lettered A to E. The figures are invented for illustration, and the same process fits whichever trade package you compare.

Connect on LinkedInSagnik Bhattacharya

Why five returns arrive in five shapes

A tender comparison would be easy if every subcontractor priced the same schedule in the same file. They don't. One returns the priced bill in Excel, another a PDF with a lump sum and a covering letter, a third has reworded the item descriptions, and a fourth has changed the quantities. The qualifications that change the price (the conditions and exceptions a bidder attaches to its figure) often sit in a covering letter or an email, not on the pricing sheet. Comparing the totals on the forms of tender tells you very little.

Subscribe on YouTube@sagnikteaches

Levelling, which some teams call a bid tab or tender analysis, is the work of putting every return on the same scope, so the differences left are differences of price and not of what was included. AI helps because it is patient with messy documents. It is risky when asked for a conclusion. The general version of this task, across trades, is covered in whether AI can do construction bid levelling, and what it catches and misses. The quantity surveyor's version has a priced schedule, a master list, five returns and a recommendation to write.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

Prepare the returns before any assistant sees them

Do this once per package. It takes longer than the AI step, and it is where most of the accuracy comes from.

  1. Keep the originals untouched in a read-only folder and work from copies.
  2. Anonymise. Replace bidder names, logos, contact details and anything that identifies the client or site with Bidder A to E, and keep the key in a separate document.
  3. Extract each priced schedule into its own sheet. For Excel returns, copy values. For PDFs, extract the text and check every number against the page, because a misread digit is invisible later.
  4. Copy qualifications word for word from covering letters and emails into one plain-text file per bidder.
  5. Record the declared total, programme and validity period from each form of tender.

Confidentiality comes next. Tender prices are commercially sensitive and the tender documents may carry their own confidentiality terms, so check the terms and your client's permission before uploading anything. The business plans of ChatGPT, Claude, Gemini in Workspace and Microsoft 365 Copilot don't train on business content by default, according to the vendors' terms as checked for this series, while consumer ChatGPT and Claude accounts let you switch training off in their privacy settings. Confirm the setting in your own account instead of assuming it.

File limits rarely bite on one package, but know them. Anthropic's help article says a Claude chat takes up to 20 files of 500 MB each, with PDFs limited to 1,000 pages. It analyses text and visual elements in PDFs of 100 pages or fewer and reads text only from 101 to 1,000 pages. Google's Gemini page allows up to 10 files per prompt at 100 MB each, and warns that very large uploads can exceed the context window, so responses may miss details. Five bidders with a schedule and a letter each makes ten files, which fits both. Even so, upload one bidder at a time and keep each upload short.

Build the master item list first

The master list comes from your tender documents: the bill of quantities or scope schedule that every bidder was asked to price. Each line has a reference, a description, a unit, a quantity, and your own estimate (your cost plan figure for the package). Everything else in the comparison hangs off it. If you need a worked version of building that list, a bill of quantities template checked with AI goes through the items, and how AI can help quantity surveyors with BoQ checks, take-offs and reports covers the wider toolkit.

RefItemQtyUnitQS rateQS estimate
1Preliminaries and supervision (time-related site costs)1sum-$46,000
2Metal-stud partitions, 100 mm, 2 layers each side1,850m2$62.00$114,700
3Mineral wool insulation within partitions1,850m2$6.50$12,025
4Suspended ceilings, tile and grid2,400m2$41.00$98,400
5Fire-stopping to partition heads and service penetrations1sum-$17,500
6Door linings and architraves, doors by others96no.$210.00$20,160
7Access equipment1sum-$14,000
8Out-of-hours working allowance1sum-$9,000
Total$331,785

The comparison: five returns on one package

This is the tender-return comparison table after each schedule has been mapped to the master list. Amounts are as submitted, with the median of the returns that priced each line in the last column. "Blank" means no entry was found, and "excluded" means the bidder said so in words.

ItemQSABCDEMedian
1 Preliminaries46,00044,00038,00052,00041,00045,00044,000
2 Partitions114,700111,000101,750122,100109,150112,850111,000
3 Insulation12,02511,10010,17512,95011,10011,47011,100
4 Ceilings98,40096,00091,200105,60070,200 (1,800 m2)97,20096,000
5 Fire-stopping17,50018,200blank19,00016,80017,90018,050
6 Door linings20,16019,68019,00821,60019,20020,35219,680
7 Access equipment14,00013,500blank15,50012,00014,20013,850
8 Out-of-hours9,0009,500blank10,5008,500excluded9,500
Total as submitted331,785322,980260,133359,250287,950318,972
Rank, lowest first4th1st5th2nd3rd

Read the grid before the totals. Bidder B is the lowest, $62,847 below A, but three of its eight lines are blank. Bidder D is second lowest, and its ceilings line is $70,200 against a median of $96,000, which looks like a bargain until you notice that the bracket says 1,800 m2 and the tender asked for 2,400. Bidder E has excluded out-of-hours working. A is complete and mid-priced, and C is complete and consistently the most expensive. As submitted, B sits 21.6% below the QS estimate. That is a result that deserves a question before it deserves a celebration.

Omissions: a true gap or "included elsewhere"

A blank cell has several possible meanings, and only some of them are gaps. The job is to sort them before you add any money.

What you seeIt might meanHow to resolve it
Blank, no commentForgotten, or deliberately omittedQuery in writing; adjust provisionally
Zero or "nil"Genuinely free, or included in another rateAsk where it is included
"Included" with no sumAbsorbed in preliminaries or in unit ratesAsk where, and check the host line is not out of line
"By others" or "excluded"Scope shifted to the main contractor or another tradeCheck the tender documents for who owns it; adjust if it is the bidder's scope
Provisional sum different from yoursBidder has assumed a different allowanceReinstate your figure for comparison
Quantity changedBidder re-measured or priced a different areaRe-price at the tender quantity

Once each gap is classified, level the returns. For each blank or excluded line, add the median of the returns that priced it (or your own estimate if fewer than three did). For a changed quantity, re-price the shortfall at the bidder's own rate. Show every adjustment as a separate row, not buried in a new total.

BidderAs submittedAdjustment and basisLevelled totalRank
A322,980None322,9803rd
B260,133Fire-stopping 18,050; access 13,850; out-of-hours 9,500 (medians): +41,400301,5331st
C359,250None359,2505th
D287,950Ceilings: 600 m2 short at D's own $39 per m2: +23,400311,3502nd
E318,972Out-of-hours at the median: +9,500328,4724th

The picture changes in three ways. B is still lowest, but the gap to A narrows from $62,847 (19.5% of A) to $21,447 (6.6%). E drops from third to fourth, which lifts A from fourth to third. And the lowest levelled figure is 9.1% below the QS estimate, which is a more believable place to be. B's number is provisional: if it confirms that access equipment sits inside its preliminaries, the $13,850 comes off and B's levelled total falls to $287,683. The fire-stopping adjustment is cautious in the other direction: B's letter says services penetrations are included, so the full $18,050 median overstates the gap, and B's own price for the partition heads replaces it once the query comes back. That is why the adjustment column names the basis and the report should call the result "levelled, subject to clarification".

Qualifications: sorting the ones that change the price

Qualifications are where most tender surprises live. Ask the assistant to list each one verbatim and propose a category, then check the category yourself. Four categories cover most of them: price (it changes what is included), time (programme or validity), risk (liability, payment, design responsibility) and housekeeping (administrative).

BidderQualification as writtenCategoryAction
B"Normal working hours only"PriceOut-of-hours line adjusted; query
B"Access equipment by others"PriceTender documents give access to the subcontractor; adjusted at the median
C"Excludes asbestos removal"Price and riskCheck the survey; note if nothing is expected
C"Payment within 45 days"RiskContract says 30 days; record, not priced
D"Quantities as measured by us"PriceCeilings re-priced; ask D to confirm it priced the tender quantities
E"Price valid for 14 days"Time and housekeepingAsk for extension to the tender validity period
E"Programme: 20 weeks" against 14 requiredTimeQuery; programme impact is a commercial decision
ANone

Whether a qualified return may be accepted, must be clarified or is treated as non-compliant depends on your tender rules and the client's procurement process. Those rules decide, not the assistant, and not the table above. For the contract paperwork around the same package after award, a subcontractor paperwork chasing checklist is a useful companion.

The prompt that maps one return onto the master list

Run one bidder per chat. Give the assistant the master list and the extracted return, forbid arithmetic, and demand quoted evidence with a page or cell reference for every status.

You are helping a quantity surveyor compare subcontractor tender returns. I will give you a MASTER LIST of scope items and ONE anonymised return (Bidder B). Map the return onto the master list.
For each master item output: item ref | bidder's amount (number only) | status (priced / partial / blank / included elsewhere / excluded / provisional sum) | exact words from the return supporting the status, with page or cell reference.
Rules: never calculate or correct a figure; copy it exactly. If you cannot find an item, the status is blank. Quote qualifications word for word in a separate list; do not interpret them. Do not guess a rate.

MASTER LIST
1 Preliminaries and supervision (sum)
2 Metal-stud partitions, 1,850 m2
3 Insulation in partitions, 1,850 m2
4 Suspended ceilings, 2,400 m2
5 Fire-stopping to partition heads and service penetrations (sum)
6 Door linings, 96 no.
7 Access equipment (sum)
8 Out-of-hours working (sum)

RETURN (Bidder B)
(paste the priced schedule and the covering letter)

An illustrative answer, with the kind of error to catch:

1 | 38000 | priced | "Preliminaries ... 38,000" (schedule p2)
2 | 101750 | priced | "1,850 m2 @ 55.00" (schedule p2)
3 | 10175 | priced | "1,850 m2 @ 5.50" (schedule p2)
4 | 91200 | priced | "2,400 m2 @ 38.00" (schedule p3)
5 | none | included elsewhere | letter p1: "including all fire-stopping to M&E penetrations"
6 | 19008 | priced | "96 no @ 198.00" (schedule p3)
7 | none | blank | letter p1: "access equipment by others"
8 | none | blank | letter p2: "normal working hours only"

QUALIFICATIONS (verbatim)
- Access equipment by others.
- Normal working hours only.
- Fire-stopping to M&E penetrations included.

Item 5 is the mistake. The assistant saw the word "fire-stopping" in the letter and marked the line as covered, but the letter only mentions services penetrations. The master item also includes partition heads, which B has not priced. The correct status is "partial", with a query. This is the commonest error in AI mapping: a keyword match standing in for a scope match. Your check is to read each quoted phrase against the master item, not to trust the status column.

Price gaps: reading the pattern, not just the total

Once the returns are levelled, compare each line against the median and your estimate. In Excel the median is =MEDIAN(C5:G5) and the deviation is =(C5-$H5)/$H5, and a conditional format on anything beyond, say, 10% makes the outliers visible. The 10% threshold is an illustrative choice. Pick one that suits the trade and the size of the package, and use it consistently. A chat assistant or Excel's Copilot pane, if your Microsoft 365 plan includes it, can write these formulas; the ChatGPT Excel guide shows the approach. Check the first row by hand either way.

On the example, eight entries sit more than 10% from the median:

  • B preliminaries, 13.6% under. Together with its blank access line, this suggests access equipment might sit inside the preliminaries. That is a question, not a conclusion.
  • C preliminaries, 18.2% over; C insulation, 16.7% over; C access, 11.9% over; C out-of-hours, 10.5% over. C is expensive across several lines, which suggests risk loading and not an error.
  • D ceilings, 26.9% under. The rate per square metre is $39 against a median of $40, only 2.5% under, so the gap comes from the quantity and not the rate. Comparing rate and quantity separately is the only way to see this.
  • D access, 13.4% under; D out-of-hours, 10.5% under. D is sharp on the allowances, which is worth asking about without assuming anything.

Patterns tell you more than single flags. A bidder low on every line is probably aggressive or has misread the scope. A bidder low on two lines is probably missing something. If every bidder is above your estimate on one line, your estimate may be stale. If one bidder is high on everything, they may simply not want the job.

Clarification queries that leak nothing

Every query goes to the bidder in writing, in the same format for each, and none of them reveals another bidder's price, rank or qualification. An assistant drafts well here because the rules are clear, and you keep the final wording and the send button.

Draft a clarification query to Bidder B using only the items below. Neutral tone, the same format we use for every bidder. Do not mention other bidders, their prices or any ranking. For each item, ask the bidder to confirm whether it is included in the tender sum, and if excluded to provide a price. Ask for a reply by [date].
Items: (5) fire-stopping to partition heads (letter covers only services penetrations); (7) access equipment (letter says by others); (8) out-of-hours working (letter says normal hours only).

A sample of what a good draft says: "Please confirm whether the tender sum includes fire-stopping to partition heads (item 5), access equipment (item 7) and out-of-hours working (item 8). Your covering letter refers to services penetrations, access by others and normal hours only. If any item is excluded, please provide a price for it. Please reply by [date]." Log the query, the date and the reply against the bidder, because the answers change the levelled totals and you'll need the trail when someone asks why B's figure moved.

The bigger lesson is fairness: the same questions go to every bidder who shares the issue, and every bidder gets the same time to answer. That's the part an assistant can't guarantee. It is your responsibility under whatever rules govern the tender.

Checks before anything goes into the tender report

  • Reconcile totals. For each bidder, the sum of mapped lines must equal the declared total in the form of tender. Any difference is an arithmetic error in the return or in your extraction, and either one matters.
  • Spot-check against the source. Pick one line in five, at random, and read the figure and the quoted phrase in the original file.
  • Demand evidence. Every status the AI gives should carry a file, page or cell reference. A status without one is a guess.
  • Repeat the run. Map one bidder twice in fresh chats and compare. Differences show where the model is unsure.
  • Test on a past tender. Run a package whose outcome you already know and see whether the flags match what went wrong at the time.
  • Keep the trail. Save the prompts, outputs, your edits and the final table, so the report can be defended later.
  • Keep the decision with a person. The recommendation weighs price, programme, capacity, qualifications and contract terms. The assistant provides the levelled grid; you sign the report.

Used this way, the copying moves to the assistant and the surveyor's time moves to reviewing flags and evidence, which is where the surveyor's judgement belongs. Time the first package you run this way against your usual method before you promise anyone a faster turnaround. The related jobs that follow award, such as checking an interim valuation against the work done, use the same habit: AI extracts and flags, a person verifies and decides.

Questions about AI and tender comparisons

Can I upload tender returns to ChatGPT, Claude or Gemini?

Check the tender's confidentiality terms and your client's permission first. Then anonymise: replace bidder names with Bidder A to E and strip contact details. Business plans of the main assistants don't train on business content by default, but you should still confirm the setting and the terms in your own account.

How do I level a return that left an item blank?

Add the missing item at a defensible figure, such as the median of the returns that priced it or your own estimate, and label the adjustment as provisional until the bidder answers your query. Show the as-submitted total, the adjustment and the levelled total side by side in the report.

Should AI recommend which subcontractor to award?

No. It can rank returns by levelled price and list the risks it can see, but the recommendation needs commercial judgement: capacity, programme, past performance, which qualifications you accept and the contract terms. The quantity surveyor makes that call, signs the report and answers for it.

What if the returns come as scanned PDFs?

Treat every extracted number as unproven and check it against the page. Claude reads text and visuals in PDFs of up to 100 pages and text only from 101 to 1,000 pages, so long scanned returns may need a separate text-recognition step. Typed or exported PDFs are far safer.

Further reads

Sources: Anthropic's help article on uploading files to Claude (updated 23 July 2026) and Google's Gemini Apps help page on uploading and analysing files, both read 1 November 2026; vendor data-handling terms as recorded for this series in September and October 2026. All tender figures in the worked example are invented for illustration.

Want a tender comparison routine your team can repeat?

On a 1:1 call we'll look at how your team compares returns now, build a reusable master-list and flagging routine, and decide which steps an AI assistant can safely draft and which stay with the surveyor.

Book a 1:1 call with me