A quote comparer on AWS for a few dollars a month
Three quotes come in for the same bathroom refit: eleven thousand, thirteen and a half, and fourteen two. The eleven looks like the obvious answer for about a minute, until somebody notices it does not mention removing the old suite, tiling, or making good afterwards. This post walks through a small system that finds that in the first minute rather than the third week.

Key takeaways
- Compare line items and exclusions, not totals. The totals describe different jobs.
- Every extracted number keeps a pointer back to where it came from in the document.
- Units have to be normalised before anything can be compared at all.
- The system never recommends. It surfaces differences and stops.
- Designed on AWS for about $3 a month.
The whole system on one page
Before any code, here is the shape of what we are designing.
- Compute
- Analytics
- Front-end & mobile
- People
Why there is no ranking step
It is the first thing anyone asks for and it is the wrong thing to build. A ranking requires weighing price against scope against risk against how much you trust the supplier, and three of those four are not in the documents. A system that ranks anyway is applying weights somebody invented, invisibly, to a decision worth thousands.
The version that helps is the one that makes the differences unmissable in ninety seconds instead of a fortnight. Everyone who has compared quotes by hand knows the failure mode is not bad judgement; it is missing the line on page four that says “excludes disconnection of existing services”.
What runs (the inside)
- The reader. Pulls line items, quantities, units and totals out of whatever arrived, keeping a pointer back to the page and line each came from. Part 2.
- The normaliser. Converts units, aligns line items to the requested scope, and identifies what each quote does not cover. Part 3.
- The comparer. Produces the side-by-side, with the exclusions given the same visual weight as the prices. Parts 4 and 5.
Three quotes, end to end
- Compute
- Management
- Analytics
In plain words
Three builders quote for the same bathroom. The first is eleven thousand and reads as a single page: supply and fit, one number. The second is thirteen and a half over four pages with twenty-two line items. The third is fourteen two, similar detail, plus a page of terms.
The system reads all three, converts the tiling from “the bathroom” to eleven square metres using the spec, and lines up what each covers. Then it produces the finding: the cheapest quote does not mention removing the existing suite, does not include waste disposal, does not include making good the walls, and its terms make the customer responsible for materials delivery.
It does not say the eleven thousand quote is worse. It might be a perfectly good arrangement with a builder who assumed those things were understood, and it is now a conversation with a specific list of four questions rather than a number that looked cheap. That conversation is the output.
Design rules that shaped every decision
- Never rank. Surface the differences and stop.
- Every number keeps a pointer to the page and line it was read from.
- An exclusion is a finding with the same weight as a price.
- A line that cannot be normalised is reported as not comparable, never estimated.
- Nothing is inferred about what a supplier “probably” includes.
- The original documents are always one click away from every number.
Why this shape
Comparing quotes is a task people are already reasonably good at and have no time for. The mistakes are not analytical; they are attentional, and they happen on page four of the third document at half past five. That is a very different problem from the one an automated scoring tool solves.
So the design puts almost all of its effort into extraction fidelity and exclusion detection, and none into judgement. It is a system for making sure nobody misses anything, run by somebody who already knows what matters.
The next four posts walk through each piece: how a quote gets read, how quotes are made comparable, how the comparison is presented, and what happens when a quote cannot be compared at all. One diagram per post, a cost breakdown, and an engineering reference at the end.
All posts