Build Log

What 'AI tender comparison' actually has to handle

By Alexander Wingfield

Co-founder

5 min read

In the ideal version of a tender, the surveyor sends out a schedule of works as a spreadsheet, each contractor fills in the price column, and the same file comes back. The first version of Tendermark we sketched assumed some version of that world. Then we asked practising surveyors for real tender returns to test against, and one of the first to arrive was a photograph: a printed schedule, priced by hand in ballpoint, shot at an angle on a desk.

A printed schedule of works priced by hand in ballpoint, photographed at an angle on a desk

Nobody had done anything wrong. The contractor had been sent a document and had returned the fastest faithful copy their day allowed. That, it turned out, is the normal case. Returns come back as spreadsheets with the columns rearranged, as PDFs printed and rescanned, as Word documents, and as photographs of paper. The ideal world hardly ever happens, and the most careful pricing in the set can arrive in the least convenient format. It still has to be in the comparison.

The first route: read whatever arrived

So the first route we built accepts all of it. The surveyor uploads whatever the contractor sent: Excel in both its modern forms, CSV, PDF, Word, or a photograph. The matching a surveyor would otherwise do by hand, line by line into a comparison spreadsheet, became the product's job.

Reading those real returns taught us the next lesson. The prices were the easy part. The trouble lived between them, in the cells that said "Incl.", or "Incl. in 3.2", or "Noted", or said nothing at all, or said something nobody outside the contractor's office could confidently read. Each of those is an answer, and they mean different things, so every cell resolves to one of eight response types rather than being forced into a number or discarded. Six of the eight appear on this one page alone.

Each handwritten cell from the photographed schedule, read one at a time and classified: "1,850" resolves to Priced, "Incl." resolves to Included, "Incl. in 3.2" resolves to Bundled, an empty cell resolves to Blank, "Noted" resolves to Noted, "say 850??" resolves to Unknown. The last cell cannot be classified with confidence and is flagged for your review.

One decision made all of this tractable: the schedule of works is the source of truth, uploaded or created in Tendermark. It is captured once, when the tender is set up, and every return is read against it, one response expected per known line item. The reading itself is done by a language model with the schedule as its frame; ordinary code then classifies every cell, resolves the cross-references it can, and checks the sums. The model reads and extracts; it does not get to conclude.

And when something genuinely cannot be read, it is not guessed. "Unknown" is an answer, flagged for your review, with the original ink preserved beside it. That refusal to guess is the same posture behind the five questions we suggest asking any AI vendor, and it is what we mean when we say Tendermark is built to support the surveyor in meeting their obligations under the RICS AI Standard.

The Tendermark comparison table with one return in: Crestview's column against the 6 schedule lines from the photographed page, with the blank and unreadable cells carrying the flagged for your review icon and the footer noting it is not a recommendation. A cursor clicks the flagged cell for "Prepare and redecorate previously painted walls, two coats", opening the correction popover: the response type reads Unclear and the Note field carries the raw handwriting, "say 850??", as the extraction stored it.

The second route: stop the chaos at the source

That route works, and we assumed for a while it was the whole product. But the more surveyors we spoke to, the clearer a second thought became. Reading the chaos well is good. Not producing it in the first place is better, and it gives the surveyor something the upload route never can: control over what a return looks like before it exists.

So we built the second route, and it is arguably the more important one. Instead of documents going out and files coming back, the surveyor sends each contractor an invitation link. It opens the schedule in the browser, wherever the contractor happens to be, and they price it line by line: a figure, or Included, or Noted, or N/A, with a note wherever a caveat belongs. Progress saves, so a return can be started in the office and finished in the van. And the submit button will not enable until every line has an answer.

That last rule retires a whole family of problems in one move. The curly bracket drawn down half a page with one round sum beside it cannot happen here. Neither can the silent gap, the line nobody priced and nobody noticed until the comparison. On this route, a gap will not submit.

The Tendermark invitation screen for the same Hartwell House schedule, on a phone: Crestview answers every line in the browser: "Take off and renew defective skirtings, hall and landing (12 m)" priced at £1,850.00, "Ease and adjust internal doors (6 no.)" marked Included, "Renew architraves to match existing (4 no.)" marked Included with the note "Incl. in 3.2", "Hardwood threshold to rear lobby" marked N/A, "Allow for protection of floor coverings throughout the works" marked Noted, "Prepare and redecorate previously painted walls, two coats" priced at £850.00. The running total reads £2,700.00 and the Submit button enables only once all 6 lines are answered.

The invitation carries one more thing: the contractor's email address, on file from the start. When the client appoints, the firms that were not successful can be told properly, with a courteous note, rather than finding out by silence. Contractors spend real hours pricing tenders; telling them the outcome is basic respect, and it is the sort of thing that only reliably happens when the system makes it easy.

Two routes, one comparison

The invitation gives the surveyor control where control is available. The upload covers the reality that some returns will always arrive however they arrive, and if an invited contractor posts a paper copy anyway, the invitation converts to an upload without losing its place. Either way, everything lands at the same table, read against the same schedule, with anything doubtful flagged for the surveyor's decision.

That is where this build kept ending up, from both directions: the levelling is judgement work, and the judgement stays with the surveyor. The two routes just decide how much stands between the surveyor and it.

If you level tenders for a living and any of this reads wrong, tell us. That is how most of it got built.


The schedule in these images is not a real firm's return. It is generated for illustrative purposes. No real tender data appears anywhere in our marketing.

A monthly note from Tendermark. What we're building, and what we're learning about tender comparison. One email a month. Unsubscribe any time.

We'll only use your email for this. Unsubscribe any time. See our Privacy Policy.