Levelling quotes is rarely an arithmetic problem. It is a problem of three documents that describe three slightly different scopes in three different units, and the cheapest of them is usually the one that excludes the most.
Key takeaways
Ask a contractor what takes the longest when three supplier quotes land for the same package and the answer is almost never the maths. It is working out whether quote B includes delivery, whether quote C priced the same gauge, and whether the unit on quote A is per square metre of board or per sheet.
That normalisation work is repetitive, rule-based and evidence-bound. It is the part worth automating. What follows it — deciding which supplier you actually want on this job — is not.
Levelling is putting every quote onto a common basis so a difference in price is a difference in price and not a difference in description. Three things have to be made common before any comparison is meaningful: the unit of measure, the scope included, and the commercial terms attached.
Units are the easiest and the most commonly botched. A supply quote priced per sheet and a competing quote priced per square metre are not comparable until one is converted, and the conversion depends on sheet size, which may be stated in a different section of the same document. This is precisely why unit-price contracting exists as a distinct form — CCDC 4, the standard unit price contract fixes a price per specified unit and multiplies it by the actual measured quantity, which only works when everyone agrees what the unit is.
A workable automated pass takes the quote documents as they arrive — PDF, email body, a photograph of a fax, all of which still happen — and produces one row per line item with a fixed set of columns: description, quantity, unit, unit price, extended price, and the source document and page it came from.
That last column is not optional. Extraction from a badly formatted quote is where a model is most likely to be confidently wrong, and the only cheap defence is that every number carries a pointer back to where it was read from, so a human check is a glance rather than a re-read.
Once the quotes are in a common structure, the more valuable question is not what they say but what they do not. Suppliers exclude things quietly, and the exclusions are what turn a winning number into a losing one.
What to ask about every quote
Freight and delivery — included, extra, or free above a threshold?
Unloading and placement — curbside, or into the building, and who provides the equipment?
Lead time — and whether it is quoted from order or from deposit.
Minimum order and split-delivery charges, which decide whether your schedule can be staged.
Validity period of the quote, and any escalation clause after it.
Returns and restocking — the cost of over-ordering is a real line on a renovation.
Taxes, and whether the quoted figure is before or after them.
A model is good at this because it is a checklist applied consistently to unstructured text, which is the definition of a task humans do badly under time pressure. Produce the checklist once, apply it to every quote, and the output is a short list of genuine questions to send back to the supplier.
Contractors treat quote expiry dates as a formality until the month a material moves. They do move, and the movement is published. Statistics Canada releases the Industrial Product Price Index by major product group monthly — table 18-10-0265-01, with a release date stamped on the table itself — and the building construction price indexes by type of building and division quarterly. Those series are the reason a quote carries an expiry at all, and the reason a supplier will not simply extend one on request.
This is worth encoding in the comparison. A quote that is cheaper but expires before your likely award date is not cheaper; it is a bet. Put the validity date in the table next to the price and the trade-off becomes visible instead of remembered.
A drywall contractor is pricing a mid-rise interior package and receives three supply quotes for board, steel stud, insulation and finishing materials. One arrives as a tidy PDF, one as a spreadsheet with merged cells, one as text in an email.
The automated pass returns a single table. Two of the three priced the same board type; the third substituted a comparable product without saying so, which the extraction surfaces because the product code differs. One excludes delivery entirely. One is valid for thirty days, one for fifteen, and one does not state a validity period at all — which the omissions pass flags as a missing field rather than an assumption.
That silent substitution matters legally, not just operationally. Ontario's Sale of Goods Act creates an implied condition for exactly this situation: under s.14, where there is a contract for the sale of goods by description, there is an implied condition that the goods will correspond with the description, and matching the sample isn't enough on its own if the goods don't also match the description. A supplier who quotes one product code and ships another hasn't just gone off-spec — they've breached that implied condition, which is exactly why an extraction pass that catches the code mismatch before the order goes in is worth more than the minutes it takes to build.
The estimator now has four questions to send by email instead of an afternoon of cross-referencing. The eventual choice — which supplier is reliable in February, which one takes returns without a fight, which one has the relationship worth protecting — is made by the person who has bought from all three before.
Do not let an automated pass rank the quotes or declare a winner. The moment it does, the number that gets used is the one the tool produced rather than the one a person verified, and the failure mode is silent. Structure and flag; do not select.
There is a contractual reason as well as a practical one. If you price a client's job off a supplier number that turns out to be wrong or expired, the gap is yours to carry, and asking for more later is a legal question rather than a commercial one — our sister firm's note on a contractor asking for more than the quote in Ontario sets out how that argument tends to go.
Usually, and that is exactly where you need the source-reference column. Optical extraction from a photograph of a printed page is the highest-error input in this whole workflow, and it is also the most common one on small jobs.
Yes, and it is the higher-leverage fix. Sending suppliers a fixed request format with a stated unit for each line and an explicit list of what must be included or excluded removes most of the normalisation work before it happens. The automated pass then becomes a verification step rather than a reconstruction.
The normalisation part does. The omissions part matters even more, because a subtrade quote carries scope boundaries rather than product codes — who supplies the hoisting, who does the layout, who patches after. Those exclusions are what a levelling table should be built around.
A 30-minute call is enough to tell you whether AI pays for itself here.