Skip to main content
DoneThat

AI Adoption GuideConstructionBid

Historical Bid RAG Retrieval

RAG over the internal bid library surfaces relevant unit rates, scope language, and lessons learned for the active tender.

Construction processBidAwardPlanMobilizeBuildInspectHandoverClose

By Don, DoneThat’s AI coach · updated

What a good retrieval returns

A retrieval is done when the estimator has a cited row to accept or reject, not when a model has filled a cell. The row is a unit rate, a scope clause, or a lesson from a named past bid, with enough source detail that another estimator could open the same file and see the same line. The active tender has no price until the estimator marks the number.

The quality bar is the cite, not how fluent the answer sounds. If the system cannot point to a bid identifier, a project name, a date, a region, and a line item or clause heading, treat the output as unusable even when the wording sounds like your firm. Empty is the correct result when the library has no match. Inventing a rate to keep the sheet complete is a different task, and it is not this one.

Retrieved material is evidence from a prior job. It is not this job's price, not this job's specification, and not a contractual commitment unless the estimator copies it into the live bid documents and stands behind it. The library speaks first. The estimator decides.

When quantities are still coming off drawings, wait for a takeoff you trust. Pair retrieval with automated BOQ takeoff from drawings so you search for rates against measured items, not against a guessed scope.

How to query the bid library

Start from the live item, not from a vague prompt. Name the work, the unit, the specification family, the region, and the year band you will accept. A query that only says "concrete rate" will surface whatever ranks highest, often the most complete past bid rather than the most comparable one.

Constrain the search to documents the firm treats as bid records: submitted tenders, awarded files, and marked-up estimate workbooks estimators still recognize as source of truth. Project platforms from Autodesk or Procore may hold drawings, RFIs, and cost codes next to those files. Treat those platforms as storage and context, not as a substitute for a cited line in a past bid.

Ask for three kinds of hits separately so they do not blend:

  1. Unit rates and build-ups, with the source bid, item description, unit, date, and region or market.
  2. Scope language: inclusions, exclusions, and clarifications that traveled with a similar item.
  3. Lessons recorded against that bid or item, kept labeled as lessons, not as specification text.

For each hit, require a cite the estimator can follow: bid or job identifier, file name or document title, section or sheet, and the line or clause. If the retriever returns a paragraph with no path back to a document, reject it before you argue about the number.

Do not let the model rewrite the retrieved rate into current money. Indexation, labour agreements, and supplier quotes are the estimator's work. If you keep a separate rate book, send accepted cites into estimating benchmark update as candidates, not as automatic replacements.

Run the query after you know the item's unit and the specification heading you are pricing.

Three retrieved rows on one tender

An estimator is pricing a municipal pump-station package. The bill has a line for below-grade concrete in a specified mix, measured in cubic metres. The library is searched with that description, the unit, the city's market, and a window of recent submitted bids, not any concrete the firm ever poured.

The first hit is a unit rate from a pump-station bid in the same city, same mix family, same unit, with a cite to the estimate workbook and the cost-code line. The estimator opens the source, checks the build-up against this specification, marks the cite as accepted evidence, and applies their own labour, plant, and risk. They do not paste the library number into the live cell. The retrieved rate never becomes this job's price without that mark.

The second is scope language from a different pump-station: an exclusion for contaminated excavated material and a clarification on who owns dewatering after a stated depth. The cite points to the qualifications section of that bid. The estimator reads it as a reminder to check this employer's bills and geotech, not as text that already belongs in this Form of Tender.

The third is a lesson tagged to a bid that lost money on a similar structure: temporary works were underestimated because the excavation sat in a floodplain. The cite is a close-out note, not a contract clause. The estimator keeps it in the risk register and does not drop the wording into the offer as if the employer had already agreed it.

No row invents a number the library did not contain. If a fourth query, for a specialist coating this firm has never tendered, returns nothing, the coating cell stays empty until a supplier quote or a first-principles build-up exists. Completeness of the spreadsheet is not a reason to fabricate a rate.

Accepting or rejecting a cite

Every retrieved row needs an explicit estimator action: accept as evidence, reject, or park for a second look. Silence is not acceptance. The live estimate should show which cells rest on a library cite and which rest on a quote, a first-principles build-up, or a gap.

Accept a rate cite only after you have opened the source bid and checked comparability: close-enough specification, same unit, compatible inclusions, and a market you will treat as a neighbour to this one. If the source bundled attendances you must price separately here, reject the rate even if the headline number looks convenient.

Accept scope language only as a draft you will edit against this invitation to tender. The cite proves your firm has used similar words before. It does not prove those words fit this contract.

Accept a lesson as a warning. Route lasting write-ups through lessons learned knowledge base extraction so the next search can find the lesson labeled as a lesson. Do not promote it into contractual fact because the prose is confident.

Reject a missing cite, the wrong region or year band, a thin word-overlap match, two jobs merged into one paragraph, or an answer padded because the library was empty. After the offer is assembled, adversarial bid review tests whether accepted cites were stretched past the source.

The estimator's mark is the control. Without it, a retrieved rate is a suggestion sitting next to the job, not a price in the bid.

Where retrieval quietly fails

The failures that hurt tenders look like useful answers.

A rate from a different region is the usual one. Labour, haul, and supplier markets do not travel with a similar-looking item description. If the cite is a coastal city and this tender is inland, or the source used a different labour agreement, the row is a false neighbour. Filter region in the query, then still read the cite.

A lesson treated as a contractual fact is next. Close-out notes, claims narratives, and estimator comments describe what happened on a job. They are not inclusions the employer has accepted. Dropping them into the offer, or assuming the specification already covers them because a past bid discussed them, creates a gap between what you priced and what you promised.

A retrieved rate used without the estimator's mark is the third. The library number belonged to another job's productivity, attendances, and risk appetite. Pasting it into this bill skips the only person accountable for this tender. If you cannot say which source bid the number came from and why it is comparable, it does not belong in the cell.

Project records in Autodesk or Procore can sit in the same corpus as the priced bill. Keep search scoped to bid documents unless you are looking for a lesson, and keep lessons labeled so they cannot masquerade as rates or clauses.

When the library returns nothing

No match is a valid outcome. Leave the cell empty, name the gap, and price it by quote or first principles. A generated number to fill the sheet is not a retrieval.

Record the query so a bid-lead can see the library was searched and failed. Do not widen region, year, or specification until something appears; that imports the wrong neighbour. A later quote may enter the library as a new bid. Do not back-write it as if the library had it. The estimator still owns the offer.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first